数据绑定表达式未编译

时间:2015-08-18 09:33:02

标签: android data-binding

我正在尝试新的数据绑定库。我有一个奇怪的问题,即visibility属性的绑定没有编译。

这是xml文件的简化版本:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

    <variable
        name="header"
        type="com.example.EmailHeader" />
    </data>

    <RelativeLayout ... >

        <TextView
            ...
            android:text="@{header.senderName ?? header.senderAddress}"
            android:visibility="@{header.hasAttachment ? View.VISIBLE : View.INVISIBLE}" />

    </RelativeLayout>
</layout>

编译时收到以下消息:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
  

java.lang.RuntimeException:发现数据绑定错误。     **** /数据绑定错误****消息:标识符必须具有XML文件中的用户定义类型。视图缺少它

当我删除android:visiblity声明时,所有内容都会编译(并且有效!)。

我看不到我在这里缺少的东西

3 个答案:

答案 0 :(得分:161)

在数据标签内部,您还需要添加:

<import type="android.view.View" />

答案 1 :(得分:28)

尽管在我的数据标记中添加了<import type="android.view.View" />,问题仍然存在。最后发现错误是由于我的变量名称和我的POJO类对象不匹配造成的。

这是我的数据标记:

<data>
        <import type="android.view.View" />
        <variable
            name="employee"
            type="com.example.Employee"/>
    </data>

我正在使用:

<TextView
        ...
        android:text="@{user.lastName}" />

而不是:

<TextView
        ...
        android:text="@{employee.lastName}" />

从文档中复制代码后忘记更改它。 注意这样的错误,这些错误很难被新手发现到DataBinding

答案 2 :(得分:7)

我遇到了由POJO对象在库项目中引起的完全相同的错误。

只需更新库的build.gradle即可启用数据绑定以及主项目:

dataBinding {
    enabled = true
}