gpt4 book ai didi

java - 如何在不触发 Text Watcher 的情况下更改 EditText 文本?

转载 作者:IT老高 更新时间:2023-10-28 11:42:20 27 4
gpt4 key购买 nike

我有一个带有 Customer Text Watcher 的 EditText 字段。在一段代码中,我需要使用 .setText("whatever").

更改 EditText 中的值

问题是,一旦我进行了更改,就会调用 afterTextChanged 方法,这会创建一个无限循环。如何在不触发 afterTextChanged 的​​情况下更改文本?

我需要 afterTextChanged 方法中的文本,所以不建议删除 TextWatcher

最佳答案

简答

您可以检查当前哪个 View 具有焦点,以区分用户和程序触发的事件。

EditText myEditText = (EditText) findViewById(R.id.myEditText);

myEditText.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (myEditText.hasFocus()) {
// is only executed if the EditText was directly changed by the user
}
}

//...
});

长答案

作为简短答案的补充:如果当您以编程方式更改应调用 clearFocus() 的文本时 myEditText 已经具有焦点,则调用 setText(...)在你重新请求焦点之后。把它放在一个实用函数中是个好主意:

void updateText(EditText editText, String text) {
boolean focussed = editText.hasFocus();
if (focussed) {
editText.clearFocus();
}
editText.setText(text);
if (focussed) {
editText.requestFocus();
}
}

对于 Kotlin:

由于 Kotlin 支持扩展函数,您的实用函数可能如下所示:

fun EditText.updateText(text: String) {
val focussed = hasFocus()
if (focussed) {
clearFocus()
}
setText(text)
if (focussed) {
requestFocus()
}
}

关于java - 如何在不触发 Text Watcher 的情况下更改 EditText 文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385081/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com