Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
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
Tags
more
Archives
Today
Total
관리 메뉴

나의 블로그

[안드로이드 스튜디오] Spinner 본문

Study

[안드로이드 스튜디오] Spinner

싱숭셩숭 2025. 1. 4. 22:49

1. XML에서 Spinner 추가하기

레이아웃 파일(XML)에 Spinner를 추가

<!-- activity_main.xml -->

<Spinner
    android:id="@+id/spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="16dp"
/>

2. 드롭다운 데이터 정의하기

드롭다운에 표시할 데이터를 strings.xml 파일에 추가하거나 코드에서 바로 정의

a. strings.xml 파일에서 정의하기

<resources>
    <string-array name="dropdown_items">
        <item>Option 1</item>
        <item>Option 2</item>
        <item>Option 3</item>
    </string-array>
</resources>

b. 코드에서 배열로 정의하기

val items = arrayOf("Option 1", "Option 2", "Option 3")

3. 코드에서 Spinner와 데이터 연결하기

액티비티에서 Spinner와 데이터를 연결

Kotlin 코드

import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Toast
import android.widget.AdapterView
import android.widget.Spinner
import androidx.appcompat.app.AppCompatActivity
import com.example.yourapp.databinding.ActivityMainBinding // 패키지에 맞게 수정!

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding // 뷰바인딩 객체

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // ViewBinding 초기화
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // 1. XML에서 Spinner 찾기
        val spinner: Spinner = findViewById(R.id.spinner)

        // 2. 드롭다운 데이터 가져오기
        val items = resources.getStringArray(R.array.dropdown_items) // strings.xml 사용
        // val items = arrayOf("Option 1", "Option 2", "Option 3") // 코드에서 직접 정의

        // 3. ArrayAdapter 생성
        val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, items)
        
        // 4. Spinner에 Adapter 연결
        binding.spinner.adapter = adapter
        
        // 5. Spinner 이벤트 처리
        binding.spinner.setOnItemSelectedListener { parent, position ->
            val selectedItem = parent.getItemAtPosition(position).toString()
            Toast.makeText(this, "Selected: $selectedItem", Toast.LENGTH_SHORT).show()
        }
    }
    
    // Spinner 확장 함수
    fun Spinner.setOnItemSelectedListener(listener: (parent: AdapterView<*>, position: Int) -> Unit) {
        this.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) {
                listener(parent, position)
            }
            override fun onNothingSelected(parent: AdapterView<*>) {}
        }
    }
}