Простой полный пример
Просто установите id
включенный макет и используйте binding.includedLayout.anyView
.
Этот пример помогает передать значение <include
и получить доступ к включенным представлениям в коде.
Шаг 1
У вас есть layout_common.xml
, хотите перейти String
к включенному макету.
Вы создадите String
переменную в макете и обратитесь String
к ней TextView
.
<data>
// declare fields
<variable
name="passedText"
type="String"/>
</data>
<TextView
android:id="@+id/textView"
...
android:text="@{passedText}"/> //set field to your view.
Шаг 2
Включить этот макет в родительский макет. Дайте id
включенный макет, чтобы мы могли использовать его в классе привязки. Теперь вы можете передать String passedText
в свой <include
тег.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
..
>
<include
android:id="@+id/includedLayout"
layout="@layout/layout_common"
app:passedText="@{@string/app_name}" // here we pass any String
/>
</LinearLayout>
</layout>
- Вы можете использовать сейчас
binding.includedLayout.textView
в своем классе.
Вы можете передать любые переменные во включенный макет, как указано выше.
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.includedLayout.textView.setText("text");
Примечание. Оба макета (родительский и включенный) должны быть binding layout
обернуты<layout
<include layout="@layout/buttons" android:id="@+id/buttons"/>
. Вам по-прежнему нужен идентификатор, чтобы он создавал для вас общедоступное поле, чтобы вы могли получить доступ к представлению кнопок.