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

Kotlin点击按钮动态创建EditText时分配ID出现类型异常问题

问题根因

你遇到的类型异常由("R.id"+count).toInt()这行错误代码触发,原因如下:

  • Android的R.id下的数值是编译阶段自动生成的静态整数,运行期拼接的"R.id+数字"字符串无法对应到合法的预生成资源ID
  • 包含字母的字符串直接调用toInt()方法会抛出数字格式异常,就是你遇到的错误的直接诱因
修复方案

方案1:使用系统动态ID生成接口(推荐)

Android API 17及以上提供了View.generateViewId()方法,可直接生成全局唯一、和现有资源ID无冲突的合法ID,不需要自行维护count生成ID:

var count = 0
fun addrow() {
    val defect: FloatingActionButton = findViewById(id)
    val gridLayout: GridLayout = findViewById(gl)
    gridLayout.visibility = View.VISIBLE
    val eqp = EditText(this)
    eqp.hint = "Eqp"
    eqp.textSize = 14F
    eqp.width = 200
    // 替换原错误行,使用系统方法生成ID
    eqp.id = View.generateViewId()
    // 保留count计数做其他业务逻辑的话单独递增即可
    count++
}

方案2:通过count关联控件的最优实现

如果你需要通过count数值快速检索对应生成的EditText,不需要修改控件ID,直接将count存入控件的tag属性即可:

// 存储计数标记
eqp.tag = count

后续检索对应控件的代码:

val targetEqp = gridLayout.findViewWithTag<EditText>(你要找的count数值)

方案3:需自定义固定ID的特殊场景

如果确实需要使用预定义的固定ID,先在res/values/ids.xml中提前声明对应ID:

<resources>
    <item name="eqp_1" type="id" />
    <item name="eqp_2" type="id" />
    <!-- 按需声明足够数量的ID -->
</resources>

代码中通过资源名获取对应ID:

eqp.id = resources.getIdentifier("eqp_$count", "id", packageName)

内容的提问来源于stack exchange,提问作者joy david

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:18:00