EditText使用addTextChangedListener监听数字输入清空内容报错如何解决
解决方案
崩溃的根因是空字符串无法直接转换为Int类型,你可以通过空值安全校验+安全类型转换的方式处理,同时不影响用户后续重新输入,修改方案如下:
核心代码修改(TextWatcher部分)
val textChange : EditText = findViewById(R.id.bombCount) textChange.addTextChangedListener(object : TextWatcher{ var a : Int = 0 // 可保留你之前的默认初始雷数 override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { } override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {} override fun afterTextChanged(p0: Editable?) { // 安全类型转换,转换失败直接返回null,不会抛出异常 val inputNum = p0?.toString()?.toIntOrNull() // 仅输入有效正整数时才执行游戏重置逻辑 if (inputNum != null && inputNum > 0) { a = inputNum GameControl.reset(a,arrCell,marked) arr = GameControl.startGame(a) } // 输入为空/无效时不执行逻辑,等待用户继续输入即可 } })
可选优化(输入合法性限制)
你可以在EditText布局中增加输入边界限制,避免用户输入0或超出游戏承载上限的不合理数值:
<EditText android:id="@+id/bombCount" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:hint="Bomb Count" android:inputType="number" <!-- 可根据你的游戏格子数调整最大值,此处示例最大支持99颗雷 --> android:max="99" android:min="1" />
逻辑说明
- Kotlin提供的
toIntOrNull()是安全转换方法,当字符串无法转换为Int时(包括空字符串、非数字内容)会直接返回null,不会抛出类型转换异常 - 输入为空的情况下不会触发游戏逻辑,用户清空原有内容后可以直接输入新的数字,输入有效后自动触发游戏重置,完全符合需求
- 如果需要在用户输入无效内容时给出提示,在
inputNum为null的分支里增加Toast提示即可。
内容的提问来源于stack exchange,提问作者francisRH
相关产品推荐
相关产品推荐

