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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:54:02