如何在onItemSelected方法外部获取Spinner选中项的字符串?
解决Spinner选中字符串外部访问的问题
要在onItemSelectedListener外部拿到选中的字符串,核心是把选中值存到一个作用域覆盖外部判断逻辑的变量里,具体修改如下:
- 先声明一个可修改的变量,用来保存选中的内容。如果是在Fragment/Activity中,可以定义为成员变量;如果是在单个函数内,就定义为局部变量(确保能被后续的if判断访问到)。
- 在
onItemSelected回调里更新这个变量的值。 - 后续的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
相关产品推荐
相关产品推荐

