EditText не обновляется после изменения текста в TextWatcher
У меня есть 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, не синхронизируется с Editable. Когда я отладил код, я увидел, что переменная text (Editable) имеет ожидаемое значение, но то, что показано в EditText, не всегда соответствует Editable.
Например, когда у меня есть текст x = "123-456-789", я вырезал текст "456" из x вручную. После форматирования мой Editable имеет значение "123-789-". Однако значение, отображаемое на моем EditText, равно "123--789".
Они имеют одинаковое значение в большинстве случаев.
Я предположил, что EditText является редактируемым, и они должны всегда совпадать. Я что-то пропустил?