Android-вызов setText внутри onTextChanged

Чтобы предотвратить бесконечный цикл, я сделал что-то столь же уродливое, как это...

    @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);
}

Есть ли другой способ предотвратить вызов onTextChanged при изменении текста в onTextChanged?


person BlueWanderer    schedule 20.02.2012    source источник


Ответы (1)


Вы можете использовать флаги, которые указывают, был ли текст изменен один раз или нет. Если он был изменен один раз, то больше не меняйте, иначе измените его.

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);
}
person Urban    schedule 20.02.2012
comment
это то, что я обычно делаю; было бы неплохо посмотреть, есть ли более элегантное решение - person alex.zherdev; 20.02.2012
comment
Думаю, вы имеете в виду поставить flag_text = 1 перед setText (tt) - person BlueWanderer; 20.02.2012