[Kotlin] 스피너 구현하기
스피너는 여러개의 집합에서 하나의 값을 선택할 수 있는 방법중 하나이다.
오늘은 이 스피너를 구현해 볼 것이다.
안드로이드 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
를 인터페이스 인스턴스로 전달하면 된다!