数据绑定表达式未编译
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】:
尽管在我的数据标签中添加了<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 新手来说很难发现的错误
【讨论】:
不只是新手,这是一种常见的模式,我们现在必须处理。【参考方案3】:由于 POJO 对象位于库项目中,我遇到了完全相同的错误。
只需更新库的 build.gradle 以启用数据绑定以及在主项目中:
dataBinding
enabled = true
【讨论】:
以上是关于数据绑定表达式未编译的主要内容,如果未能解决你的问题,请参考以下文章
Android Databinding 数据绑定中经常出现的问题