数据绑定表达式未编译

Posted

技术标签:

【中文标题】数据绑定表达式未编译【英文标题】:Data binding expression not compiling 【发布时间】:2015-11-11 04:04:10 【问题描述】:

我正在试用新的数据绑定库。我有一个奇怪的问题,绑定 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:发现数据绑定错误。 ****/ 数据绑定错误 ****msg:标识符必须具有来自 XML 文件的用户定义类型。视图不见了

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

我没有看到我在这里缺少什么

【问题讨论】:

你能分享一下你的 EmailHeader 类吗? 【参考方案1】:

你还需要在data标签里面添加:

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

【讨论】:

应该,错误明确指出“视图”没有定义。导入android.view.View 应该可以修复它,如果没有,请分享新的错误和更新的布局代码。 我遇到了同样的问题,这对我有用。恕我直言,应该是公认的答案。谢谢白白! 我的处理程序遇到了同样的问题,我没有在 中声明。声明我的处理程序后,它得到了修复。 “错误清楚地表明”.. 如果您知道答案可能是什么,请清除。否则,这是一个非常书面的错误消息。读给我听,就像视图缺少用户定义的类型(无论这可能意味着什么)。 这为我修复了它。谢谢!【参考方案2】:

尽管在我的数据标签中添加了&lt;import type="android.view.View" /&gt;,但问题仍然存在。最后发现错误是由于我的变量名和我的 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 新手来说很难发现的错误

【讨论】:

不只是新手,这是一种常见的模式,我们现在必须处理。【参考方案3】:

由于 POJO 对象位于库项目中,我遇到了完全相同的错误。

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

dataBinding 
    enabled = true

【讨论】:

以上是关于数据绑定表达式未编译的主要内容,如果未能解决你的问题,请参考以下文章

Android官方文档之DataBinding库

Android Databinding 数据绑定中经常出现的问题

未解决的参考:将数据绑定导入 MainActivity 时的数据绑定

未找到绑定属性/某些数据未显示

未生成数据绑定类

vue框架基础学习