경험의 기록

스피너를 사용하면

여러 값 중에서 하나의 값을 선택하는 기능을 구현할 수 있다.

주로 설정 등에 사용된다.

 


레이아웃 추가

<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

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading