Android Kotlin onItemSelectedListener for spinner not working

Viewed 62789

I have a spinner with some items (strings). I want to add the selected items to a list. I read online that I should use the onItemSelectedListenerrather than the onItemClickListener.

I implemented this but I don't know how to complete the step of adding it to the list.

class NewKitListActivity : AppCompatActivity() {

var spinnerArray = arrayOf("Dumbell", "Punching Bag", "Yoga Ball", "Skipping Rope")
//var spinnerArray = arrayOf(DataService.kitList)



override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_new_kit_list)



    val spinner = newKitItemSpinner
    val spinnerArrayAdapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, spinnerArray)
    //selected item will look like a spinner set from XML
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    spinner.adapter = spinnerArrayAdapter

    spinner.onItemSelectedListener = object : OnItemSelectedListener {
        override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
            val selectedItem = parent.getItemAtPosition(position).toString()
            if (selectedItem == "Add new category") {
                // do your stuff
            }
        } // to close the onItemSelected

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

        }
    }}}

Thanks

7 Answers

Thanks this is helpful for me, Its working fine !

daysSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onNothingSelected(parent: AdapterView<*>?) {

            }

            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {

            }

        }

Add extension function

fun Spinner.selected(action: (position:Int) -> Unit) {
    this.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
        override fun onNothingSelected(parent: AdapterView<*>?) {}
        override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
            action(position)
        }
    }
}

simple use

spinner.selected {
    println(it) //selected position
}

I implemented like this. 1. Create Empty Mutable List 2. Set onItemSelectedListner on spinner 3. When user select item add that to mutable list

Check my this answer for more info. It will help you: Android Koltin pass spinner values to mutable list

instead of:

var spinnerArray = arrayOf("Dumbell", "Punching Bag", "Yoga Ball", "Skipping Rope")

try

var spinnerArray = mutableListOf<String>("Dumbell", "Punching Bag", "Yoga Ball", "Skipping Rope")

just had the same situation when I was trying to get a sqlite table´s $_ID and populate the spinner with them

// Extends AdapterView.OnItemSelectedListener
class Dialogs : DialogFragment(), AdapterView.OnItemSelectedListener {}

//Somewhre in onCreate (I'm using databinding but you don't have to)
 binding.spinnerDialogEstados.onItemSelectedListener = this

// then implement members...

      override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
    TODO("Not yet implemented")
}

override fun onNothingSelected(parent: AdapterView<*>?) {
    TODO("Not yet implemented")
}
Related