Android TextWatcher.afterTextChanged против TextWatcher.onTextChanged

голоса
97

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

Задан 25/01/2009 в 00:03
источник пользователем
На других языках...                            


3 ответов

голоса
160

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

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

  2. OnTextChanged (CharSequence сек, Int старт, INT перед тем , количество INT) .
    Изменения были сделаны, некоторые персонажи только что были заменены. Текст неизменяемый.
    Использование: когда вы должны видеть , какие символы в тексте , являются новыми.

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

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

Ответил 14/05/2011 в 19:03
источник пользователем

голоса
10

общественного недействительный afterTextChanged (редактируемые s)

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

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

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

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

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

Справа от Reference Андроида для TextWatcher .

Ответил 25/01/2009 в 00:19
источник пользователем

голоса
2

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

Текст Watcher имеет три события.

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

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

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

Для более полной информации вы можете посетить здесь

http://developer.android.com/reference/android/text/TextWatcher.html

Ответил 05/06/2015 в 09:55
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more