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?

有帮助吗?

解决方案

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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top