Java Android-在不触发onTextChanged的情况下调用backspace
因此,我目前正在开发一个应用程序,它接受用户输入,启动一个退格来删除输入,然后添加一些其他文本。(因此,是的,我基本上是使用TextWatcher覆盖他们的输入) 没有问题:当我调用Java Android-在不触发onTextChanged的情况下调用backspace,java,android,textwatcher,Java,Android,Textwatcher,因此,我目前正在开发一个应用程序,它接受用户输入,启动一个退格来删除输入,然后添加一些其他文本。(因此,是的,我基本上是使用TextWatcher覆盖他们的输入) 没有问题:当我调用text.dispatchKeyEvent(newkeyevent(KeyEvent.ACTION\u DOWN,KeyEvent.KEYCODE\u DEL))时,它将触发一次又一次的ContextChanged。现在有没有办法删除用户输入而不再次触发ContextChanged 谢谢 不要从ContextChan
text.dispatchKeyEvent(newkeyevent(KeyEvent.ACTION\u DOWN,KeyEvent.KEYCODE\u DEL))时代码>,它将触发一次又一次的ContextChanged。现在有没有办法删除用户输入而不再次触发ContextChanged
谢谢 不要从ContextChanged回调内部分派键事件。您可以为文本保留一个内部缓冲区,并在每个感兴趣的按键事件上将整个TextView设置为该缓冲区。可能您正在尝试使用TextWatcher进一步更改用户刚刚更改的文本。要做到这一点,最好的选择是使用posterextchanged
方法:
public abstract void afterTextChanged (Editable s)
调用此方法是为了通知您,在s中的某个位置,文本已更改。从这个回调对s进行进一步的更改是合法的,但是要小心不要让自己陷入无限循环,因为您所做的任何更改都会导致再次递归调用这个方法
为了避免递归,您可以设置一个标志,指示您是更改文本的人,并在下一次调用中清除该标志。您还可以使用其他回调(beforeTextChanged
和onTextChanged
)来收集有关更改的更多信息
参考:我通过调用edittext.removeTextChangedListener(这个)修复了它
,然后分派密钥,然后调用edittext.addTextChangedListener(此)代码>再次。这也是一种干净的方式吗?很高兴听到您的意见。您是否尝试过直接设置文本?类似于textView.setText(text.substring(0,长度-1))。