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 является редактируемым, и они должны всегда совпадать. Я что-то пропустил?

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

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