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

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

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

Скажем, у меня уже есть текст «Джон» в EditText. Если нажать другую клавишу y, «e», s будет «Johne», start будет 0, перед будет 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

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

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

5
задан Jason Robinson 27 February 2012 в 02:54
поделиться