1. ホーム
  2. java

[解決済み] includeタグを用いたAndroidのデータバインディング

2022-04-25 21:33:48

質問

更新情報です。

上記の例 正常に動作する というのは、リリース1.0-rc4 修正済み 不要な変数が必要な問題。

元の質問

に書かれているとおりにしています。 ドキュメント と表示され、動作しません。

main.xml。

<layout xmlns:andr...
    <data>
    </data>
       <include layout="@layout/buttons"></include>
....

buttons.xml。

<layout xmlns:andr...>
    <data>
    </data>
    <Button
        android:id="@+id/button"
        ...." />

MyActivity.java。

 ... binding = DataBindingUtil.inflate...
binding.button; ->cannot resolve symbol 'button'

ボタンを取得するには?

解決するには?

問題は、インクルードされたレイアウトがデータバインドされたレイアウトとして認識されていないことです。これをデータバインドレイアウトとして動作させるには、変数を渡す必要があります。

buttons.xml。

<layout xmlns:andr...>
  <data>
    <variable name="foo" type="int"/>
  </data>
  <Button
    android:id="@+id/button"
    ...." />

main.xml。

<layout xmlns:andr...
...
   <include layout="@layout/buttons"
            android:id="@+id/buttons"
            app:foo="@{1}"/>
....

すると、buttonsフィールドを通じて間接的にボタンにアクセスできるようになります。

MainBinding binding = MainBinding.inflate(getLayoutInflater());
binding.buttons.button

1.0-rc4 (リリースされたばかり) では、この変数は不要になりました。簡略化すると

buttons.xml。

<layout xmlns:andr...>
  <Button
    android:id="@+id/button"
    ...." />

main.xml。

<layout xmlns:andr...
...
   <include layout="@layout/buttons"
            android:id="@+id/buttons"/>
....