Kotlin

[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'

}

 

Leave a Reply

error: Content is protected !!