Bu yazıda Spinner ‘a nasıl veri eklendiğini ve seçilen öğenin kontrolünü göstereceğim. Öncelikle bunun için ArrayAdapter ve ArrayView kütüphanelerini import etmemiz gerekir. 

import android.widget.AdapterView
import android.widget.ArrayAdapter


Ardından layout’u aşağıdaki gibi oluşturalım.

 

Spinner

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <Spinner
        android:id="@+id/spn"
        android:layout_width="260dp"
        android:layout_height="46dp"
        android:layout_marginTop="264dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.496"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="144dp"
        android:text="Ekle"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent" />

    <EditText
        android:id="@+id/addText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:hint="Buraya yaz.."
        app:layout_constraintBottom_toTopOf="@+id/btnAdd"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/spn"
        app:layout_constraintVertical_bias="0.494" />
</androidx.constraintlayout.widget.ConstraintLayout>


Şimdi, MainActivity classımıza dönerek butonumuzun click olayı ile ilgili text’i spinner içerisine ekleyelim. Öncelikle, bu işlemlerden önce bir tane ArrayList bir tane de ArrayAdapter tanımlayarak işlemi gerçekleştirelim.

var listSpinner = ArrayList<String>()
        binding.btnAdd.setOnClickListener()
        {
            val arrayAdapter : ArrayAdapter<String> = ArrayAdapter(this, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item,listSpinner)

            if(binding.addText.text.isNotEmpty())
            {
                listSpinner.add(binding.addText.text.toString())
                binding.spn.adapter = arrayAdapter
                binding.spn.setSelection(listSpinner.size-1)
            }
        }


Yukarıdaki şekilde, spinner’a istenen veri eklenebilir. Spinner için son eklenen kod “setSelection” metodu ise son eklenen elemanın seçili kalması içindir.

Şimdi ise seçili elemanı Toast ile ekrana yazdıralım. Burada yaptığımız işlemin daha iyi anlaşılabilmesi için Anonymous Inner Classların iyi bilinmesi gerekir. Buraya tıklayarak ilgili yazıya erişebilirsiniz. Burada yapacağımız olay AdapterView’ın arayüzünü spinner’a bağlamak olacak. Yani AdapterView’ın interface’ini miras almamız gerekir. Bilindiği üzere interfaceden miras alamıyorduk. Bunu ananymous inner class kullanarak yapacağız.

binding.spn.onItemSelectedListener = object : AdapterView.OnItemClickListener,
            AdapterView.OnItemSelectedListener {
            override fun onItemClick(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
            }

            override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
                Toast.makeText(applicationContext,binding.spn.selectedItem.toString(),Toast.LENGTH_LONG).show()
            }

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


Burada, spinner’ın selected item listener’ını AdapterView’den miras alarak yönetiyoruz. Bunu yaparken ananymous inner class yapısını kullandık. AdapterView.OnItemClickListener interfaceinden miras alarak bu işlemi gerçekleştirdik. İyi çalışmalar.