Uwaga dotycząca aktualizacji:
Powyższy przykład działa poprawnie , ponieważ poprawiono wydanie 1.0-rc4 problem z potrzebą niepotrzebnej zmiennej.
Oryginalne pytanie:
Robię dokładnie tak, jak jest to opisane w dokumentacji i nie działa:
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'
jak zdobyć guzik?
java
android
data-binding
android-button
android-databinding
Kamil Nekanowicz
źródło
źródło
<include layout="@layout/buttons" android:id="@+id/buttons"/>
. Nadal potrzebujesz identyfikatora, aby utworzył dla Ciebie pole publiczne, abyś mógł uzyskać dostęp do widoku przycisku.binding.{id of include tag}.button
zamiastbinding.button
. Zajęło mi trochę czasu, zanim to rozgryzłem.Prosty kompletny przykład
Ten przykład pomaga przekazać wartość do
<include
i uzyskać dostęp do widoków uwzględnionych w kodzie.Krok 1
Masz
layout_common.xml
, chcesz przejśćString
do zawartego układu.Utworzysz
String
zmienną w układzie i odniesiesz toString
doTextView
.Krok 2
Dołącz ten układ do układu nadrzędnego. Podaj
id
dołączony układ, abyśmy mogli go użyć w klasie bindującej. Teraz możesz przekazać StringpassedText
do swojego<include
tagu.activity_main.xml
binding.includedLayout.textView
w swojej klasie.Możesz przekazać dowolne zmienne do dołączonego układu, jak powyżej.
Uwaga Oba układy (nadrzędny i dołączony) powinny być
binding layout
opakowane<layout
źródło
binding.includedLayout.button.setOnClickListener
byłoby to alternatywą, ale co jeśli chcę użyćonClick
atrybutu w XML samo ?OnClickListener
do dołączonego układu. nawet ty możesz przekazać wszystko w wiązaniu. Sprawdź tę odpowiedź, jeśli potrzebujesz więcej pomocy, daj mi znać. stackoverflow.com/a/51722829/6891563passedText
. Jedyną różnicą jest to, że nie dołączam kodu MainActivity, ponieważ chcę tylko przekazać zasób ciągu w <include> i tak to zostawić. Dlaczego jest zawsze puste?Inną interesującą rzeczą jest to, że możesz przekazywać zmienne do zaimportowanego układu z segregatora w następujący sposób:
źródło
Możesz sprawić, by bind działał na twoim dołączeniu, po prostu dodając do niego identyfikator w następujący sposób:
źródło
po prostu ustaw identyfikator dla swojego układu dołączania
następnie
BUTTONSBINDING
to res / layout / buttons.xmlteraz :
źródło