DataBindingでバインドした変数を、includeタグで読み込んでいる他のレイアウトで利用したい
実現したいこと
登場ファイル
- 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
で定義した変数をactivity_main.xml
のinclude
タグ内で渡す<layout>
<data>
<variable
name="foo"
type="String"/>
</data>
…
</layout>
上記のように、contents_main.xml
に変数(foo
)を定義する。
<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
タグの属性にセット(言い方合ってるかわかりません)する。
<layout>
<data>
<variable
name="foo"
type="String"/>
</data>
<TextView
…
android:text="@{foo}" />
…
</layout>
これで上記のようにcontents_main.xml
で使えるようになりました!
参考
Author And Source
この問題について(DataBindingでバインドした変数を、includeタグで読み込んでいる他のレイアウトで利用したい), 我々は、より多くの情報をここで見つけました https://qiita.com/yasuX/items/39455b7ae610a984de53著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .