更新 TextChangedListener 中的 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)

根据这个问题,您不应该更改onTextChanged()中正在监视的编辑文本的文本。我的猜测是它会导致无限递归循环。

相反,请尝试将设置文本的逻辑放在 afterTextChanged() 中。

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

最新更新