스피너를 사용하면
여러 값 중에서 하나의 값을 선택하는 기능을 구현할 수 있다.
주로 설정 등에 사용된다.
레이아웃 추가
<Spinner
android:id="@+id/sortSpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/sort_options"
android:paddingTop="8dp"
android:paddingBottom="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
스피너를 추가해주고,
entries에 들어갈 아이템 배열을 정의해주어야 한다.
String
<string-array name="sort_options">
<item>날짜</item>
<item>시간</item>
<item>거리</item>
<item>평균 속도</item>
<item>칼로리 소모량</item>
</string-array>
사용할 값을 String에 string-array로 추가하여 선언해준다.
순서대로 반환되므로 순서가 중요하다.
선택에 반응하기
sortSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(adapterView: AdapterView<*>?) {}
override fun onItemSelected(
adapterView: AdapterView<*>?,
view: View?,
pos: Int,
id: Long
) {
when (pos) {
0 -> viewModel.sortRuns(SortType.DATE)
1 -> viewModel.sortRuns(SortType.RUNNING_TIME)
2 -> viewModel.sortRuns(SortType.DISTANCE)
3 -> viewModel.sortRuns(SortType.AVG_SPEED)
4 -> viewModel.sortRuns(SortType.CALORIES_BURNED)
}
}
}
OnItemSelectedListener 리스너를 구현하여
onNothingSelected, onItemSelected 두 개의 메소드를 오버라이드해준다.
이제 사용자가 선택된 값이 onItemSelected 의 pos로 넘어오게 된다.
만약 아까 string-array에서 날짜가 선택되었다면
pos는 0이 된다.
잘 구현된것을 확인할 수 있다.
참고
https://developer.android.com/guide/topics/ui/controls/spinner?hl=ko