Googleドキュメントによると、変数は含まれているレイアウトからインクルードレイアウトのバインディングに渡される可能性がありますが、機能させることはできませんが、データバインディングエラーが発生します**** msg:Identifiersには、XMLファイルからのユーザー定義型が必要です。ハンドラーにはそれがありません。インクルードXMLは次のようになります。
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:bind="http://schemas.Android.com/apk/res-auto">
<data>
<import type="com.example.FocusChangeHandler"/>
<variable
name="handler"
type="FocusChangeHandler"/>
</data>
<!-- Some other views --->
<include
Android:id="@+id/inputs"
layout="@layout/input_fields"
bind:handler="@{handler}"/>
</layout>
そして、このように含まれているXML:
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android">
<EditText
Android:id="@+id/nameEdit"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:onFocusChange="@{handler.onFocusChange}"/>
</layout>
インクルードされたレイアウトから生成されたバインディングクラスを通じてビューを参照できますが、変数を渡しても機能しません。
ここでは、name.xmlとcontact.xmlの両方のレイアウトファイルにユーザー変数が必要です。
私はあなたがこれをあなたのインクルードされたレイアウトに持っているべきだと思います:
<data>
<variable name="handler"
type="FocusChangeHandler"/>
</data>
インクルードレイアウトに値を渡すための
<variable
を作成するだけです。似ている
app:passedText="@{@string/app_name}"
インクルードされたレイアウトにString
を渡したいように。 String
型の変数を作成します。 String
をTextView
に参照してください。たとえば、passedText
を作成しました。
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
>
<data>
// declare fields
<variable
name="passedText"
type="String"/>
</data>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@{passedText}"/> //set field to your view.
</layout>
次に、passedText
フィールドを<include
タグに追加します。
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
>
<include
layout="@layout/layout_common"
app:passedText="@{@string/app_name}" // here we pass any String
/>
</LinearLayout>
</layout>
両方のレイアウト(親とインクルード)はbinding layout
であり、<layout
でラップされている必要があります
ハードコードされた文字列の場合:
Android:label="@{`Test 123`}"