반응형
Spinner
- 평소에는 접혀져 있다가 사용자가 클릭시 항목이 나타나 선택할 수 있게 하는 AdapterView
- 작은 스마트폰 화면을 효율적으로 사용 가능
//어댑터 생성 -> 접혔을 때의 모습을 구성할 레이아웃 설정
val adapter1 = ArrayAdapter(this, android.R.layout.simple_spinner_item, data1)
//펼쳤을 때의 모습을 구성할 레이이아웃을 설정
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
binding.spinner.adapter = adapter1 //스피터에 어댑터 붙이기
Spinner 주요 속성
- spinnerMode : 나타나는 메뉴 항목의 타입을 설정 (dropdown(기본), dialog(항목 선택창 따로 나옴))
Spinner 주요 프로퍼티
- selectedItemPosition : 현재 선택된 항목의 인덱스를 반환/관리 (0부터)
- adapter : 뷰의 어댑터 설정 및 관리
- onItemSelectedListener : 항목 선택시 사용할 리스너 설정 ex) 기본적으론 선택한 항목이 접힌 상태에서 보이는 텍스트로 설정
Spinner 주요 이벤트
- ItemSelected : 사용자가 항목을 선택했을 경우 동작을 구현 -> 프로퍼티인 onItemSelectedListener로 설정
binding.spinner.onItemSelectedListener = listener1 // 프로퍼티로 리스너 달기
} //OnCreate() 종료
val listener1 = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
when (p0?.id) {
R.id.spinner -> {
binding.textView.text = "${data1[p2]} 번째 항목이 선택되었습니다."
}
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {
}
}
💡 파라미터로 리스너 달기 vs 프로퍼티로 리스너 달기
보통 view에 리스너를 달때, set...메소드를 통해 리스너 객체를 파라미터로 하여 설정하여 아래 코드와 같은 방식으로 작성할 수 있다.
mainBinding.listview1.setOnitemClickListener(listener1)
// or
mainBinding.listview1.setOnitemClickListener(object : AdapterView.OnitemClickListener{...})
하지만 프로퍼티로 리스너를 다는 경우에는 리스너 객체를 파라미터로 주는 것이 아니라 = 이후에 리스터 객체를 작성해야 한다. 따라서 아래 코드와 같은 방식으로 작성할 수 있다.
//방법1)외부에서 리스너 객체 생성해 달기
binding.spinner.onItemSelectedListener = listener1
val listener1 = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
when (p0?.id) {
R.id.spinner -> {
binding.textView.text = "${data1[p2]} 번째 항목이 선택되었습니다."
}
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {...}
}
//방법2)프로퍼티로 달기와 동시에 리스너 객체 생성
binding.spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
when (p0?.id) {
R.id.spinner -> {binding.textView.text = "${data1[p2]} 번째 항목이 선택되었습니다."}
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {...}
}
반응형
'Android' 카테고리의 다른 글
[안드로이드/AdapterView] AutoCompleteTextView (0) | 2023.02.27 |
---|---|
[안드로이드/AdapterView] ViewPager (0) | 2023.02.25 |
[안드로이드/AdapterView] Custom Adapter (0) | 2023.02.23 |
[안드로이드/Widget] 다양한 view/widget & 사용법 (0) | 2023.02.20 |
[안드로이드/Style] 색상 지정 (0) | 2022.09.15 |