Me gustaría implementar un botón de cambio, android.widget.Switch (disponible en API v.14).
<Switch
android:id="@+id/switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Switch" />
Pero no estoy seguro de cómo agregar un detector de eventos para el botón. ¿Debería ser un oyente "onClick"? ¿Y cómo sabría si está activado o no?
Respuestas:
Switch hereda
CompoundButton
los atributos, por lo que recomendaría OnCheckedChangeListenerfuente
OnCLick
, los interruptores no tienenOnChange
! ¡Equipo de Google bien diseñado!Use el siguiente fragmento para agregar un Switch a su diseño a través de XML:
Luego, en el método onCreate de su Actividad, obtenga una referencia a su Switch y configure su OnCheckedChangeListener:
fuente
Para aquellos que usan Kotlin, puede configurar un oyente para un interruptor (en este caso con la ID
mySwitch
) de la siguiente manera:isChecked
es verdadero si el interruptor está actualmente marcado (activado) y falso en caso contrario.fuente
Defina su diseño XML:
Luego crea una actividad
======== Por debajo de API 14 use SwitchCompat =========
XML
Actividad
fuente
El diseño para el widget Switch es algo como esto.
En la clase Actividad, puede codificar de dos maneras. Depende del uso que pueda codificar.
Primera forma
Segunda forma
fuente
Puede usar DataBinding y ViewModel para el evento Switch Checked Change
fuente
hay dos maneras,
usando xml onclick view Agregar interruptor en XML como se muestra a continuación:
En su clase de actividad (por ejemplo, MainActivity.java)
Agregue Switch en XML como se muestra a continuación:
En su clase de actividad (por ejemplo, MainActivity.java)
fuente
Mi solución, usando a
SwitchCompat
y Kotlin. En mi situación, necesitaba reaccionar a un cambio solo si el usuario lo activaba a través de la interfaz de usuario. De hecho, mi interruptor reacciona a unaLiveData
, y esto hizo que tantosetOnClickListener
esetOnCheckedChangeListener
inutilizable.setOnClickListener
de hecho, reacciona correctamente a la interacción del usuario, pero no se activa si el usuario arrastra el pulgar por el interruptor.setOnCheckedChangeListener
en el otro extremo también se activa si el interruptor se alterna mediante programación (por ejemplo, por un observador). Ahora, en mi caso, el conmutador estaba presente en dos fragmentos, y asíRestoreInstanceState activaría en algunos casos el conmutador con un valor anterior sobrescribiendo el valor correcto.Entonces, miré el código de SwitchCompat y pude imitar su comportamiento con éxito al distinguir hacer clic y arrastrar, y lo usé para crear un escucha táctil personalizado que funciona como debería. Aquí vamos:
Cómo usarlo:
El oyente táctil real que acepta una lambda con el código para ejecutar:
En aras de la exhaustividad, así es como
switchstate
se veía el observador del estado (si lo tiene):fuente
En Kotlin:
fuente