Kotlin中EditText添加TextWatcher报错,求正确实现方法
解决EditText文本监听与跳转逻辑的错误问题
咱们一步一步来修复这些报错,先逐个拆解问题根源:
1. TextWatcher方法参数类型不匹配
你写错了beforeTextChanged和onTextChanged的第一个参数类型!这两个方法的第一个参数要求是CharSequence(输入框的文本内容),而不是Int。编译器提示“未实现抽象方法”,本质就是因为参数签名不匹配,相当于你没有正确重写父类的方法。
2. 逻辑判断的语法与类型错误
- Kotlin里逻辑与的正确写法是
&&,and是位运算符号,不能用来做条件判断; - 输入框的文本是
CharSequence类型,不能直接和整数比较,得先转成Int,还要处理空值、非数字的情况,避免程序崩溃; - 你的目标范围是1900-2200,条件应该写成
rok >=1900 && rok <=2200或者更简洁的rok in 1900..2200。
3. Toast的Context对象错误
在匿名的TextWatcher内部,this指向的是监听器本身,不是Activity的Context,所以要换成外部的上下文对象,比如this@你的Activity类名(把“你的Activity类名”替换成你当前Activity的真实类名)或者applicationContext。
修正后的完整代码
idData.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) {} override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { // 先处理空文本、空白文本的情况 val inputText = s?.toString()?.trim() ?: return val rok = try { inputText.toInt() } catch (e: NumberFormatException) { // 输入不是有效数字,弹出提示后返回 Toast.makeText(this@YourActivityName, R.string.warning, Toast.LENGTH_LONG).show() return } // 判断年份是否在合法范围内 if (rok in 1900..2200) { val pelnie = Intent(applicationContext, PelniewRoku::class.java) pelnie.putExtra("algorytm", rodzaj) pelnie.putExtra("rok", rok) startActivity(pelnie) } else { Toast.makeText(this@YourActivityName, R.string.warning, Toast.LENGTH_LONG).show() } } })
额外小建议:你设置的inputType包含了带符号的数字,但年份不需要负数,所以可以改成InputType.TYPE_CLASS_NUMBER,去掉TYPE_NUMBER_FLAG_SIGNED,避免用户输入负号干扰判断。
内容的提问来源于stack exchange,提问作者Lyokoheros
相关产品推荐
相关产品推荐

