Cómo realizar vinculación de datos de dos vías con un ToggleButton?
Tengo un campo de ObservableBoolean
en mi clase de actividad, que está ligado al atributo "checked" de mi ToggleButton
así:
android:checked="@{activity.editing}"
Esperaba que esto creara una relación bidireccional entre el botón y el booleano, pero sólo lleva cambios del campo al botón, no a la inversa. ¿Qué estoy haciendo mal, o esto no está en el ámbito de Android DataBinding
?
- Android IntentService proporciona datos a Actividad
- Abrir mi aplicación del esquema de URL en Android
- Excluir pocas URL de la vinculación
- Clase de enlace de datos no generada
- Excepción de ClassCast de Android al vincular al servicio
- Los vínculos profundos de Android no siguen el prefijo de ruta
- Abrir aplicación de Android a través de vínculo profundo si está instalado o volver a la web si no está instalado
- Android Databinding: "Referencias de métodos con '.' es obsoleto"
- Error de enlace de datos: los valores antiguos deben ser seguidos por nuevos valores. El parámetro 2 debe ser del mismo tipo que el parámetro 3
- Android - Valor de texto condicional utilizando Vinculación de datos
- La vinculación profunda no abre una aplicación nueva
- La aplicación de Android se abre desde los enlaces enviados por correo electrónico
- Deep linking y múltiples instancias de aplicación
Necesitas otro '=' para decirle a Android que quieres usar enlace de datos bidireccional:
android:checked="@={activity.editing}"
Usted puede encontrar más información sobre esto en el artículo wordpress de George Mount :
Vinculación de datos bidireccionales
Android no es inmune a la entrada de datos típica ya menudo es importante reflejar los cambios de la entrada del usuario de nuevo en el modelo. Por ejemplo, si los datos anteriores estaban en un formulario de contacto, sería bueno tener el texto editado de nuevo en el modelo sin tener que extraer los datos del EditText. Así es como lo haces:
<layout ...> <data> <variable type="com.example.myapp.User" name="user"/> </data> <RelativeLayout ...> <EditText android:text="@={user.firstName}" .../> </RelativeLayout> </layout>
Muy astuto, ¿eh? La única diferencia aquí es que la expresión está marcada con
@={}
lugar de@{}
. Se espera que la mayoría de los datos vinculantes seguirá siendo unidireccional y no queremos que todos los oyentes creados y viendo los cambios que nunca sucederá.
Además, ya existe un artículo de documentación sobre este tema.
No es necesario tomar ObservableBoolean
, puede realizar esta operación mediante el método getter-setter regular de la variable booleana. Al igual que en su clase de modelo
public class User{ private boolean checked; public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; } }
ToggleButton
enlace de dos vías en su ToggleButton
.
<ToggleButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="@={user.checked}"/>
Y obtener este valor mediante la utilización de variables de enlace.
binding.getUser().isChecked()
- Ocultar evento del teclado con la tecla ATRÁS
- Android actualiza programaticamente la aplicación cuando hay una nueva versión disponible