実現したいこと
登場ファイル
- 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で使えるようになりました!
