首页 > 解决方案 > 列表只有 1 个元素时的微调器 OnItemSelectedListener [Android]

问题描述

我正在尝试在我的 Android 项目中创建一个“下拉菜单”,它是从 Spinner 稍微定制的。

如果列表中有很多项目,一切正常。但是,当只有 1 个项目时,我无法在“OnItemSelectedListener”处捕获事件。还是会在我调用“performClick”函数时自动调用(即使我还没有点击微调器中的项目)

根据逻辑它是如何工作的:

  1. 尚未选择任何项目
  2. 调用 performClick
  3. 微调器展开
  4. 选择 1 项
  5. 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()
}

标签: androidkotlinspinner

解决方案


推荐阅读