How to retrieve the String of a selected item in spinner outside of onItemSelected method?

85 Views Asked by At

I need to retrieve the selected string in a spinner outside of the .onItemSelectedListener. The dropdown menu contains "Each week, each month, each year" strings and I need to retrieve that selected item String in order use them in if conditionals outside of the function.

I've only seen people making Toasts in the onItemSelected function but this doesn't solve my problem.

This is my code:

val spinner = binding.tvAutoComplete
val powtarzanie = resources.getStringArray(R.array.powtarzanie)
val arrayAdapter = ArrayAdapter(requireContext(),
                   R.layout.dropdown_powtarzaj_item,
                   powtarzanie)
spinner.setAdapter(arrayAdapter)
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
    override fun onItemSelected(
        parent: AdapterView<*>?,
        view: View?,
        position: Int,
        id: Long
    ) {
       val itemText: String = parent?.getItemAtPosition(position).toString()

    }

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

There are 1 best solutions below

1
On BEST ANSWER

One way and probably the most simple way to go about this is to define a global variable:

private var spinnerSelection: String? = null

and just change it in your onItemSelected implementation:

spinnerSelection = parent?.getItemAtPosition(pos).toString()

Example code showing the whole flow:

class MainActivity : AppCompatActivity(), AdapterView.OnItemSelectedListener {

    private var spinnerSelection: String? = null

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

        val spinner: Spinner = findViewById(R.id.spinner)
        spinner.onItemSelectedListener = this
        ArrayAdapter.createFromResource(
            this,
            R.array.numbers_array,
            android.R.layout.simple_spinner_item
        ).also { adapter ->
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            spinner.adapter = adapter
        }

        val button: Button = findViewById(R.id.button)

        button.setOnClickListener {
            Log.d("MainActivity", "Currently selected item: $spinnerSelection")
        }
    }

    override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) {
        spinnerSelection = parent?.getItemAtPosition(pos).toString()
    }

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