【发布时间】:2014-03-25 07:07:37
【问题描述】:
我需要一种方法来检测 EditText 是否已因用户键入内容或应用程序以编程方式更改文本而发生更改。有什么标准的方法吗?我想我总是可以做一些骇人听闻的事情,比如在 setText() 之前取消设置 TextWatcher 并在之后再次设置它,但是必须有更好的方法来做到这一点......对吗?
我尝试检查 EditText 是否聚焦在 TextWatcher 中,但这并没有什么帮助,因为 EditText 在滚动时无论如何都会“半随机”聚焦...
背景
我在每个列表项中都有一个带有 EditTexts 的 ListView。我已经解决了存储 EditTexts 的值以便在用户滚动时重用的基本问题。
我还有一个 TextWatcher,它汇总所有 EditText 中的值,并在用户编辑任何 EditText 的内容时显示总和。
问题是,当我滚动列表并且我的自定义适配器在 bindView() 上重新输入 EditTexts 中的存储值时,这也会触发 TextWatchers afterTextChanged() 方法,导致滚动滞后,因为求和- up-function 被触发。
【问题讨论】:
-
您可以覆盖 OnKeyDown() 并在其中触发一个布尔值,以便您知道用户正在输入文本并在您的 textwatcher 中使用它
-
@JRowan 是的,我想过放弃 TextWatcher 并改用 onKeyDown(),但根据文档 “软件键盘中的按键通常不会触发此侦听器,尽管有些人可能会选择在某些情况下这样做。不要依赖它来捕捉软件按键。" developer.android.com/reference/android/widget/…, android.view.KeyEvent)
-
@BadCash 你有多少 TextWatcher?
-
在代码中调整类变量标志时如何设置它,在文本观察器中检查该标志,然后重置它?
-
@pskink 列表视图中的每个项目一个,它们在 newItem() 方法中被实例化。
标签: android listview android-edittext textwatcher