Spinner란 위와 같이 드롭다운 형태로 사용자가 원하는 아이템을 선택할 수 있도록 해주는 레이아웃입니다.
먼저 xml 파일에 Spinner 레이아웃을 만듭니다.
<TextView
android:id="@+id/categoryTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="카테고리"
android:textColor="@color/black"
android:textStyle="bold"
android:textSize="16sp"
android:layout_marginLeft="16dp"
app:layout_constraintEnd_toStartOf="@id/categorySpinner"
app:layout_constraintStart_toStartOf="parent"/>
<Spinner
android:id="@+id/categorySpinner"
android:layout_width="160dp"
android:layout_marginLeft="10dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toEndOf="@+id/categoryTextView" />
TextView 는 Spinner 의 아이템들이 어떤 집합에 속하는지 나타내기 위해 만들었습니다.Spinner 안에 들어갈 아이템들을 저장하기 위해 values/string.xml 파일에 string array를 만듭니다.<resources>
<string-array name="category_array">
<item>음식점</item>
<item>관광지</item>
<item>카페</item>
<item>호텔</item>
</string-array>
</resources>
Activity 혹은 Fragment 에서 ArrayAdapter 를 생성하여 Spinner 에 적용해줍니다.
private fun initSpinner() {
ArrayAdapter.createFromResource(
requireContext(),
R.array.category_array,
android.R.layout.simple_spinner_item
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
binding.categorySpinner.adapter = adapter
}
binding.categorySpinner.onItemSelectedListener =
object: AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
if (p0 != null) {
Toast.makeText(requireContext(),p0.getItemAtPosition(p2).toString(),Toast.LENGTH_SHORT).show()
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {
return
}
}
}
데이터바인딩을 사용중이므로 binding.categorSpinner.adapter = adapter 로 Spinner 에 Adapter 를 적용했습니다.
// 데이터 바인딩을 사용하지 않을때
val categorySpinner: Spinner = findViewById(R.id.categorySpinner)
category.adapter = adapter
데이터 바인딩을 사용하지 않으면 위처럼 어댑터를 적용합니다.
AdapterView.OnItemSelectedListener 를 구현하여, 아이템이 선택되었을때 실행할 내용을 구현할 수 있습니다.
위에서는 간단하게 선택된 아이템을 Toast로 띄워줬습니다.
