Android Kotlin onItemSelectedListener for spinner not working

AndroidKotlinSpinner

Android Problem Overview


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 onItemSelectedListener rather 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

Android Solutions


Solution 1 - Android

(in Kotlin)Use this code:

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

        }

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

        }

    }

Solution 2 - Android

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) {

            }

        }

Solution 3 - Android

string will not be able to check using '==' instead you need to use equals("string")

if (selectedItem.equals("Add new category")) {
            // do your stuff
        }

Solution 4 - Android

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
}

Solution 5 - Android

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: https://stackoverflow.com/questions/46450622/android-koltin-pass-spinner-values-to-mutable-list

Solution 6 - Android

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

Solution 7 - Android

// 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")
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDukeAmber27View Question on Stackoverflow
Solution 1 - AndroidMadiView Answer on Stackoverflow
Solution 2 - AndroidRajneesh TyagiView Answer on Stackoverflow
Solution 3 - Androidarjun shresthaView Answer on Stackoverflow
Solution 4 - AndroidFortranView Answer on Stackoverflow
Solution 5 - AndroidRajesh DalsaniyaView Answer on Stackoverflow
Solution 6 - AndroidMarkTView Answer on Stackoverflow
Solution 7 - AndroidDav LView Answer on Stackoverflow