Note de mise à jour:
L'exemple ci-dessus fonctionne correctement , car la version 1.0-rc4 a résolu le problème du besoin de la variable inutile.
Question originale:
Je fais exactement comme il est décrit dans la documentation et cela ne fonctionne pas:
main.xml:
<layout xmlns:andr...
<data>
</data>
<include layout="@layout/buttons"></include>
....
boutons.xml:
<layout xmlns:andr...>
<data>
</data>
<Button
android:id="@+id/button"
...." />
MyActivity.java:
... binding = DataBindingUtil.inflate...
binding.button; ->cannot resolve symbol 'button'
comment obtenir le bouton?
java
android
data-binding
android-button
android-databinding
Kamil Nekanowicz
la source
la source
<include layout="@layout/buttons" android:id="@+id/buttons"/>
. Vous avez toujours besoin de l'identifiant pour qu'il produise un champ public pour vous afin que vous puissiez accéder à la vue des boutons.binding.{id of include tag}.button
place debinding.button
. Il m'a fallu un certain temps pour le comprendre.Exemple complet facile
Cet exemple permet de transmettre une valeur
<include
et d'accéder aux vues incluses dans le code.Étape 1
Tu as
layout_common.xml
, tu veux passerString
à la mise en page incluse.Vous créerez
String
variable dans la mise en page et renvoyer ceString
àTextView
.Étape 2
Incluez cette mise en page dans la mise en page parent. Donnez une
id
mise en page incluse pour que nous puissions l'utiliser dans la classe de liaison. Vous pouvez maintenant transmettre StringpassedText
à votre<include
balise.activity_main.xml
binding.includedLayout.textView
dans votre classe.Vous pouvez transmettre toutes les variables à la mise en page incluse comme ci-dessus.
Remarque Les deux mises en page (parent et incluses) doivent être
binding layout
entourées de<layout
la source
binding.includedLayout.button.setOnClickListener
serait l'alternative, mais que faire si je veux utiliser l'onClick
attribut en XML lui-même?OnClickListener
à la mise en page incluse. même vous pouvez tout passer en 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 n'inclus pas le code MainActivity parce que je veux juste passer la ressource de chaîne dans <include> et la laisser comme ça. Pourquoi est-il toujours vide?Une autre chose intéressante à ce sujet est que vous pouvez transmettre des variables à la mise en page importée à partir du classeur comme ceci:
la source
Vous pouvez faire fonctionner votre liaison sur votre inclusion en y ajoutant simplement un identifiant comme ceci:
la source
définissez simplement un identifiant pour votre mise en page d'inclusion
puis
BUTTONSBINDING
est res / layout / buttons.xmlmaintenant :
la source