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 ?

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() 
  • Android deeplink por sabor
  • La indexación de aplicaciones con signo comercial en Deep Link no funciona
  • Cómo iniciar una aplicación utilizando un deeplink en android
  • Enlace profundo en una aplicación mientras la aplicación ya se está ejecutando en segundo plano
  • Cómo graciosamente regresar a la página web cuando Deep Link no puede ser manejado por la aplicación
  • Enlace profundo de Android: utiliza el mismo enlace para la aplicación y la tienda de reproducción
  • Android Deep Linking problema! Cómo utilizar el esquema de URL personalizado myapp: // some_data
  • Deeplink filtro de intención a un pathPrefix en particular?
  • Facturación en aplicaciones de Android y servicio bindService
  • Android: enlace de datos no se actualiza
  • ¿Cómo Deep Link en un fragmento en una aplicación para Android. ¿Es posible?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.