Update-Hinweis:
Das obige Beispiel funktioniert ordnungsgemäß , da Release 1.0-rc4 das Problem behoben hat , dass die unnötige Variable benötigt wird.
Ursprüngliche Frage:
Ich mache genau das, was in der Dokumentation beschrieben ist und es funktioniert nicht:
main.xml:
<layout xmlns:andr...
<data>
</data>
<include layout="@layout/buttons"></include>
....
button.xml:
<layout xmlns:andr...>
<data>
</data>
<Button
android:id="@+id/button"
...." />
MyActivity.java:
... binding = DataBindingUtil.inflate...
binding.button; ->cannot resolve symbol 'button'
Wie bekomme ich einen Knopf?
java
android
data-binding
android-button
android-databinding
Kamil Nekanowicz
quelle
quelle
<include layout="@layout/buttons" android:id="@+id/buttons"/>
. Sie benötigen die ID weiterhin, damit ein öffentliches Feld für Sie erstellt wird, damit Sie auf die Schaltflächenansicht zugreifen können.binding.{id of include tag}.button
anstelle von ausführen müssenbinding.button
. Ich habe eine Weile gebraucht, um es herauszufinden.Einfaches vollständiges Beispiel
In diesem Beispiel können Sie einen Wert an
<include
eingeschlossene Ansichten im Code übergeben und auf diese zugreifen.Schritt 1
Sie haben
layout_common.xml
wollen passierenString
zu enthalten Layout.Sie erstellen
String
Variable im Layout und beziehen sich dieseString
aufTextView
.Schritt 2
Fügen Sie dieses Layout dem übergeordneten Layout hinzu. Geben Sie ein
id
eingeschlossenes Layout an, damit wir es in der Bindungsklasse verwenden können. Jetzt können Sie StringpassedText
an Ihr<include
Tag übergeben.activity_main.xml
binding.includedLayout.textView
in Ihrer Klasse verwenden.Sie können beliebige Variablen wie oben beschrieben an das enthaltene Layout übergeben.
Hinweis Beide Layouts (übergeordnet und enthalten) sollten mit
binding layout
umbrochen werden<layout
quelle
binding.includedLayout.button.setOnClickListener
die Alternative wäre, aber was ist, wenn ich einonClick
Attribut in XML verwenden möchte selbst?OnClickListener
zum enthaltenen Layout übergehen . Auch Sie können alles verbindlich übergeben. Überprüfen Sie diese Antwort. Wenn Sie weitere Hilfe benötigen, lassen Sie es mich wissen. stackoverflow.com/a/51722829/6891563passedText
. Der einzige Unterschied besteht darin, dass ich den MainActivity-Code nicht einbinde, weil ich nur die Zeichenfolgenressource in <include> übergeben und so belassen möchte. Warum ist es aber immer leer?Eine andere interessante Sache dabei ist, dass Sie Variablen aus dem Ordner wie folgt in das importierte Layout einfügen können:
quelle
Sie können festlegen, dass Ihre Bindung an Ihrem Include funktioniert, indem Sie einfach eine ID hinzufügen:
quelle
Legen Sie einfach eine ID für Ihr Include-Layout fest
dann
BUTTONSBINDING
ist res / layout / button.xmljetzt :
quelle