[android : kotlin] 코틀린 Spinner 사용 예제( 콤보박스 )
안드로이드 스피너를 사용해보자. 스피너는 콤보박스로 생각하면 된다. 스피너는 대부분 조회 조건을 생성하거나 입력받아야할 데이터가 있을 때 사용하면 된다. 즉 한정된 공간을 활용하여 여러 문자열을 보여줄 수 있음으로 다양한 용도로 사용된다. 스피너는 하나의 어레이어댑터가 필요하다. 어레이 어댑터(ArrayAdapter)를 하나 선언한 후 그것을 스피너의 setAdapter메소드를 사용하여 적용해주어야 하는 구조로 이루어져있다. OnItemSelectedListener()를 사용하여 스피너에서 항목을 선택했을 때 이벤트를 처리할 수 있다. 주요 프로퍼티로 현재 선택되어 있는 항목의 인덱스 값을 가져올 수 잇는 selectedItemPosition이 있다. 그럼 예제를 살펴보자.
[MainActivity.kt]
package edu.kotlin.study
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.*
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var dataArr = arrayOf("사괴", "복숭아", "오렌지", "자두")
var dataArr2 = arrayOf("apple", "peach", "orange", "plum")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var adapter1 = ArrayAdapter(this, android.R.layout.simple_spinner_item, dataArr)
var adapter2 = ArrayAdapter(this, android.R.layout.simple_spinner_item, dataArr2)
//선택 목록이 나타날 때 사용할 레이아웃을 지정
//adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
//adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
//스피너 어댑터 적용
spinner1.adapter = adapter1
spinner2.adapter = adapter2
spinner1.onItemSelectedListener = MySpinerListener()
spinner2.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
textView1.text = dataArr2[position]
}
override fun onNothingSelected(parent: AdapterView<*>?) {
}
}
button1.setOnClickListener {
textView1.text = dataArr[spinner1.selectedItemPosition]
textView1.append(dataArr2[spinner2.selectedItemPosition])
}
}
inner class MySpinerListener : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
textView1.text = dataArr[position]
}
override fun onNothingSelected(parent: AdapterView<*>?) {
TODO("Not yet implemented")
}
}
}
[activity_main.xml]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="선택값"
android:textAppearance="@style/TextAppearance.AppCompat.Display2" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="80dp" />
<Spinner
android:id="@+id/spinner2"
android:layout_width="match_parent"
android:layout_height="80dp" />
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_marginTop="100dp"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
[build.gradle(:app)]
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
defaultConfig {
applicationId "edu.kotlin.study"
minSdkVersion 22
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.1'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}