Вопрос

При каких обстоятельствах я должен использовать 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 из этого обратного вызова.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top