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}}
我能够通过生成的绑定类引用包含布局的视图,但传递变量不起作用。
答案 0 :(得分:7)
这里,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