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