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