我在我的项目中使用数据绑定,当在我的 xml 绑定类中使用<layout>
和<data>
时不会生成。
例如,我有 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
在我的活动 / 片段它显示错误,类不可用。但包括<variable>
在我的 XML 文件后,它能够生成ActivityMainBinding
类。
Android Studio:2.1.3
类路径:com.android.tools.build:gradle:2.1.3
minSdkVersion16
targetSdkVersion24
buildToolsVersion24.0
我没有得到任何令人满意的答案。所以这里是我的数据绑定知识总结的提示。
解决 DataBinding 问题的提示
使现代化
要获得更准确的错误和建议,我强烈建议将 Android Studio 和 Gradle 插件版本更新为最新版本。因为在 AS 3.2 版本之后我不会遇到很多问题。
SeeLatest Android Studio,andLatest Gradle Plugin.Orignal 解决方案
阅读此答案后,您将不会卡住在数据绑定自动生成问题对于类和数据变量。
逐一检查这些要点,这些中的任何一个都可以使您的工作完成。第三点到最后一点真的很重要,所以不要错过它们。
1.检查数据绑定是否启用
您应该在build.gradle
中启用数据绑定。如果没有,则添加此和同步。
android {
...
buildFeatures {
dataBinding true
}
}
2.检查布局是否在绑定布局中转换
现在,如果你想生成数据绑定类,那么你应该包装xml layout
与数据绑定(<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>
同时检查绑定变量名称是否与视图模型类中一样正确
3.自动生成的绑定类名?
您的数据绑定类应该在创建绑定布局后生成。
如果您的布局名称是蛇形activity_main.xml
,那么数据绑定类将在骆驼形中生成,如ActivityMainBinding
。
4.看不到导入建议?
有时当您键入ActivityMai...
时,它不显示建议,在这种情况下手动导入。
import <yourpackage>databinding.ActivityMainBinding;
5.读取构建失败 Logcat
如果构建失败,则不会生成布局中的绑定类和新变量。因此,首先Make projectbyCtrl + F9 (Build & gt;Make project)。
如果构建失败,那么看看什么是错误,通常我们在布局字段中有错误。错误日志将指出问题的错误行号。
绑定可能失败导致一些愚蠢的错误,如语法错误或缺少导入。在这种情况下,您将获得 logcat 充满绑定类的错误。但是您应该阅读完整的 logcat到找到适当的问题。
6.最近关闭和打开项目
我总是这样做,因为它比Rebuild
/Make
项目花费的时间少得多。
从文件关闭项目 & gt;关闭项目
从最近重新打开
请注意,我更喜欢最近中的关闭并打开,因为它比重建 / 重新启动 IDE花费的时间少得多。
7.重建项目
如果仍然没有生成您的类。(当我们粘贴布局文件时,它会发生)。然后从Build> Rebuild
(Not Build or Make project)Rebuild Project。它将生成您的数据绑定类。(Rebuild 对我来说很神奇。)
8.拥有最新的 Android Studio
将 AS 更新为Android Studio 3.2后,我感觉数据绑定自动生成中修复了许多错误。所以你也应该有最新的 AS。
#<variables
的解决方案
<data>
<variable
name="item"
type="com.package.Model"/>
</data>
通常,当我们在布局中放置一个变量时,它会创建一个 getter 和 setter。我们可以使用binding.setItem(item);
和binding.getItem();
,但是如果您看不到这些方法,请阅读以下信息。
1.关闭和打开最近的项目
如果您在布局中创建了一个数据变量-<variable
,并且没有在数据绑定类中显示其 setter 和 getter,那么从最近的关闭并打开您的项目。
2.更改类型后清理项目
如果您更改了布局中某些<variable
的类型,并且 getter setter 类型未更改,则清理项目(Build> Clean Project
)
结束语
最后,如果仍然没有生成您的绑定类,那么我们拥有最强大的武器。-重新启动 Android Studio
首先,尝试只是重新启动,这总是在重新启动后生成我的绑定布局的变量。
如果它不起作用,则Invalidate Cache & amp;Restart。
这是我所做的一切来解决我的数据绑定错误。
DataBinding 类自动生成。
如果您的 xml 名称是 activity_test,则 Binding 类将是ActivityTestBinding。
但是,
dataBinding {
enabled = true
}
布局应该有布局作为根
<layout xmlns:android="http://schemas.android.com/apk/res/android">
</layout>
我有同样的问题。在阅读了 android sdk docs 之后,只有预期的文件名要创建,但如果它没有发生,就没有什么可做的。我注意到经过一些更多的研究,在将名称空间删除到布局元素后,如下所示(使用您的示例),它为我工作。
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data> </data>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</layout>

在我的情况下,Binding 类被生成并就位(但我认为不是)...但它不会自动将所述类的导入添加到活动 / 片段导入部分...
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(40条)