我有一个方法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
方法无限次。为什么它会渲染drawItemsafterTextChanged
即使我不改变它的内容?它甚至在整个页面加载之前就已呈现。
调用此方法是为了通知您在 s 内的某个位置文本已更改。从此回调中对 s 进行进一步更改是合法的,但要小心不要让自己陷入无限循环,因为您所做的任何更改都会导致再次递归调用此方法。(不会告诉您更改发生在哪里,因为其他 afterTextChanged() 方法可能已经进行了其他更改并使偏移量无效。但是如果您需要知道这里,可以在 onTextChanged 中使用 setSpan(Object, int, int, int) (CharSequence, int, int, int) 标记您的位置,然后从此处查找跨度结束的位置。
put:
public void afterTextChanged(Editable s) {
if (MyEditText.getText().toString().compareTo(s.toString()) != 0)
{
// your code ...
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)