繁体   English   中英

Android-调用退格键而不触发onTextChanged

[英]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进行更改是合理的,但请注意不要陷入无限循环,因为您进行的任何更改都将导致递归再次调用此方法。

为避免递归,您可以设置一个标志来表明您正在更改文本,并在下一个调用中清除该标志。 您还可以使用其他回调( beforeTextChangedonTextChanged )来收集有关更改的更多信息。

参考: http : //developer.android.com/reference/android/text/TextWatcher.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM