Comment effectuer les deux sens de la liaison de données avec un ToggleButton?
J'ai un ObservableBoolean
champ dans ma classe d'activité, qui est lié à la "vérifié" attribut de mon ToggleButton
comme suit:
android:checked="@{activity.editing}"
J'espérais que cela permettrait de créer une relation à double sens entre le bouton et le booléen, mais il transporte uniquement des changements sur le terrain pour le bouton, et non l'inverse. Ce que je fais mal, ou n'est-ce pas dans le champ d'application de Android DataBinding
?
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'un autre '=' pour dire Android que vous souhaitez utiliser Deux Voies de liaison de données:
Vous pouvez trouver plus d'informations sur ce dans le wordpress de l'article de George Mont:
Pas besoin de prendre
ObservableBoolean
, vous pouvez effectuer cette opération par la régularité de la méthode getter /setter de la méthode de la variable booléenne. Comme ceci dans votre modèle de classeeffectuer la liaison bidirectionnelle sur votre
ToggleButton
.et récupérer cette valeur en utilisant la liaison variable.
@Bindable
annotation dans votreisChecked()
et lanotifyPropertyChanged(BR.checked)
dans votre setter.Voici un exemple simple de 2 voies de la liaison de données à l'aide d'un Commutateur, qui a également la propriété Checked, comme le ToggleButton.
Item.java:
MainActivity.java:
activity_main.xml:
construire.gradle:
Source de documentation: https://developer.android.com/topic/libraries/data-binding/index.html
Ici sont des moyens pour définir
OnCheckedChangeListener
de liaison de données:(1) Défini par méthode d'expression
Dans la mise en page
De L'Activité
(2) Défini par expression lambda appel de méthode et de
De L'Activité
(3) Passez
OnCheckedChangeListener
classe anonyme à dispositionDe L'Activité
(4) Passez
OnCheckedChangeListener
par référenceActivité
Cela ne marchera jamais
Parce que vous ne pouvez pas définir de deux de rappel sur un composant. Un rappel est déjà définie par une liaison bidirectionnelle, de sorte que votre rappel ne fonctionne pas.
Case CompoundButtonBindingAdapter de la classe pour voir comment changer de Liaison fonctionne.