Android Studio Kotlin 同一Activity中两个下拉框联动获取业主姓名实现问题
Kotlin Android 双下拉框联动选择解决方案
核心逻辑说明
通过控件ID区分同一监听器的触发来源,同时联动更新下级选项,最后匹配业主信息。
1. 事件区分与基础变量定义
首先定义全局变量存储选中状态,在点击回调中通过parent.id区分触发事件的控件:
// 存储选中的楼栋、房号 private var selectedBuilding: String? = null private var selectedRoom: String? = null // 统一的条目点击监听器 private val dropDownItemClickListener = AdapterView.OnItemClickListener { parent, _, position, _ -> when (parent.id) { // 楼栋选择框触发事件 R.id.actv_building -> { selectedBuilding = parent.getItemAtPosition(position) as String // 联动刷新房号列表 refreshRoomList(selectedBuilding) // 清空已选中的房号,避免逻辑冲突 selectedRoom = null binding.actvRoom.text.clear() } // 房号选择框触发事件 R.id.actv_room -> { selectedRoom = parent.getItemAtPosition(position) as String // 两个选项都已选中时查询业主信息 if (selectedBuilding != null && selectedRoom != null) { val ownerName = queryOwnerInfo(selectedBuilding!!, selectedRoom!!) // 展示业主信息,示例为赋值给TextView binding.tvOwnerResult.text = "业主姓名:$ownerName" } } } }
2. 房号列表联动刷新实现
根据选中的楼栋过滤房号列表,适配你已在strings.xml中定义的资源:
private fun refreshRoomList(building: String?) { building ?: return // 读取全量房号资源 val allRoomList = resources.getStringArray(R.array.room_list) // 过滤出当前楼栋下的房号,房号命名建议前缀和楼栋名称保持一致即可 val filteredRoomList = allRoomList.filter { it.startsWith(building) } // 重新给房号下拉框设置适配器 val roomAdapter = ArrayAdapter(this, R.layout.item_dropdown, filteredRoomList) binding.actvRoom.setAdapter(roomAdapter) }
3. 业主信息匹配逻辑实现
可根据业务需求选择本地映射、数据库查询、接口请求等方式实现,本地映射示例如下:
// 本地业主映射表,可根据实际业务替换 private val ownerInfoMap = mapOf( "1栋101" to "张三", "1栋102" to "李四", "2栋201" to "王五" ) private fun queryOwnerInfo(building: String, room: String): String { val uniqueKey = buildString { append(building).append(room) } return ownerInfoMap[uniqueKey] ?: "未查询到对应业主信息" }
注意事项
- 两个
AutoCompleteTextView绑定监听器时均绑定上述dropDownItemClickListener实例即可 - 如果房号资源按楼栋拆分定义在
strings.xml,可通过资源ID动态匹配对应楼栋的房号列表,无需字符串过滤 - 页面配置变更(如横竖屏切换)时注意对
selectedBuilding、selectedRoom做状态保存,避免数据丢失
内容的提问来源于stack exchange,提问作者Reichlich
相关产品推荐
相关产品推荐

