実現したいこと
登場ファイル
- MainActivity.kt
- MainViewModel.kt
- activity_main.xml
- contents_main.xml
Activity(MainActivity.kt
)のレイアウトファイル(activity_main.xml
)に、include
タグで他のレイアウトファイル(contents_main.xml
)を読み込んでいる場合に、DataBinding
を用いてMainActivity.kt <=> MainViewModel.kt
間でバインドしたデータをcontents_main.xml
で利用したい。
解決法
contents_main.xml
で定義した変数をactivity_main.xml
のinclude
タグ内で渡す
contents_main.xml
<layout>
<data>
<variable
name="foo"
type="String"/>
</data>
…
</layout>
上記のように、contents_main.xml
に変数(foo
)を定義する。
activity_main.xml
<layout>
…
<data>
<variable
name="vm"
type="com.example.MainViewModel" />
</data>
<FrameLayout>
…
<include
android:id="@+id/contents"
layout="@layout/contents_main"
app:foo="@{vm.hoge}" /> /* ←ココ */
</FrameLayout>
</layout>
上記のように、contents_main.xml
で定義した変数(foo
)に、MainActivity.kt <=> MainViewModel.kt間
でバインドしたクラスを利用して値をinclude
タグの属性にセット(言い方合ってるかわかりません)する。
contents_main.xml
<layout>
<data>
<variable
name="foo"
type="String"/>
</data>
<TextView
…
android:text="@{foo}" />
…
</layout>
これで上記のようにcontents_main.xml
で使えるようになりました!