Android Fragments 微调按钮保留最后选定的项目

e4eetjau  于 2022-11-24  发布在  Android
关注(0)|答案(1)|浏览(150)

我有一个带有数组适配器的微调器。微调器被填充在一个片段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<*>?) {
    }
}

每当我回到片段并创建微调控件时,当自动调用onItemSelected()并忽略spinner.setSelection(0)调用时,最后选择的项被选中。我已经放置了许多日志来查看发生了什么,但我不明白为什么最近选择的项是默认选择的项,而不是位置0的项。

polhcujo

polhcujo1#

我通过在下拉视图上设置一个点击侦听器来解决这个问题,基本上做了我在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
}

一个重要的东西。你需要这样做,在一个项目被选中后关闭下拉视图:

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()
    }
}

相关问题