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
相关产品推荐
相关产品推荐

