今天在开发的时候,给EditText添加一个TextChangedListener,于是写了个实现TextWatcher的方法,
private class MyTextWatcher implements TextWatcher{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(s.length()>0){
s.append("测试");
//mEditText.setText("测试");
}
}
运行程序后StackOverflowError,问题就出在s.append这句,其实在afterTextChanged中调用Editable的append方法,或直接setText()都会导致程序无限迭代。
要解决这个问题,在afterTextChanged方法中加入removeTextChangedListener(watcher),防止循环调用。