Não tem como colocar todo código aqui, porque envolve várias classes.
Tenho uma classe Mask, onde há um TextWatcher. Ele é quem coloco a máscara no telefone.
Na Activity, pego o campo editText e dou um .addTextChangedListener(), com isso ele seta a máscara com base no que eu criei na classe Mask.
Por trás, na hierarquia de classes, eu chamo um .setText, que é quem “dispara” o TextWatcher. (ao menos é assim que eu entendi).
O caso é que no meu código não há looping infinito… debugei e me parece que o looping está na classe textView, que é nativa.
A minha chamada setText não está em looping infinito.
Log.d("EditText", "EditText");
( (EditText) view ).setText( value );
dentro da classe Mask (que chama o TextWatcher) também não,
Log.d("Looping?", "Looping?");
this.mask = "(##)#####-####";
entre as duas classes, está a textView. Só sobra ela de opção.
Outro detalhe é que o bug só ocorre quando estou recriando a Activity. Entro nela, tudo ok… se eu desligo o tela do aparelho e volto, ai ferra.
Eu vi que este problema não é só meu. Seria necessário retirar o textListner “editText.removeTextChangedListener(this)”.
Só que eu fiz isso e não funcionou.
Será que o contextoestá errado?
Adicionei assim:
fone2.addTextChangedListener(Mask.phone(fone2));
Removi assim:
(obs: deve ter ficado confuso, mas não sei se tinha como expicar melhor)