Respostas:
Esses eventos são chamados na seguinte ordem:
beforeTextChanged (CharSequence s, int start, int count, int after) .
Isso significa que os caracteres estão prestes a ser substituídos por algum novo texto. O texto não é editável.
Use: quando você precisar dar uma olhada no texto antigo que está prestes a mudar.
onTextChanged (CharSequence s, int start, int before, int count) .
Alterações foram feitas, alguns caracteres foram substituídos. O texto não é editável.
Use: quando você precisar ver quais caracteres no texto são novos.
afterTextChanged (Editável) .
O mesmo que acima, exceto que agora o texto é editável .
Use: quando você precisar ver e possivelmente editar o novo texto.
Se estou apenas ouvindo alterações EditText
, não precisarei usar os dois primeiros métodos. Apenas receberei novos valores no terceiro método e, se necessário, corrigirei o novo texto. No entanto, se eu tivesse que rastrear as mudanças exatas que acontecem com os valores, usaria os dois primeiros métodos. Se eu também precisasse editar o texto depois de ouvir as alterações, faria isso no terceiro método.
public void afterTextChanged (Editável)
Este método é chamado para notificá-lo de que, em algum lugar interno
s
, o texto foi alterado. É legítimo fazer alterações adicionais as
partir desse retorno de chamada, mas tome cuidado para não entrar em um loop infinito, pois qualquer alteração feita fará com que esse método seja chamado novamente recursivamente. (Você não disse onde a mudança ocorreu porque outros afterTextChanged () métodos podem já fizeram outras mudanças e invalidados os deslocamentos. Mas se você precisa saber aqui, você pode usarsetSpan(Object, int, int, int)
emonTextChanged(CharSequence, int, int, int)
para marcar o seu lugar e, em seguida, olhar para cima a partir daqui, onde o período acabou.
public void beforeTextChanged (CharSequence s, int start, int count, int after)
Esse método é chamado para notificá-lo de que, dentro de
s
, oscount
caracteres começando emstart
estão prestes a ser substituídos por um novo texto com comprimentoafter
. É um erro tentar fazer alteraçõess
nesse retorno de chamada.
public void onTextChanged (CharSequence s, int start, int before, int count)
Esse método é chamado para notificá-lo de que, dentro de
s
, oscount
caracteres iniciados emstart
acabam de substituir o texto antigo que tinha tamanhobefore
. É um erro tentar fazer alteraçõess
nesse retorno de chamada.
Android Textwatcher
é um tipo de gatilho chamado na alteração de texto de um campo de entrada.
afterTextChanged (Editable s)
- Este método é chamado quando o texto foi alterado. Como qualquer alteração feita fará com que esse método seja chamado novamente recursivamente, você deve estar atento ao executar operações aqui, caso contrário, isso pode levar a um loop infinito .
onTextChanged (CharSequence s, int start, int before, int count)
- Esse método é chamado para notificá-lo de que, dentro de s, os caracteres de contagem iniciados no início substituíram o texto antigo com tamanho anterior. É um erro tentar fazer alterações em s desse retorno de chamada.