LoginSignup
13
8

More than 3 years have passed since last update.

DataBindingでバインドした変数を、includeタグで読み込んでいる他のレイアウトで利用したい

Last updated at Posted at 2019-06-14

実現したいこと

DataBindingイメージ.png

登場ファイル

  • 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.xmlincludeタグ内で渡す

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で使えるようになりました!

参考

Data Binding Library
DataBindingのあれこれ

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8