У меня есть EditText и TextWatcher.
Скелет моего кода:
EditText x;
x.addTextChangedListener(new XyzTextWatcher());
XyzTextWatcher implements TextWatcher() {
public synchronized void afterTextChanged(Editable text) {
formatText(text);
}
}
Мой метод formatText () вставляет некоторые дефисы в некоторых позициях текста.
private void formatText(Editable text) {
removeSeparators(text);
if (text.length() >= 3) {
text.insert(3, "-");
}
if (text.length() >= 7) {
text.insert(7, "-");
}
}
private void removeSeparators(Editable text) {
int p = 0;
while (p < text.length()) {
if (text.charAt(p) == '-') {
text.delete(p, p + 1);
} else {
p++;
}
}
}
У меня проблема в том, что то, что отображается на моем EditText, не синхронизируется с редактируемым.Когда я отладил код, я увидел, что переменная text (Editable) имеет ожидаемое значение, но то, что показано в EditText, не всегда соответствует Editable.
Например, когда у меня есть текст x =«123-456-789» Я вырезал текст «456» из х вручную.После форматирования мой Editable имеет значение "123-789-". Однако значение, отображаемое на моем EditText, равно "123--789"
Хотя в большинстве случаев они имеют одинаковое значение.
Я предположил, что EditText является редактируемым, и они всегда должны совпадать.Я что-то пропустил?