数据绑定表达式未编译

问题描述 投票:59回答:3

我正在尝试新的数据绑定库。我有一个奇怪的问题,绑定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声明时,一切都编译(并且有效!)

我不知道我在这里缺少什么

android data-binding
3个回答
160
投票

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

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

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的新手


7
投票

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

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

dataBinding {
    enabled = true
}
© www.soinside.com 2019 - 2024. All rights reserved.