android - 未调用材质暴露下拉菜单 OnItemSelectedListener
问题描述
我在我的应用程序中实现了一个 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
解决方案
我突然想到它是 的一种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()
}
})
推荐阅读
- xampp - XAMPP 控制面板未出现在开始菜单中
- environment-variables - 在 Ubuntu 18.04 中从 .txt 文件设置环境变量
- angular - 限制经过身份验证的用户访问存储桶中的图像
- python - 没有响应的远程结束关闭连接(Python 3-Bugzilla)
- c# - 在页面上获取餐厅的时间列表
- php - 试图从子主题中的父主题覆盖/附加 editor-style.css
- flask - 如何从 url 规则中过滤蓝图 url?
- ios - 如何从 UILabel 文本创建 CGPathRef?
- r - 如何从长字符串中提取字符串
- php - 更改单选按钮颜色并在加载时选择第一个元素