Примечание к обновлению:
Приведенный выше пример работает правильно , поскольку в выпуске 1.0-rc4 устранена проблема необходимости в ненужной переменной.
Исходный вопрос:
Я делаю именно так, как описано в документации, и это не работает:
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'
как получить кнопку?
java
android
data-binding
android-button
android-databinding
Камил Неканович
источник
источник
<include layout="@layout/buttons" android:id="@+id/buttons"/>
. Вам по-прежнему нужен идентификатор, чтобы он создавал для вас общедоступное поле, чтобы вы могли получить доступ к представлению кнопок.binding.{id of include tag}.button
вместоbinding.button
. Мне потребовалось время, чтобы понять это.Простой полный пример
Этот пример помогает передать значение
<include
и получить доступ к включенным представлениям в коде.Шаг 1
У вас есть
layout_common.xml
, хотите перейтиString
к включенному макету.Вы создадите
String
переменную в макете и обратитесьString
к нейTextView
.Шаг 2
Включить этот макет в родительский макет. Дайте
id
включенный макет, чтобы мы могли использовать его в классе привязки. Теперь вы можете передать StringpassedText
в свой<include
тег.activity_main.xml
binding.includedLayout.textView
в своем классе.Вы можете передать любые переменные во включенный макет, как указано выше.
Примечание. Оба макета (родительский и включенный) должны быть
binding layout
обернуты<layout
источник
binding.includedLayout.button.setOnClickListener
было бы альтернативой, но что, если я хочу использоватьonClick
атрибут в XML сам ?OnClickListener
к включенному макету. даже можно передать что угодно в привязке. Отметьте этот ответ, если вам нужна дополнительная помощь, дайте мне знать. stackoverflow.com/a/51722829/6891563passedText
. Единственная разница в том, что я не включаю код MainActivity, потому что я просто хочу передать строковый ресурс в <include> и оставить его таким. Но почему он всегда пустой?Еще одна интересная вещь в том, что вы можете передать переменные в импортированный макет из подшивки следующим образом:
источник
Вы можете заставить свою привязку работать с вашим включением, просто добавив к нему идентификатор, например:
источник
просто установите идентификатор для вашего включаемого макета
затем
BUTTONSBINDING
это res / layout / buttons.xmlсейчас :
источник