Android - TextWatcher вызывается один раз для каждого символа в вставленном тексте

1

Я добавил TextWatcher в EditText и слушаю изменения в тексте с помощью метода onTextChanged (CharSequence s, int start, int before, int count). Когда я вставляю текст, который имеет 10 символов, в этот EditText, onTextChanged() вызывается 10 раз, один раз для каждого символа в тексте, который я вставлял, слева направо. Я хочу, чтобы onTextChanged() вызывался только один раз после того, как все 10 символов были вставлены в EditText. Я уверен, что это должно быть возможно, потому что в противном случае смысл иметь параметр "count", если он всегда будет 1?

  • 0
    Виноват! onTextChanged () вызывается 1,2 или 3 раза в зависимости от того, куда вставляется новый текст. Один раз, если в EditText не было текста, куда вставляется текст. Дважды, если новый текст вставляется в начале или конце исходного текста. И трижды, если новый текст вставляется где-то посередине между оригинальным текстом. Причина в том, что если вставка происходит рядом с другим символом, Android вставляет пробел между ними. Вставка пробела происходит до вставки фактического текста. Поэтому более уместным будет вопрос, если есть способ предотвратить вставку пробелов?
Теги:
count
character
textwatcher
paste

2 ответа

2

count не всегда будет 1: например, если вы выберете и удалите блок текста или выберете вариант автозаполнения.

В любом случае, информация о том, что вставка происходит в одном фрагменте или по одному символу за раз, представляет собой деталь реализации, и если вы полагаетесь на любое поведение, вероятно, ваше приложение будет ломаться в будущем.

  • 0
    Да, счет будет 0 в случае операции удаления. Я пытаюсь что-то сделать, когда паста завершена, поэтому для меня это важно. И я ожидаю, что платформа будет последовательной в своем поведении.
  • 0
    В операции вставки есть некоторая функциональность, которая вставляет пробелы до и после текста как часть операции вставки. Предостережение при установке текста в обработчиках, так как если текст задан пустым, это может привести к сбою при попытке вставить текст, который изменился по сравнению с ожидаемым. Эта вставка пробела до / после вставленного текста также вызывает дополнительные срабатывания событий onTextChanged (и других).
0

Попробуйте использовать afterTextChanged, он получит только один вызов

  • 0
    Не правда. afterTextChanged () вызывается сразу после onTextChanged () каждый раз.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню