EditText não é atualizado após a alteração do texto no TextWatcher

Tenho um EditText e um TextWatcher.

Esqueleto do meu código:

EditText x;
x.addTextChangedListener(new XyzTextWatcher());

XyzTextWatcher implements TextWatcher() {
    public synchronized void afterTextChanged(Editable text) {
        formatText(text);
    }
}

método My formatText () insere alguns hífens em algumas posições do text

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++;
        }
    }
}

O problema que tenho é: o que é exibido no meu EditText não está sincronizado com o Editável. Quando depurei o código, vi que o texto da variável (Editável) tem o valor esperado, mas o que é mostrado no EditText nem sempre corresponde ao Editável.

Por exemplo, quando tenho um texto x = "123-456-789", corto o texto "456" de x manualmente. Após a formatação, meu Editável tem o valor "123-789-". No entanto, o valor mostrado no meu EditText é "123--789"

Eles têm o mesmo valor na maioria dos caso

Presumi que o EditText É o Editável e eles sempre devem corresponder. Estou esquecendo de algo

questionAnswers(1)

yourAnswerToTheQuestion