数据绑定表达式未编译

Jor*_*gen 63 data-binding android

我正在尝试新的数据绑定库.我有一个奇怪的问题,绑定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>
Run Code Online (Sandbox Code Playgroud)

编译时我得到以下消息:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
Run Code Online (Sandbox Code Playgroud)

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

当我删除android:visiblity声明时,一切都编译(并且有效!)

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

bwh*_*ite 169

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

<import type="android.view.View" />
Run Code Online (Sandbox Code Playgroud)

  • "错误明确指出"......如果你知道答案可能是清楚的.否则,它是一个非常简单的错误消息.读给我看,就像视图缺少用户定义的类型(无论那可能意味着什么). (8认同)
  • 应该,错误明确指出"视图"没有定义.导入`android.view.View`应该修复它,如果没有,请分享新的错误和更新的布局代码. (5认同)

ojo*_*ifu 31

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

这是我的数据标签:

<data>
        <import type="android.view.View" />
        <variable
            name="employee"
            type="com.example.Employee"/>
    </data>
Run Code Online (Sandbox Code Playgroud)

而我正在使用:

<TextView
        ...
        android:text="@{user.lastName}" />
Run Code Online (Sandbox Code Playgroud)

代替:

<TextView
        ...
        android:text="@{employee.lastName}" />
Run Code Online (Sandbox Code Playgroud)

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


Ben*_*oit 7

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

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

dataBinding {
    enabled = true
}
Run Code Online (Sandbox Code Playgroud)