OnTextChanged vs afterTextChanged в Android - нужны живые примеры

Я читал о TextWatcher в программировании Android. Я не мог понять разницу между afterTextChanged() и onTextChanged().

Хотя я упоминал Различия между TextWatcher onTextChanged, beforeTextChanged и afterTextChanged, я все еще не могу придумать ситуацию, когда мне нужно будет использовать onTextChanged(), а не afterTextChanged().

Ответ 1

Я нашел объяснение этому на Android Dev Portal

http://developer.android.com/reference/android/text/TextWatcher.html

**abstract void afterTextChanged(Editable s)**
This method is called to notify you that, somewhere within s, the text has been changed.

**abstract void beforeTextChanged(CharSequence s, int start, int count, int after)**
This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after.

**abstract void onTextChanged(CharSequence s, int start, int before, int count)**
This method is called to notify you that, within s, the count characters beginning at start have just replaced old text that had length before.

Таким образом, различия между этими двумя являются:

  • Я могу изменить мой текст, используя afterTextChanged, а onTextChanged не позволяет мне это делать
  • onTextChanged дает мне смещение того, что изменилось где, а afterTextChanged не

Ответ 2

Просто добавив что-то в ответ Pratik Dasa и обсуждение с @SimpleGuy в комментариях, так как у меня недостаточно репутации для комментариев.

Три метода также запускаются с помощью EditText.setText("your string here"). Это будет иметь длину 16 (в данном случае), поэтому count не всегда 1.

Обратите внимание, что список параметров не одинаковый для трех методов:

abstract void afterTextChanged(Editable s)
abstract void beforeTextChanged(CharSequence s, int start, int count, int after)
abstract void onTextChanged(CharSequence s, int start, int before, int count)

И здесь разница между afterTextChanged и onTextChanged: параметры.

Также обратите внимание на принятый ответ в этой теме: Android TextWatcher.afterTextChanged vs TextWatcher.onTextChanged

Ответ 3

вот объяснение:

onTextChanged: это означает, что когда вы начинаете вводить текст, например, вы хотите написать "спорт", тогда это вызовет каждого персонажа, как он будет вызывать, когда вы нажимаете "s", а затем "p", затем "o" и так далее...

afterTextChanged: это вызовет, когда вы перестанете печатать, он вызывается после того, как вы полностью напишете "спорт", то есть основное отличие.

YOUR_EDIT_TEXT.addTextChangedListener(new TextWatcher() {

                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {

                    //Your query to fetch Data
                    }

                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                    }

                    @Override
                    public void afterTextChanged(Editable s) {
                        if (s.length() > 0) {

                            //Your query to fetch Data
                        }
                    }
                });