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

Android动态生成EditText异常:输入房间数量后未生成对应控件

问题排查:输入房间数量无法生成EditText控件

以下是导致功能失效的核心问题及修复方案:

1. 输入监听的语法错误与变量未定义

原监听代码存在两处致命问题:

  • Lambda表达式语法错误:doOnTextChanged的参数结尾写成了after -,正确应为after ->,语法错误直接导致监听逻辑不执行。
  • 使用了未定义的bed变量,无法获取输入框的实际内容。

修复后的监听代码:

// secondary Bedroom QTY
binding.inputBrQty.doOnTextChanged { text, start, count, after ->
    text?.toString()?.let { input ->
        if (input.isNotEmpty()) {
            val qty = input.toInt()
            if (qty > 0) {
                CreateLayout(qty, binding.secBr, "Secondary Bedroom ", roomList)
            }
        }
    }
}

2. 循环条件错误导致生成数量不足

CreateLayout中的循环条件while (tmp < qty)会导致生成的EditText数量比输入值少1。例如输入3时,tmp从1开始,只会执行2次循环,生成2个控件。

修改循环条件为tmp <= qty,确保输入数量与生成控件数一致:

fun CreateLayout(
    qty: Int,
    parent: LinearLayout,
    textDisplay: String,
    storage: MutableList<String>
) {
    // 清空旧控件与存储列表,避免重复叠加
    parent.removeAllViews()
    storage.clear()
    
    var tmp = 1
    while (tmp <= qty) {
        val editText = EditText(this)
        editText.layoutParams = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
        editText.setText(textDisplay + tmp)
        editText.isVisible = true
        editText.id = View.generateViewId()

        parent.addView(editText)
        storage.add(editText.id.toString())
        tmp++
    }
}

3. 附加优化:避免重复生成控件

每次输入数量变化时,之前生成的EditText不会自动移除,会导致控件叠加。因此在CreateLayout开头添加parent.removeAllViews()和storage.clear(),确保每次生成都是全新的控件列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:57:08