Android call setText within onTextChanged

2019-06-24 19:39发布

问题:

To prevent the infinite loop I did something as ugly as this...

    @Override
protected void onTextChanged(CharSequence text, int start,
        int lengthBefore, int lengthAfter) {

    String t = text.toString();
    String tt = t.toUpperCase();

    if (!t.equals(tt)) {

        setText(tt);
    }

    super.onTextChanged(text, start, lengthBefore, lengthAfter);
}

Is there any other way to prevent the onTextChanged from being called when changing the text within onTextChanged?

回答1:

You could use flags that specify if the text has been changed once or not. If it has been changed once, then do not change again, else change it.

int flag_text=0;
protected void onTextChanged(CharSequence text, int start,
    int lengthBefore, int lengthAfter) {

    if (flag_text==0) {
        flag_text=1;
        setText(tt);
    }
    super.onTextChanged(text, start, lengthBefore, lengthAfter);
}