You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在onItemSelected方法外部获取Spinner选中项的字符串?

解决Spinner选中字符串外部访问的问题

要在onItemSelectedListener外部拿到选中的字符串,核心是把选中值存到一个作用域覆盖外部判断逻辑的变量里,具体修改如下:

  1. 先声明一个可修改的变量,用来保存选中的内容。如果是在Fragment/Activity中,可以定义为成员变量;如果是在单个函数内,就定义为局部变量(确保能被后续的if判断访问到)。
  2. 在onItemSelected回调里更新这个变量的值。
  3. 后续的if判断直接使用这个变量即可。

修改后的完整代码:

val spinner = binding.tvAutoComplete
val powtarzanie = resources.getStringArray(R.array.powtarzanie)
// 声明变量,初始值设为下拉菜单的第一个选项(避免空值)
var selectedRepeatText: String = powtarzanie.firstOrNull() ?: ""

val arrayAdapter = ArrayAdapter(requireContext(),
                   R.layout.dropdown_powtarzaj_item,
                   powtarzanie)
spinner.setAdapter(arrayAdapter)
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
    override fun onItemSelected(
        parent: AdapterView<*>?,
        view: View?,
        position: Int,
        id: Long
    ) {
       // 更新外部变量的值
       selectedRepeatText = parent?.getItemAtPosition(position).toString()
    }

    override fun onNothingSelected(parent: AdapterView<*>?) {
        // 可选:如果没有选中项,给变量设一个默认值或空字符串
        selectedRepeatText = ""
    }
}

// 外部的if判断示例
if (selectedRepeatText == "Each week") {
    // 执行对应逻辑
} else if (selectedRepeatText == "Each month") {
    // 执行对应逻辑
}

额外说明:

  • 如果下拉菜单的选项是固定的(比如你提到的"Each week, each month, each year"),也可以直接用数组的下标来判断,比如powtarzanie[0]对应"Each week",这样能避免字符串硬编码的问题。
  • 确保变量的作用域正确:如果是在函数内定义的局部变量,要保证后续的if判断在同一个作用域内;如果是成员变量,要注意生命周期,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Paula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:31:00