안드로이드 프로그래밍[Kotiln Code]/안드로이드 초기 강좌

[안드로이드] 스피너2 (콤보박스) with 모델클래스

훈츠 2020. 4. 9. 19:03
반응형

안녕하세요. 훈츠 입니다. 안드로이드 스피너(콤보박스) 에 모델 클래스를 적용하는 방법에 대해 포스팅합니다. 


스피너 (spinner) : SpinnerAdpter = ArrayAdater : AdapterView

스피너 1편에 이어, dataArray 가 아닌 ModelClass 를 적용 하는 방법입니다. ModelClass 만드는 방법과 적용시 유의 사항에 대해 말씀 드리겠습니다. 

 

순 서

  • ModelClass.kt 만들기 
  • Model Class 에 toString 함수를 override 하여 Spinner에서 최초로 선택하고 보여줄 값을 설정 합니다. 
  • dataArray<ModleClass> type 으로 제너릭 선언 후, dataArray 를 arrayAdapter에 할당합니다. 
    • arrayAdapter <ModelClass> 를 제너릭 선언 합니다. 

ModelClass.kt 

1
2
3
4
5
6
7
class ModelClass(val food:Stringval price:Int) {
 
    
    override fun toString(): String {   //스피너의 돌려줄 값을 이야기 하는것임
        return food
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs
 

MainActivity.kt (스피너 어댑터 설정)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class MainActivity : AppCompatActivity() {
    var dataArray = arrayOf(ModelClass("짜장면",7000),ModelClass("짬뽕",8000),ModelClass("볶음밥",8500))
    lateinit var adapter : ArrayAdapter<ModelClass>
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        adapter = ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item,dataArray)
        spinner.adapter = adapter
 
        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
            override fun onNothingSelected(parent: AdapterView<*>?) {
                TODO("Not yet implemented")
            }
 
            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                // it을 사용 합니다.
                dataArray[position].let{
                    textView.setText("${it.food} 은 ${it.price} 원 입니다.")
                }
                /*
                // it을 사용하지 않고 사용
                dataArray[position].run{
                    textView.setText("${food} 은 ${price} 원 입니다.")
                }
                
                // with 를 이용한 방법 기본적으로 run 과 같음
                with(dataArray[position]){
                    textView.setText("${food} 은 ${price} 원 입니다.")
                }
                */
            }
        }
 
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

코드실행 화면

https://youtu.be/kik3rTtQ7Sc

 

반응형