Ответы:
Эти события вызываются в следующем порядке:
beforeTextChanged (CharSequence s, начало целого числа, число целых чисел, интервал после) .
Это означает, что символы скоро будут заменены каким-то новым текстом. Текст не редактируется.
Использование: когда вам нужно взглянуть на старый текст, который скоро изменится.
onTextChanged (CharSequence s, int start, int до, int count) .
Внесены изменения, только что заменены некоторые персонажи. Текст не редактируется.
Использование: когда вам нужно увидеть, какие символы в тексте новые.
afterTextChanged (редактируемые) .
То же, что и выше, только теперь текст можно редактировать .
Использование: когда вам нужно увидеть и, возможно, отредактировать новый текст.
Если я просто прислушиваюсь к изменениям EditText
, мне вообще не нужно использовать первые два метода. Я просто получу новые значения в третьем методе и при необходимости исправлю новый текст. Однако, если бы мне пришлось отслеживать точные изменения, которые происходят со значениями, я бы использовал первые два метода. Если бы мне также понадобилось отредактировать текст после прослушивания изменений, я бы сделал это третьим способом.
public void afterTextChanged (редактируемые)
Этот метод вызывается, чтобы уведомить вас о том, что где-то внутри
s
текст был изменен. Допустимо вносить дальнейшие измененияs
из этого обратного вызова, но будьте осторожны, чтобы не попасть в бесконечный цикл, потому что любые внесенные вами изменения вызовут рекурсивный вызов этого метода. (Вам не сообщают, где произошло изменение, потому что другие методы afterTextChanged (), возможно, уже внесли другие изменения и сделали недействительными смещения. Но если вам нужно знать здесь, вы можете использоватьsetSpan(Object, int, int, int)
in,onTextChanged(CharSequence, int, int, int)
чтобы отметить свое место, а затем посмотреть отсюда, где промежуток закончился.
public void beforeTextChanged (CharSequence s, int start, int count, int после)
Этот метод вызывается , чтобы уведомить вас , что, в пределах
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 символы count, начинающиеся с start, только что заменили старый текст, который имел длину раньше. Попытка внести изменения в s из этого обратного вызова является ошибкой.