我在我的项目中使用数据绑定(bind),当使用 <layout>
时和 <data>
在我的 xml 绑定(bind)类中没有生成。
例如我有activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data> </data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</layout>
现在,如果我正在写
ActivityMainBinding
在我的 Activity/fragment 中,它显示类不可用的错误。但在包括 <variable>
之后在我的 xml 文件中,它能够生成 ActivityMainBinding
类。安卓工作室: 2.1.3
类路径: com.android.tools.build:gradle:2.1.3
minSdkVersion 16
targetSdkVersion 24
构建工具版本 24.0.0
最佳答案
我没有得到任何令人满意的答案。所以这里的提示是我的数据绑定(bind)知识的总结。
解决数据绑定(bind)问题的技巧
更新
获取更准确的错误和 建议 ,我强烈建议将 Android Studio 和 Gradle 插件版本更新到最新。因为在 AS 3.2 版本之后我没有面临很多问题。
见 Latest Android Studio , 和 Latest Gradle Plugin .
原始解决方案
After reading this answer, you will not get stuck in data binding auto generation issues for both Classes and Data Variables.
一一检查这些点。这些中的任何一个都可以完成您的工作。 最后的第 3 点非常重要,所以不要错过它们。
1. 检查是否启用数据绑定(bind)
你应该有 启用数据绑定(bind) 在
build.gradle
.如果没有,那么添加这个和 同步 .android {
...
buildFeatures {
dataBinding true
}
}
2.检查布局转换成绑定(bind)布局现在,如果您想要生成数据绑定(bind)类,那么您应该 包装
xml layout
带数据绑定(bind) ( <layout
标签)。像这样的东西。<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.constraint.ConstraintLayout>
</layout>
与此一起检查绑定(bind)变量名称是否与 View 模型类中的一样正确3. 自动生成的 Binding 类名?
您的数据绑定(bind)类应该在创建绑定(bind)布局后生成。
If your layout name is in snake case
activity_main.xml
then data binding class will be generated in camel case likeActivityMainBinding
.
4. 看不到导入建议?
有时当您输入 时
ActivityMai...
,那么它 不显示建议 ,在这种情况下 手动导入 .import <yourpackage>databinding.ActivityMainBinding;
5.读取构建失败Logcat如果构建失败,将不会生成布局中的绑定(bind)类和新变量。所以先制作项目 来自 Ctrl + F9(构建 > 制作项目) .
6.关闭和打开最近的项目
我总是这样做,因为它比
Rebuild
花费的时间少得多。/Make
项目。请注意 我更喜欢 关闭和打开 来自 近期 因为它比 花费的时间少得多重建/重启IDE .
7. 重建项目
如果仍然没有生成您的类。 (有时当我们粘贴布局文件时,它就会发生)。然后重建项目来自
Build> Rebuild
(不是构建或制作项目)。它将生成您的数据绑定(bind)类。 ( 重建对我来说很神奇。 )8.拥有最新的Android Studio
将 AS 更新为 Android Studio 3.2 后,我觉得在数据绑定(bind)自动生成中修复了许多错误。所以你也应该有最新的AS。
#解决方案
<variables
<data>
<variable
name="item"
type="com.package.Model"/>
</data>
通常,当我们在布局中放置一个变量时,它会创建它的 getter 和 setter。我们可以使用 binding.setItem(item);
和 binding.getItem();
,但如果您看不到这些方法,请阅读以下信息。1.关闭并打开最近的项目
如果您创建了数据变量 -
<variable
在您的布局和它 不显示其 setter 和 getter 在数据绑定(bind)类中,然后 从最近关闭和打开 你的项目。2.更改类型后清理项目
如果你改变了一些的类型
<variable
在您的布局中,getter setter 类型不会改变然后 清洁项目 ( Build> Clean Project
) 最后的话
最后,如果您的绑定(bind)类仍未生成,那么我们就有了最强大的武器。 - 重启 Android Studio
这就是我为解决数据绑定(bind)错误所做的一切。如果您有任何进一步的问题,您可以在这里发表评论。
关于android - 未生成数据绑定(bind)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39483094/