Android Liaison de Données à l'aide de tag
Mise à jour remarque:
L'exemple ci-dessus fonctionne correctement, parce que la version 1.0 rc4 fixe la question du besoin de l'inutile variable.
Question d'origine:
Je fais exactement comme il est décrit dans le la documentation et il ne fonctionne pas:
main.xml:
<layout xmlns:andr...
<data>
</data>
<include layout="@layout/buttons"></include>
....
buttons.xml:
<layout xmlns:andr...>
<data>
</data>
<Button
android:id="@+id/button"
...." />
MyActivity.java:
... binding = DataBindingUtil.inflate...
binding.button; ->cannot resolve symbol 'button'
comment obtenir bouton?
Vous devez vous connecter pour publier un commentaire.
Le problème est que le inclus de mise en page n'est pas considéré comme une liaison de données de mise en page. Pour en faire un, vous avez besoin pour passer une variable:
buttons.xml:
main.xml:
Ensuite, vous pouvez accéder à des boutons indirectement par le biais des boutons de champ:
De 1.0 rc4 (vient de sortir), vous n'avez plus besoin de la variable. Vous pouvez simplifier ainsi:
buttons.xml:
main.xml:
<include layout="@layout/buttons" android:id="@+id/buttons"/>
. Vous avez encore besoin de l'id de sorte qu'il va produire un champ public pour vous afin que vous pouvez accéder au Bouton Afficher.android:onClick="@{myObj.clickHandler}"
binding.{id of include tag}.button
au lieu debinding.button
. M'a fallu un certain temps pour comprendre.android:text="{MyClass.getUser().name}"
?<import type="com.example.MyClass"/>
dans ledata
section ou en utilisant le nom de classe entièrement qualifié dans l'expression:android:text="@{com.example.MyClass.user.name}"
<include layout="..." app:param1="@{1}" app:param2="@{2}"/>
oùparam1
etparam2
sont des variables inclus dans votre mise en page.Facile Exemple Complet
Cet exemple permet le passage d'une valeur à
<include
& accès inclus vues dans le code.Étape 1
Vous avez
layout_common.xml
, souhaitez passerString
de inclus de mise en page.Vous permettra de créer
String
variable dans la mise en page et la renvoyer cetteString
àTextView
.Étape 2
Inclure cette disposition à la mère de mise en page. Donner un
id
inclus: mise en page, de sorte que nous pouvons l'utiliser dans la liaison de la classe. Maintenant, vous pouvez passer ChaînepassedText
à votre<include
tag.activity_main.xml
binding.includedLayout.textView
dans votre classe.Vous pouvez passer toutes les variables incluses mise en page comme ci-dessus.
Note les Deux mises en page (parent & inclus) doit être
binding layout
, enveloppé avec<layout
binding.includedLayout.button.setOnClickListener
serait l'alternative,mais que si je veux utiliseronClick
attribut XML lui-même ?OnClickListener
de inclus de mise en page. vous pouvez même passer quoi que ce soit dans la liaison. Cochez cette réponse, si vous avez besoin de plus d'aide, faites le moi savoir. stackoverflow.com/a/51722829/6891563passedText
. La seule différence est que je ne comprend pas le MainActivity code parce que j'ai juste envie de passer à la ressource de chaîne dans <include>, et le laisser comme cela. Pourquoi est-il toujours vide si?Une autre chose intéressante est que vous pouvez pas les variables importées de mise en page du classeur comme ceci: