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