我有一个方法 drawItems(),它每次都会创建一个新布局并将其设置为 contentView。而且我还有一个控件 EditText,它应该在内容更改时删除其他元素。
edit.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
currentText = s.toString();
drawItems();
}
public void beforeTextChanged(CharSequence s,
int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
});
我想做的是保存它的当前文本,删除所有元素,只留下这个 EditText 和 saved string。当我尝试运行此应用程序时,引发的错误是 StackOverflow,因为它无限次地呈现 drawItems 方法。为什么即使我不更改其内容,它也会在 afterTextChanged 中呈现 drawItems?它甚至在整个页面加载之前就已呈现。
最佳答案
这个小 fragment 可能会有所帮助:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
idAnswerEditText.removeTextChangedListener(this);
String someString = StringUtil.doSomething(s.toString());
idAnswerEditText.getText().clear();
idAnswerEditText.getText().append(someString);
idAnswerEditText.setSelection(someString.length());
idAnswerEditText.addTextChangedListener(this);
}
});
当您在用户键入时编辑字符串时,移除监听器并对文本执行任何您需要执行的操作,然后将监听器重新附加到 EditText。
关于android - TextWatcher afterTextChanged 导致 android 中的 stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8628437/