Archives
Recent Posts
«   2025/02   »
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
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[32일차 Android] Spinner 본문

Computer/Android

[32일차 Android] Spinner

Wise-99 2023. 6. 16. 07:20

 

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 Spinner

  • 사용자에게 항목을 주고 산택 하게 할 수 있는 AdapterView
  • 작은 스마트폰 화면을 효율적으로 사용할 수 있다는 장점을 가지고 있다.

주요 속성

속성 설명
spinnerMode 나타나는 메뉴 항목의 타입을 설정

주요 프로퍼티

프로퍼티 설명
selectedItemPosition 현재 선택되어 있는 항목이 인덱스(0 부터 시작)를 관리
adapter View 구성을 위한 Adapter를 관리
onItemSelectedListener 항목을 선택했을 때 사용할 리스너를 설정

주요 이벤트

이벤트 설명
ItemSelected 사용자가 항목을 선택했을 경우 동작, 이 이벤트의 리스너는 프로퍼티로 설정

 

 

 

예제 코드

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="선택한 값 가져오기" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

 

 

 

MainActivity.kt

package com.test.android35_spinner

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
import android.widget.ArrayAdapter
import com.test.android35_spinner.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    lateinit var activityMainBinding: ActivityMainBinding

    val dataList = arrayOf(
        "항목1", "항목2", "항목3", "항목4", "항목5",
        "항목6", "항목7", "항목8", "항목9", "항목10",
        "항목11", "항목12", "항목13", "항목14", "항목15",
        "항목16", "항목17", "항목18", "항목19", "항목20",
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)

        activityMainBinding.run {
            spinner.run {
                // 어뎁터 설정
                val a1 = ArrayAdapter<String>(
                    this@MainActivity,
                    android.R.layout.simple_spinner_item,
                    dataList
                )
                a1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
                adapter = a1

                setSelection(2)

                onItemSelectedListener = object : OnItemSelectedListener{

                    override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
                        textView2.text = "${dataList[position]} 항목을 선택했습니다"
                    }

                    override fun onNothingSelected(parent: AdapterView<*>?) {
                    
                    }
                }
            }

            button.run {
                setOnClickListener {
                    val position = spinner.selectedItemPosition
                    textView.text = "선택한 항목 : ${dataList[position]}"
                }
            }
        }
    }
}

코드 리뷰

  • val a1 = ArrayAdapter<String>( ... ) : 어뎁터를 설정한다. Spinner가 접혀있을 때의 Layout을 설정한다.

 

  • a1.setDropDownViewResource( ... ) : Spinner가 펼쳐져 있을 때의 Layout을 설정한다.

 

  • setSelection(0) : Spinner의 항목을 코드로 선택한다. 0부터 시작하는 순서 값을 넣어준다.

 

  • onItemSelectedListener = object : OnItemSelectedListener{ ... } : 항목을 선택하면 동작하는 리스너
    • override fun onItemSelected( ... ) : 항목을 선택했을 때 호출되는 메서드