多次触发 TextWatcher 事件
TextWatcher event is fired multiple times
我遇到了一个奇怪的错误,TextWatcher 在一次文本更改时使用不同的输入多次触发,主要是在输入或删除 spaces 时。
经过一些调查,我在“afterTextChanged”上得到了以下结果:
测试1,在String "Suger" -> "Su gar"中输入space:
- “加”
- " "
- “苏”
- “苏咖喱”
测试2,在String "Su gar" -> "Su ga r"中输入另一个space:
- “苏”
- “苏”
- “苏嘎”
- “苏嘎儿”
我已经找到了一个相关的问题,建议关闭文本建议(我想保留)或只接听第一个电话(这在我的测试中是完全错误的):
TextWatcher events are being fired multiple times
从理论上讲,我可以只接受每个事件并每次都更新,因为最后一个是正确的,但我真的不希望在我的视图模型中进行 3-4 次更新,而此时应该进行一次更新。
有没有人也遇到过这个问题并且有可行的解决方案?
如果需要,我可以添加一些代码,但我实际上只是使用设置为 EditText 的 Textwatcher 的默认实现。
郑重声明,可能 运行 遇到相同问题的任何其他人:
我刚刚坐下来为这个话题注入新的活力,并设法在不使用去抖动器或通过完全删除 textwatcher 停用我的自动完成功能的情况下解决它。
相反,我使用了这样的 focusListener:
int pos = this.getAbsoluteAdapterPosition();
et_text.setOnFocusChangeListener((v, hasFocus) -> {
if (!hasFocus) {
updateText(pos, et_text.getText().toString());
}
});
有了这个,我只得到用户输入文本的最终结果,中间没有触发任何事件。
目前还有一个小问题,因为用户可以输入一些东西,然后按我的保存按钮,他的输入丢失了(由于焦点没有改变),但这是一个小问题,我相信这会有帮助,也是。
我遇到了一个奇怪的错误,TextWatcher 在一次文本更改时使用不同的输入多次触发,主要是在输入或删除 spaces 时。
经过一些调查,我在“afterTextChanged”上得到了以下结果:
测试1,在String "Suger" -> "Su gar"中输入space:
- “加”
- " "
- “苏”
- “苏咖喱”
测试2,在String "Su gar" -> "Su ga r"中输入另一个space:
- “苏”
- “苏”
- “苏嘎”
- “苏嘎儿”
我已经找到了一个相关的问题,建议关闭文本建议(我想保留)或只接听第一个电话(这在我的测试中是完全错误的): TextWatcher events are being fired multiple times
从理论上讲,我可以只接受每个事件并每次都更新,因为最后一个是正确的,但我真的不希望在我的视图模型中进行 3-4 次更新,而此时应该进行一次更新。
有没有人也遇到过这个问题并且有可行的解决方案?
如果需要,我可以添加一些代码,但我实际上只是使用设置为 EditText 的 Textwatcher 的默认实现。
郑重声明,可能 运行 遇到相同问题的任何其他人:
我刚刚坐下来为这个话题注入新的活力,并设法在不使用去抖动器或通过完全删除 textwatcher 停用我的自动完成功能的情况下解决它。
相反,我使用了这样的 focusListener:
int pos = this.getAbsoluteAdapterPosition();
et_text.setOnFocusChangeListener((v, hasFocus) -> {
if (!hasFocus) {
updateText(pos, et_text.getText().toString());
}
});
有了这个,我只得到用户输入文本的最终结果,中间没有触发任何事件。 目前还有一个小问题,因为用户可以输入一些东西,然后按我的保存按钮,他的输入丢失了(由于焦点没有改变),但这是一个小问题,我相信这会有帮助,也是。