未调用材质暴露下拉菜单 OnItemSelectedListener
Posted
技术标签:
【中文标题】未调用材质暴露下拉菜单 OnItemSelectedListener【英文标题】:Material Exposed Dropdown Menu OnItemSelectedListener not being called 【发布时间】:2020-02-22 09:15:16 【问题描述】:我在我的应用程序中实现了一个 ExposedDropdownMenu,虽然很笨拙,但它可以完成工作,我可以按照我想要的外观设置它的样式。在我的国家“微调器”上,如果选择加拿大,我希望州列表更改为省份,然后填充加拿大省份列表。当我的“微调器”是实际的 Spinner
时,OnItemSelectedListener
工作得完美无缺,但是,既然我已经将“微调器”实现为 EDM,它就不再来回变化了
这是我的代码:
// get country spinner values and change state/zip options depending on country selected
val countryAdapter = MaterialSpinnerAdapter<String>(it, R.layout.material_spinner_item, it.resources.getStringArray(R.array.country))
country_dropdown.setAdapter(countryAdapter)
country_dropdown.onItemSelectedListener = object : AdapterView.OnItemSelectedListener
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
)
displayStatesForSelectedCountry(position)
override fun onNothingSelected(parent: AdapterView<*>?)
displayDefaultStatesList()
private fun displayStatesForSelectedCountry(position: Int)
context?.let
val canadaAdapter = MaterialSpinnerAdapter<String>(it, R.layout.material_spinner_item, it.resources.getStringArray(R.array.states_of_canada))
when(position)
1 ->
displayDefaultStatesList()
2 ->
state_dropdown.setAdapter(canadaAdapter)
enrollment_zip_code.hint = it.resources.getString(R.string.enrollment_hint_postal_code)
enrollment_zip_code.editText?.inputType = InputType.TYPE_CLASS_TEXT
else -> displayDefaultStatesList()
考虑到行为可能已经改变,我尝试改为实现OnItemClickedListener
:
country_dropdown.setOnItemClickListener parent: AdapterView<*>?,
view: View?,position:
Int,id: Long ->
displayStatesForSelectedCountry(position)
没有骰子。我知道根本没有调用侦听器,因为至少邮政编码提示会更改为邮政编码,但是它不会。我在这里做错了什么?我不应该使用这个职位吗?如果不是,为什么不呢? MaterialSpinnerAdapter
只是 ArrayAdapter
的子类,以防止在我不想过滤时过滤,但我应该能够可靠地使用该位置来确定要显示的内容。
【问题讨论】:
【参考方案1】:我突然想到它是EditText
的一种类型,所以这行得通:
country_dropdown.addTextChangedListener(object: TextWatcher
override fun afterTextChanged(s: Editable?)
override fun beforeTextChanged(
s: CharSequence?,
start: Int,
count: Int,
after: Int
)
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int)
displayStatesForSelectedCountry(s.toString())
viewModel.country.value = s.toString()
)
【讨论】:
以上是关于未调用材质暴露下拉菜单 OnItemSelectedListener的主要内容,如果未能解决你的问题,请参考以下文章
使用 JQuery 的 JavaScript 中的下拉菜单未调用单击事件