Добре, след като се опитах да приложа този подход в моето приложение за „реален свят“, се оказа, че ако действително използвате данните, върнати от извикването на AJAX, това няма да работи (това означава, че IE9 ще продължи да показва само първия знак). .но хубавото е, че след много псувни и лоши думи успях да го накарам да проработи. Вижте моя приет отговор...

person mike.b93    schedule 19.04.2013    source източник


Отговори (3)


Добре, току-що започнах да преглеждам кода си отново. Защо никой не намери отговор? Наистина не е толкова трудно.

Така че просто оградих if-statements във всеки блок за опит с друг if-statement, който изглежда така:

if(edittext.isFocused()){
   try-catch block
}

И сега всичко работи добре. Вече няма StackOverflowException, защото textwatcher започва да работи само там, където е фокусиран edittext. Промените в текста вече не задействат безкраен цикъл.

person mike.b93    schedule 04.05.2013
comment
Блогът е премахнат - person ; 22.03.2014

Трябва да проверите дали промяната в EditText е станала поради промени, направени в други EditText. Създайте поле boolean в класа и го инициализирайте с false:

private boolean mIsChanging = false;

В afterTextChanged() проверете дали това поле е false или излезте в противен случай:

public void afterTextChanged(Editable editable) {
    if (mIsChanging) {
        return;
    }

    mIsChanging = true;

    // Then do what you did previously...

    mIsChanging = false;
}
person Michael    schedule 19.04.2013
comment
Добре, StackOverFlowError изчезна, но получавам много странно поведение. когато въвеждам нещо в моето 2-ро EditText, се появява нещо много различно от това, което съм въвел, и когато изтривам въведеното от мен, тези числа стават по-големи и подскачат.. Малко трудно за обяснение.. - person mike.b93; 19.04.2013
comment
Трудно е да ти препоръчам нещо в този случай. Можете да опитате да го отстраните. Сигурен съм, че ще можете да откриете къде е проблемът доста лесно. - person Michael; 19.04.2013

С Editable е възможно, трябва да използвате hashCodeFunction

@Override
public void afterTextChanged(Editable s) {
    if (editText.getText().hashCode() == s.hashCode()) {
        // some
    }
}
person steving21    schedule 17.09.2015