Android TextWatcher.afterTextChanged против TextWatcher.метода ontextchanged



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

451   3  

3 ответов:

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

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

  2. метода ontextchanged(CharSequence оцените, начнем интервал, интервал перед, интервал граф).
    Были внесены изменения, некоторые символы только что были заменены. текст не редактируется.
    использование: когда вам нужно видеть, какие символы в тексте новые.

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

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

public void afterTextChanged (Editable s)

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

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.