Android数据绑定:如何传递变量以包含布局

时间:2016-02-09 08:37:15

标签: android-databinding

Google文档说,变量可能会从包含布局传递到包含布局的绑定中,但我无法使其工作但是会出现数据绑定错误**** msg:标识符必须具有XML文件中的用户定义类型。处理程序缺少它。 包含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>

包含的XML就像这样:

{{1}}

我能够通过生成的绑定类引用包含布局的视图,但传递变量不起作用。

3 个答案:

答案 0 :(得分:7)

documentation指定

  

这里,name.xml和。中都必须有一个用户变量   contact.xml布局文件

我认为你应该在你所包含的布局中有这个:

    <data>
           <variable name="handler"
                     type="FocusChangeHandler"/>
    </data>

答案 1 :(得分:5)

  

只需创建<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包裹

答案 2 :(得分:1)

对于硬编码的字符串:

--release