TextWatcher Для Андроид.afterTextChanged против TextWatcher.метода ontextchanged

при каких обстоятельствах я должен использовать afterTextChanged вместо onTextChanged и наоборот? Примеры были бы наиболее поучительными с вниманием к why onTextChanged должно быть переопределено, но afterTextChanged и beforeTextChanged не должны быть переопределены.

3 ответов


эти события вызываются в следующем порядке:

  1. beforeTextChanged(объект CharSequence с начала инт считать интервал, интервал после).
    Это означает, что символы будут заменены каким-то новым текстом. текст не редактируется.
    использование: когда нужно взглянуть на старый текст, который меняется.

  2. onTextChanged(CharSequence s, int start, int before, int граф).
    Были внесены изменения, некоторые символы были просто заменены. текст не редактируется.
    использование: когда вам нужно видеть, какие символы в тексте новые.

  3. afterTextChanged (редактируемые s).
    То же, что и выше, только теперь текст доступен для редактирования.
    использование: когда вам нужно увидеть и, возможно, отредактировать новый текст.

Если я просто слушаю изменения в EditText, Мне не нужно будет использовать первые два метода вообще. Я просто получу новые значения в третьем методе и при необходимости исправлю новый текст. Однако, если бы мне пришлось отслеживать точные изменения, которые происходят со значениями, я бы использовал первые два метода. Если бы у меня также была необходимость редактировать текст после прослушивания изменений, я бы сделал это в третьем методе.


public void afterTextChanged (редактируемые s)

этот метод вызывается, чтобы уведомить вас, что где-то в s текст был изменен. Правомерно вносить дальнейшие изменения в s из этого обратного вызова, но будьте осторожны, чтобы не попасть в бесконечный цикл, потому что любые изменения, которые вы сделаете, вызовут этот метод снова рекурсивно. (Вам не говорят, где произошло изменение, потому что другие методы afterTextChanged() возможно, уже внесены другие изменения и аннулированы смещения. Но если вам нужно знать здесь, вы можете использовать setSpan(Object, int, int, int) на onTextChanged(CharSequence, int, int, int) чтобы отметить свое место, а затем посмотреть отсюда, где закончился пролет.

общественного недействительными beforeTextChanged(объект CharSequence с начала инт считать интервал, интервал после)

этот метод вызывается, чтобы уведомить вас об этом, в пределах s, the count символы в начале start будут заменены новым текстом с длиной after. Это ошибка, чтобы попытаться внести изменения в s от этого обратного вызова.

общественного недействительными метода ontextchanged(CharSequence оцените, начнем интервал, интервал перед, граф инт)

этот метод вызывается, чтобы уведомить вас об этом, в пределах s, the count символы в начале start только что заменили старый текст, который имел длину before. Это ошибка, чтобы попытаться внести изменения в s от этого обратный звонок.

С ссылка Android для TextWatcher.


Android Textwatcher один вид триггера, который называется об изменении текста поля ввода.

afterTextChanged (Editable s) - этот метод вызывается при изменении текста. Поскольку любые изменения, которые вы сделаете, вызовут этот метод снова рекурсивно, вы должны следить за выполнением операций здесь, иначе это может привести к бесконечность петля.

onTextChanged (CharSequence s, int start, int before, int count) - этот метод вызывается, чтобы уведомить вас о том, что в пределах s символы count, начинающиеся при запуске, только что заменили старый текст, который имел длину раньше. Попытка внести изменения в s из этого обратного вызова является ошибкой.