Kotlin中如何捕获下拉菜单选中项被删除的事件
问题描述
我用AutoCompleteTextView做了一个填充年龄选项的下拉菜单,用户选择选项时,对应的年龄会被存入ageSelected变量。但当用户删除选中的年龄、把输入框置空后,下拉菜单回到未选中状态,这个事件我捕获不到,导致ageSelected还留着旧值。我需要捕获这个事件,把ageSelected设为-1表示未选中任何年龄。
相关代码:
val ageArrayAdapter = ArrayAdapter(requireContext(), R.layout.drop_down_item_age, ageValues) ageSpinner = binding.ageAutoCompleteTextView ageSpinner.setAdapter(ageArrayAdapter) ageSpinner.setOnItemClickListener { _, _, position, _ -> // 获取用户点击的选项 ageSelected = ageArrayAdapter.getItem(position)!! }
解决方案
要解决这个问题,你需要给AutoCompleteTextView添加文本变化监听(TextWatcher),监听输入框内容的清空事件,具体实现如下:
- 实现
TextWatcher接口,重写afterTextChanged方法判断输入文本是否为空 - 当文本为空时,将
ageSelected设为-1 - 保留原有的
setOnItemClickListener逻辑,确保选中选项时正常赋值
修改后的完整代码:
val ageArrayAdapter = ArrayAdapter(requireContext(), R.layout.drop_down_item_age, ageValues) ageSpinner = binding.ageAutoCompleteTextView ageSpinner.setAdapter(ageArrayAdapter) // 选中选项时赋值 ageSpinner.setOnItemClickListener { _, _, position, _ -> ageSelected = ageArrayAdapter.getItem(position)!! } // 监听文本变化,处理清空事件 ageSpinner.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} override fun afterTextChanged(s: Editable?) { // 当输入框为空时,设置ageSelected为-1 if (s.isNullOrEmpty()) { ageSelected = -1 } } })
注:原代码中setOnItemClickListener的lambda表达式末尾存在语法错误(-应为->),上述代码已修正该问题。
内容的提问来源于stack exchange,提问作者estherguiuh
相关产品推荐
相关产品推荐

