我在我的应用程序中实现了一个ExposedDropdownMenu,虽然有点强制,但它能够完成工作,我可以将其样式设置为我想要的样子。在我的国家“spinner”上,如果选择了加拿大,我想让州的列表更改为省份,然后填充加拿大省份的列表。当我的“spinner”实际上是一个
以下是我的代码:
Spinner
时,OnItemSelectedListener
运行得很好,但现在我已经将“spinner”实现为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
的一个子类,当我不想过滤时防止过滤,但我应该能够可靠地使用位置来确定要显示什么。