[Kotlin] 스피너 구현하기

[Kotlin] 스피너 구현하기

스피너는 여러개의 집합에서 하나의 값을 선택할 수 있는 방법중 하나이다.

img

오늘은 이 스피너를 구현해 볼 것이다.

안드로이드 Developers를 참고하여 만들어 보았다.

1) 스피너에 넣을 String.xml 파일 만들기

  • 스피너에 넣어줄 항목을 배열에서 사용할 수 있는 경우에는 ArrayAdapter,
  • 선택 항목을 데이터베이스 쿼리에서 사용할 수 있는 경우에는 CursorAdapter를 통해 제공한다.

본인은, res/values/filename.xml 경로로 string array file을 만들어 주었다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="game_array">
        <item>경기를 선택해주세요</item>
        <item>풋살</item>
        <item>축구</item>
        <item>농구</item>
        <item>배드민턴</item>
        <item>볼링</item>
    </string-array>
</resources>
  • <string> 요소의 name이 리소스 ID로 사용된다.

2) SpinnerAdapter 설정

제일 먼저 스피너 안에 들어갈 내용을 String을 xml 파일로 추가해주는 작업을 할 것인데 스피너는Activity 또는 Fragment 소스 코드에 SpinnerAdapter를 지정해야 사용할 수 있다.

  • SpinnerAdapter

    • Spinner

    • SpinnerAdapter

    • AdapterView.OnItemSelectedListener

// 스피너에 데이터 연결
        val gameAdapter = ArrayAdapter.createFromResource(
            requireContext(),
            R.array.game_array,
            android.R.layout.simple_spinner_item
        )
        gameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        gameSpinner.adapter = gameAdapter

3) 스피너 선택에 응답하기

사용자가 드롭다운에서 항목을 선택하면 Spinner 객체가 항목 선택 시 이벤트를 수신한다.

스피너에 관한 선택 이벤트 핸들러를 정의하려면 AdapterView.OnItemSelectedListener 인터페이스와 이에 상응하는 onItemSelected() 콜백 메서드를 구현한다.

다음은 Activity의 인터페이스 구현이다.

class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {

    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }

    override fun onNothingSelected(parent: AdapterView<*>) {
        // Another interface callback
    }
}
  • AdapterView.OnItemSelectedListener에는 onItemSelected()onNothingSelected() 콜백 메서드가 필요하다.

  • 그런 후 setOnItemSelectedListener()를 호출하여 인터페이스 구현을 지정해야 한다.

val spinner: Spinner = findViewById(R.id.spinner)
spinner.onItemSelectedListener = this

Activity 또는 Fragment를 사용하여 AdapterView.OnItemSelectedListener 인터페이스를 구현하는 경우(위의 예시 참조) this를 인터페이스 인스턴스로 전달하면 된다!


© 2023. All rights reserved.

AgileCatch