Android TextWatcher.afterTextChanged против TextWatcher.onTextChanged
При каких обстоятельствах я должен использовать afterTextChanged
вместо onTextChanged
и наоборот? Примеры были бы наиболее поучительными с вниманием к тому, почему onTextChanged
должен быть переопределен, но afterTextChanged
а также beforeTextChanged
не должны быть переопределены.
3 ответа
Эти события вызываются в следующем порядке:
beforeTextChanged (CharSequence s, int start, int count, int after).
Это означает, что символы должны быть заменены новым текстом. Текст не редактируется.
Использование: когда вам нужно взглянуть на старый текст, который скоро изменится.onTextChanged (CharSequence s, int start, int before, int count).
Изменения были сделаны, некоторые персонажи только что были заменены. Текст не редактируется.
Использование: когда вам нужно увидеть, какие символы в тексте являются новыми.afterTextChanged (редактируемые).
То же, что и выше, за исключением того, что теперь текст редактируемый.
Использование: когда вам нужно увидеть и, возможно, отредактировать новый текст.
Если я просто слушаю изменения в EditText
Мне не нужно использовать первые два метода вообще. Я просто получу новые значения в третьем методе и исправлю новый текст, если это необходимо. Однако, если бы мне пришлось отслеживать точные изменения, которые происходят со значениями, я бы использовал первые два метода. Если бы я также нуждался в редактировании текста после прослушивания изменений, я сделал бы это в третьем методе.
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 для TextWatcher.
Android Textwatcher
это один из видов триггера, который вызывается при изменении текста поля ввода.
afterTextChanged (Editable s)
- Этот метод вызывается, когда текст был изменен. Поскольку любые внесенные вами изменения приведут к рекурсивному вызову этого метода, вы должны внимательно следить за выполнением операций здесь, иначе это может привести к бесконечному циклу.
onTextChanged (CharSequence s, int start, int before, int count)
- Этот метод вызывается, чтобы уведомить вас о том, что в пределах s символы подсчета, начинающиеся с начала, только что заменили старый текст, длина которого была раньше. Ошибка при попытке внести изменения в s из этого обратного вызова.