Обнаружить изменения в EditText (TextWatcher неэффективен)

Мне нужно обнаружить изменения текста в EditText. Я пробовал TextWatcher, но он не работает так, как я ожидал. Возьмите метод onTextChanged:

public void onTextChanged( CharSequence s, int start, int before, int count )

Скажем, у меня есть текст "Джон" уже в EditText. Если нажать другую клавишу, «е»,s будет "Johne",start будет 0,before будет 4, иcount будет 5. То, как этот метод будет работать, я думаю, будет разница между тем, чем был EditText ранее, и тем, чем он собирается стать.

Так что я бы ожидал:

s = "Johne"
start = 4 // inserting character at index = 4
before = 0 // adding a character, so there was nothing there before
count = 1 // inserting one character

Мне нужно иметь возможность обнаруживать индивидуальные изменения при каждом нажатии клавиши. Поэтому, если у меня есть текст «Джон», мне нужно знать, что «e» было добавлено в индекс 4. Если я возвращаю «назад» «e», мне нужно знать, что «e» было удалено из индекса 4. Если я поставлю курсор после «J» "и backspace, мне нужно знать, что" J "был удален из индекса 0. Если я поставлю" G "там, где" J ", я хочу знать, что" G "заменил" J "в индексе 0.

Как мне этого добиться? Я не могу придумать надежного способа сделать это.

Ответы на вопрос(2)

Ваш ответ на вопрос