31

Google のドキュメントによると、含まれているレイアウトから含まれているレイアウトのバインディングに変数が渡される可能性がありますが、それを機能させることはできませんが、データ バインディング エラーが発生します ****msg:Identifiers must have user defined types from the XML file. ハンドラーにはそれがありません。インクルード 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>

含まれているレイアウトから生成されたバインディング クラスを介してビューを参照できますが、変数を渡すだけでは機能しません。

4

3 に答える 3

22

<variable含まれているレイアウトに値を渡すために作成するだけです。

お気に入りapp:passedText="@{@string/app_name}"

String含まれているレイアウトに渡したいように。type の変数を作成します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

于 2018-08-01T12:32:04.757 に答える
14

ドキュメントは指定します

ここでは、name.xml と contact.xml レイアウト ファイルの両方にユーザー変数が必要です。

含まれているレイアウトにこれが必要だと思います:

    <data>
           <variable name="handler"
                     type="FocusChangeHandler"/>
    </data>
于 2016-02-18T21:38:13.303 に答える
8

ハードコードされた文字列の場合:

 android:label="@{`Test 123`}"
于 2019-01-30T21:49:03.663 に答える