android - ¿Cómo se realiza el enlace de datos bidireccional con un ToggleButton?
data-binding android-databinding (2)
Tengo un campo ObservableBoolean
en mi clase de actividad, que está vinculado 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 solo lleva cambios del campo al botón, no al revés. ¿Qué estoy haciendo mal o no está dentro del alcance de Android DataBinding
?
No es necesario tomar ObservableBoolean
, puede realizar esta operación mediante el método regular getter-setter de la variable booleana. Me gusta esto en tu clase de modelo
public class User{
private boolean checked;
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
}
realice un enlace bidireccional en su ToggleButton
.
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="@={user.checked}"/>
y busca este valor usando la variable de enlace.
binding.getUser().isChecked()
Necesita otro ''='' para decirle a Android que desea utilizar el enlace de datos bidireccional:
android:checked="@={activity.editing}"
Puede encontrar más información sobre esto en el artículo de wordpress de George Mount :
Enlace de datos bidireccional
Android no es inmune a la entrada de datos típica y, a menudo, es importante reflejar los cambios de la entrada del usuario en el modelo. Por ejemplo, si los datos anteriores estaban en un formulario de contacto, sería bueno tener el texto editado nuevamente en el modelo sin tener que extraer los datos de 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 ingenioso, ¿eh? La única diferencia aquí es que la expresión está marcada con
@={}
lugar de@{}
. Se espera que la mayoría de los enlaces de datos continúen siendo unidireccionales y no queremos tener todos esos oyentes creados y vigilando por cambios que nunca sucederán.