android - 列表只有 1 个元素时的微调器 OnItemSelectedListener [Android]
问题描述
我正在尝试在我的 Android 项目中创建一个“下拉菜单”,它是从 Spinner 稍微定制的。
如果列表中有很多项目,一切正常。但是,当只有 1 个项目时,我无法在“OnItemSelectedListener”处捕获事件。还是会在我调用“performClick”函数时自动调用(即使我还没有点击微调器中的项目)
根据逻辑它是如何工作的:
- 尚未选择任何项目
- 调用 performClick
- 微调器展开
- 选择 1 项
- OnItemSelectedListener 被调用。
这是我的代码(抱歉我的英语不好)
fun showDropdown(
listItems: List<String?>,
currentPosition: Int?,
callbackItemSelected: (pos: Int) -> Unit = {},
callbackNothingSelected: () -> Unit = {}
) {
check = 0
this.callbackItemSelected = callbackItemSelected
this.callbackNothingSelected = callbackNothingSelected
val safeListItems = mutableListOf<String>()
listItems.forEach {
if (it.isNullOrBlank()) {
safeListItems.add(resources.getString(R.string.error_data))
} else {
safeListItems.add(it)
}
}
if (safeListItems.size == 1) {
safeListItems.add(VIRTUAL_ITEM)
}
mAdapter.setData(safeListItems, currentPosition)
isOpening = true
performClick()
}
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, position: Int, p3: Long) {
callbackItemSelected?.invoke(position)
}
override fun onNothingSelected(p0: AdapterView<*>?) {
callbackNothingSelected?.invoke()
}
解决方案
推荐阅读
- php - PHP邮件表单未从主机发送
- typescript - Contacts.find(fields,options) 仅针对离子中 for 循环内的最后一个元素执行?
- select - Vue 多选
- google-maps-urls - 谷歌地图网址的使用限制
- python - 无法在模板中显示模型中的数据
- robotframework - 是否可以在 RobotFramework 中设置关键字参数的范围而不显式使用内置关键字 - “设置
多变的” - android - 如何将带有预训练嵌入的 Tensorflow RNN (LSTM/GRU) 集成到移动设备 (android/iphone) 中?
- html - 菜单项之间的空白框
- excel - 在 Excel 数据透视表中计算与上一个日期的差异
- asp.net - Telerik 皮肤无法正常工作