在TextChangedListener中更新EditText值会导致崩溃

时间:2018-01-07 03:23:42

标签: java android android-edittext

我试图将编辑文本值限制为小于或等于130.在onCreate方法中,我执行了以下操作:

final EditText expectedYears = (EditText)findViewById(R.id.lifespan);
expectedYears.addTextChangedListener(new TextWatcher() {
      public void afterTextChanged(Editable s) {}
      public void beforeTextChanged(CharSequence s, int start,
                                          int count, int after) {
      }
      public void onTextChanged(CharSequence s, int start,
                                      int before, int count){
          if(Integer.parseInt(s.toString())>130){
                expectedYears.setText(String.valueOf(130));
          }

      }
});

我不确定为什么应用程序在此之后崩溃了。通过测试,我发现expectedYears.setText行造成了这种情况。我觉得一旦我设置了文本,就会再次调用onTextChanged函数。我怎样才能解决这个问题?

堆栈跟踪

 at android.widget.EditText.setText(EditText.java:113)
 at android.widget.TextView.setText(TextView.java:5209
 at net.msolonko.motivation_app.MainActivity$1.onTextChanged(MainActivity.java:49) 
 at android.widget.TextView.sendOnTextChanged(TextView.java:9364)
 at android.widget.TextView.setText(TextView.java:5397)
 at android.widget.TextView.setText(TextView.java:5250)

2 个答案:

答案 0 :(得分:1)

根据this question,您不应更改onTextChanged()中正在观看的EditText的文本。我的猜测是它会导致无限递归循环。

相反,请尝试将文字设置为afterTextChanged()

中的文字

答案 1 :(得分:0)

setText()方法需要字符串类型参数,请确保您传递的是字符串类型参数,可以使用类型转换