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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:24:02