Eu sei um pouco sobre, TextWatcher
mas isso dispara em cada caractere que você entra. Quero um ouvinte que seja acionado sempre que o usuário terminar a edição. É possível? Também TextWatcher
recebo uma instância de, Editable
mas preciso de uma instância de EditText
. Como faço para conseguir isso?
EDIT : a segunda pergunta é mais importante. Por favor, responda isso.
Respostas:
Primeiro, você pode ver se o usuário terminou de editar o texto, se ele
EditText
perde o foco ou se o usuário pressiona o botão Concluído (isso depende da sua implementação e do que é melhor para você). Em segundo lugar, você não pode obter umaEditText
instância dentro deTextWatcher
apenas se tiver declarado oEditText
como um objeto de instância. Mesmo que você não deva editar oEditText
dentro doTextWatcher
porque não é seguro.EDITAR:
Para conseguir colocar a
EditText
instância em suaTextWatcher
implementação, você deve tentar algo assim:Observe que o exemplo acima pode ter alguns erros, mas eu só queria mostrar um exemplo.
fonte
Estava me incomodando que a implementação de um ouvinte para todos os meus campos EditText exigisse que eu tivesse um código feio e prolixo, então escrevi a classe abaixo. Pode ser útil para qualquer pessoa que tropece nisso.
Agora, implementar um ouvinte é um pouco mais limpo.
Quanto à frequência de disparo, talvez seja possível implementar uma verificação para executar o código desejado
//Do stuff
após um determinadofonte
Qualquer pessoa usando ButterKnife . Você pode usar como:
fonte
Eu fiz isso usando
AutotextView
:fonte
fonte
TextWatcher
não funcionou para mim, pois continuou disparando para todosEditText
e bagunçando os valores uns dos outros.Aqui está minha solução:
Portanto, usando o
getChildAt(xx)
método, você pode recuperar qualquer item noListView
e obter o item individual usandofindViewById
. E então fornecerá o valor mais recente.fonte
Pelo que eu posso pensar sobre isso, há apenas duas maneiras de fazer isso. Como você pode saber se o usuário terminou de escrever uma palavra? Ou na perda de foco ou clicando em um botão "ok". Não tenho como saber se o usuário pressionou o último caractere ...
Portanto, chame
onFocusChange(View v, boolean hasFocus)
ou adicione um botão e um ouvinte de clique a ele.fonte
O método Watcher é acionado em cada entrada de caractere. Então, eu construí este código com base no método onFocusChange:
Para usá-lo, basta chamar assim:
Você pode ignorar a função comS substituindo! ComS (dat.s, "" + EdTe.getText ()) pela função! Equal. No entanto, a própria função igual às vezes não funciona corretamente em tempo de execução.
O ouvinte onChange se lembrará de dados antigos de EditText quando o usuário focalizar a digitação e, em seguida, comparar os novos dados quando o usuário perder o foco ou pular para outra entrada. Se comparar a String antiga e não a mesma nova, ele dispara o trabalho.
Se você tiver apenas 1 EditText, então você precisará fazer uma função ClearFocus criando um Ultimate Secret Transparent Micro EditText 😸 fora das janelas 😽 e solicitar o foco para ele e, em seguida, ocultar o teclado através do Import Method Manager.
fonte