【发布时间】:2013-07-06 07:17:04
【问题描述】:
TextWatcher 有一个烦人的问题。我一直在网上搜索,但找不到任何东西。如果有人可以帮助我,将不胜感激。
出于某种原因,在一个文本更改时调用 TextWatcher 事件是不稳定的。有时它们会被触发一次(就像他们应该的那样),有时会被触发两次,有时会被触发 3 次。不知道为什么,整个事情非常简单。有时 afterTextChanged() 上的 Editable 参数在 toString() 和 length() 中返回空值。
代码如下:
private TextWatcher mSearchAddressTextChangeListener = 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 searchedAddress) {
System.out.println("called multiple times.");
}
};
在afterTextChanged()(和AsyncTask)内部,我没有对文本或EditText 视图进行任何更改。
我看到Events of TextWatcher are being called twice 中提出的问题,但我触发的事件多于(或少于)两次。
无论如何,感谢任何帮助。
编辑:我删除了 afterTextChanged() 的内容,因为即使没有我的代码也会发生此问题。是什么让我相信这是一个错误。当在常规字符后立即输入“空格”字符(触发事件处理程序两次)或删除常规字符后的“空格”字符(退格键。事件处理程序被触发 3 次)时,会发生该错误。我们将不胜感激。
【问题讨论】:
-
你想用那个适配器做什么?尝试检查
adapter.getCount() > 0,然后清除它。因为如果你得到适配器并清除它,适配器仍然不会为空。 -
@deadfish 适配器并不是真正的问题。它只是一个基于在 TextWatcher 中输入的文本的列表。正如我所说,问题在于调用 TextWatcher 侦听器上的事件的次数。这对我来说完全是随机的。
-
是的,但是每次您更改与 textwatcher 连接的视图时都会调用 textwatcher(更改文本状态),您关注我吗?
-
不,抱歉。适配器未连接到 TextWatcher。它连接到另一个 ListView。更改/清除它应该对此 TextWatcher 没有影响。
-
您注册了多少次同一个观察者?因为当您执行 addTextChangedListener() 时,它会将观察者的每个实例保存在列表中,并且当需要通知文本观察者时,它会遍历观察者列表。
标签: android android-layout textwatcher