Tengo tres EditText
widgets en mi diseño de vista. ¿Hay alguna manera de usar un solo TextWatcher
para los tres EditTexts
?
android
textwatcher
bie
fuente
fuente
Respuestas:
Acabo de encontrar este problema. Lo resolví creando una implementación de clase interna
TextWatcher
que toma una vista como argumento. Luego, en la implementación del método, simplemente encienda la vista para ver de dóndeEditable
vieneDeclaración:
Uso:
fuente
Single TextWatcher for multiple EditTexts
. Son 3 instancias de una clase TextWatcher. Entonces 3 TextWatchers separados están controlando 3 EditTexts.Si desea usar solo afterTextChanged, compare editables:
fuente
==
lugar de.equals()
.Implementación de MultiTextWatcher
Uso
fuente
TextView
viene el cambio.Si desea utilizar onTextChanged compare
hashCode()
mencionado a continuación -O
Si desea usar afterTextChanged compare
Editable
mencionado a continuación -fuente
Funcionará con este código.
Luego agregue esto en oncreate
fuente
Sé que este es un problema antiguo, y existe la decisión correcta. Escribiré el suyo, tal vez ayude a alguien.
Emulando el ejemplo clásico donde tenemos N EditText, y queremos mostrar el botón si todos los campos están llenos. Este ejemplo tiene sentido, especialmente si se utilizan validadores adicionales para cada uno.
Hice un ejemplo con respecto al problema, pero puedes hacer cualquier conjunto
MultiEditText.class
Se ve muy simple, ahora
CustomTextWatcher.class
Agregaré un diseño para que no pierdas el tiempo.
multi_edit_text.xml
fuente
Haga que su clase herede de Activity e implemente TextWatcher.
Luego, a través de la magia del polimorfismo, solo necesita suscribirse a los eventos.
Esto no le dirá qué TextEdit cambió, sin embargo, utilizando una combinación de esto y la respuesta de Sky Kelsey , podría resolverlo muy bien.
fuente
Luego:
fuente
fuente
Esta es mi solución para kotlin. Simplemente puede usar la igualdad referencial (===) para verificar el mismo objeto y está funcionando perfectamente.
fuente
Sé que esta pregunta es antigua, sin embargo, quería compartir una de mis soluciones (en Kotlin). Mi solución es una mejora de la respuesta de @Shwarz Andrei, mi razón era qué pasaría si quisieras manipular más cosas / objetos.
En lugar de pasar ambos
list of EditTexts
ya Button
como params, solo pasarías tulist of editText
. Luego, dentro de su clase personalizada, implementaría un lambda como:Luego lo colocará o elevará dentro del
afterTextChanged
fuente
Así es como lo hice:
Cree una ArrayList de EditTexts, y luego use un bucle for para aplicar TextWatcher para todos los EditTexts, si tiene un comportamiento para todos los editTexts, simplemente aplíquelo allí, si tiene comportamientos específicos para algunos editTexts específicos, entonces puede usar un if declaración para seleccionar y aplicar a editTexts individuales.
Aquí está mi código:
Espero que esto ayude
fuente
onTextChanged
en un EditText. Agregar unonFocusChange
para múltiples widgets es mucho más simple, porque pasó el objeto remitente con la llamada al método. Luego puede examinar qué objeto ha activado la llamada y manejarlo desde allí.