Home > database >  Spinner keeps last selected item
Spinner keeps last selected item

Time:11-21

I have a spinner with an array adapter. The spinner is populated inside a fragment onCreateView().

spinner.setSelection(0)
spinner.onItemSelectedListener =
object : AdapterView.OnItemSelectedListener {
    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
    }

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

Whenever I get back to the fragment and the spinner is created, the last selected item is selected when onItemSelected() is called automatically and ignoring the spinner.setSelection(0) call. I have put many logs to see what is going, but I cannot understand why the lately selected item is the one being selected by default and not the one at position 0.

CodePudding user response:

I solved the issue by setting a click listener on the drop down view and basically do the same stuff I was doing with the OnItemSelectedListener.

override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
    val binding = SpinnerItemChartDropdownBinding.inflate(
        LayoutInflater.from(parent.context),
        parent,
        false
    )
    val item = getItem(position)
    val root = binding.root
    bindDropdown(root, item)

    binding.setClickListener {
        listener.onChartRangeSelected(item)
    }
    return root
}

One important stuff. You need to do something like this, to dismiss the drop down view after an item has been selected:

 fun hideSpinnerDropDown(spinner: Spinner) {
    try {
        val method: Method = Spinner::class.java.getDeclaredMethod("onDetachedFromWindow")
        method.isAccessible = true
        method.invoke(spinner)
    } catch (e: java.lang.Exception) {
        e.printStackTrace()
    }
}
  • Related