Eu tenho três EditText
widgets no meu layout de exibição. Existe uma maneira de usar um single TextWatcher
para todos os três EditTexts
?
android
textwatcher
bie
fonte
fonte
Respostas:
Acabei de encontrar esse problema. Eu o resolvi criando uma implementação de classe interna
TextWatcher
que usa uma View como argumento. Em seguida, na implementação do método, basta ativar a exibição para ver de qualEditable
é a origem.Declaração:
Uso:
fonte
Single TextWatcher for multiple EditTexts
. São 3 instâncias de uma classe TextWatcher. Portanto, três TextWatchers separados estão controlando 3 EditTexts.Se você deseja usar apenas afterTextChanged, compare os editáveis:
fonte
==
vez de.equals()
.Implementação do MultiTextWatcher
Uso
fonte
TextView
vem a mudança.Se você deseja usar a comparação onTextChanged
hashCode()
mencionada abaixo -Ou
Se você deseja usar a comparação afterTextChanged
Editable
mencionada abaixo -fonte
Funcionará com este código
Em seguida, adicione isso no oncreate
fonte
Sei que esse é um problema antigo e que existe a decisão certa. Vou escrever a sua própria, talvez ajude alguém.
Emulando o exemplo clássico em que temos N EditText, e queremos mostrar o botão se todos os campos estiverem preenchidos. Este exemplo faz sentido, especialmente se usar validadores para cada um deles.
Fiz um exemplo com relação ao problema, mas você pode fazer qualquer conjunto
MultiEditText.class
Parece muito simples, agora
CustomTextWatcher.class
Vou adicionar um layout, para que você não perca tempo
multi_edit_text.xml
fonte
Faça sua classe herdar de Activity e implementar o TextWatcher.
Então, através da magia do polimorfismo, você só precisa se inscrever nos eventos.
Isso não vai lhe dizer o que o TextEdit mudou, no entanto, usando uma combinação disso e da resposta de Sky Kelsey , você pode resolver isso de maneira adequada.
fonte
Então:
fonte
fonte
Esta é a minha solução para o kotlin. Você pode simplesmente usar Igualdade referencial (===) para verificar o mesmo objeto e ele está funcionando perfeitamente.
fonte
Sei que essa pergunta é antiga, mas queria compartilhar uma das minhas soluções (no Kotlin). Minha solução é uma melhoria da resposta de @Shwarz Andrei, minha razão era o que se você quisesse manipular mais coisas / objetos.
Em vez de passar ambos
list of EditTexts
ea Button
como parâmetros, você apenas passaria o seulist of editText
. Em sua classe personalizada, você implementaria um lambda como:Então você o definirá ou aumentará dentro do
afterTextChanged
fonte
Aqui está como eu fiz isso:
Crie um ArrayList de EditTexts e use um loop for para aplicar o TextWatcher a todos os EditTexts, se você tiver um comportamento para todos os editTexts, apenas aplique-o lá, se você tiver comportamentos específicos para alguns editTexts específicos, você pode usar if para selecionar e aplicar a editTexts individuais.
Aqui está o meu código:
Espero que isto ajude
fonte
onTextChanged
em um EditText. Adicionar umonFocusChange
para vários widgets é muito mais simples, porque ele passou o objeto remetente com a chamada de método. Em seguida, você pode examinar qual objeto acionou a chamada e lidar com ela a partir daí.