При каких обстоятельствах я должен использовать afterTextChanged вместо onTextChanged и наоборот?
Android TextWatcher.afterTextChanged vs TextWatcher.onTextChanged
Ответ 1
Эти события вызывают в следующем порядке:
-
beforeTextChanged (CharSequence s, int start, int count, int after).
Это означает, что символы будут заменены каким-то новым текстом. Текст не может быть изменен. Использование: когда вам нужно взглянуть на старый текст, который вот-вот изменится. -
onTextChanged (CharSequence s, int start, int before, int count).
Были внесены изменения, некоторые символы только что были заменены. Текст не может быть изменен. Используйте: когда вам нужно увидеть, какие символы в тексте являются новыми. -
afterTextChanged (Editable s).
То же, что и выше, кроме текста теперь можно редактировать. Используйте: когда вам нужно увидеть и, возможно, отредактировать новый текст.
Если я просто слушаю изменения в EditText, мне не нужно будет использовать первые два метода вообще. Я просто получу новые значения в третьем методе и при необходимости исправлю новый текст. Однако, если мне пришлось отслеживать точные изменения, которые происходят со значениями, я бы использовал первые два метода. Если бы мне также пришлось редактировать текст после прослушивания изменений, я бы сделал это в третьем методе.
Ответ 2
public void afterTextChanged (Editable s)
Этот метод вызывается, чтобы уведомить вас, что где-то в
sтекст был изменен. Допустимо внести дальнейшие изменения вsиз этого обратного вызова, но будьте осторожны, чтобы не попасть в бесконечный цикл, потому что любые сделанные вами изменения вызовут этот метод снова рекурсивно. (Вам не сообщается, где произошло изменение, потому что другие методы afterTextChanged(), возможно, уже внесли другие изменения и сделали недействительными смещения. Но если вам нужно знать здесь, вы можете использоватьsetSpan(Object, int, int, int)вonTextChanged(CharSequence, int, int, int), чтобы отметить свое место и то посмотрите отсюда, где заканчивается пролет.
public void beforeTextChanged (CharSequence s, int start, int count, int after)
Этот метод вызывается, чтобы уведомить вас, что в
sсимволыcount, начинающиеся сstart, будут заменены новым текстом длинойafter. Ошибка при попытке внести изменения вsиз этого обратного вызова.
public void onTextChanged (CharSequence s, int start, int before, int count)
Этот метод вызывается, чтобы уведомить вас, что в
sсимволыcount, начинающиеся сstart, только что заменили старый текст длинойbefore. Ошибка при попытке внести изменения вsиз этого обратного вызова.
Справа от Android Reference для TextWatcher.
Ответ 3
Android Textwatcher- это один из видов триггера, который вызывается при изменении текста поля ввода.
afterTextChanged (Editable s) - этот метод вызывается, когда текст был изменен. Поскольку любые внесенные вами изменения приведут к рекурсивному вызову этого метода, вы должны внимательно следить за выполнением операций здесь, иначе это может привести к бесконечному циклу.
onTextChanged (CharSequence s, int start, int before, int count) - этот метод вызывается, чтобы уведомить вас о том, что в пределах s символы count, начинающиеся с начала, только заменили старый текст, длина которого была раньше. Ошибка при попытке внести изменения в s из этого обратного вызова.