[英]Android - Call backspace without firing onTextChanged
因此,我目前正在开发一个应用程序,该应用程序接受用户输入,触发退格键以删除输入,然后添加一些其他文本。 (所以是的,我基本上是使用TextWatcher覆盖他们的输入的)
没问题:当我调用text.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
,它将一次又一次触发onTextChanged。 现在有什么方法可以删除用户输入,而无需再次触发onTextChanged?
谢谢!
不要从onTextChanged回调内部调度键事件。 您可以保留带有文本的内部缓冲区,并在每个有趣的键事件上将整个TextView设置为该缓冲区。
我通过调用edittext.removeTextChangedListener(this);
修复它edittext.removeTextChangedListener(this);
,然后分派密钥,然后调用edittext.addTextChangedListener(this);
再次。 这也是一种干净的方法吗? 很高兴听到您的意见。
可能您正在尝试使用TextWatcher
进一步更改用户刚刚更改的文本。 为此,最好的选择是使用afterTextChanged
方法:
public abstract void afterTextChanged (Editable s)
调用此方法以通知您s内某处的文本已更改。 从此回调中进一步对s进行更改是合理的,但请注意不要陷入无限循环,因为您进行的任何更改都将导致递归再次调用此方法。
为避免递归,您可以设置一个标志来表明您正在更改文本,并在下一个调用中清除该标志。 您还可以使用其他回调( beforeTextChanged
和onTextChanged
)来收集有关更改的更多信息。
参考: http : //developer.android.com/reference/android/text/TextWatcher.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.