当在我的xml Binding类中使用<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,它会显示错误,即类不可用。但是在我的xml文件中包含<variable>之后,它就能够生成ActivityMainBinding类了。
安卓工作室:2.1.3
类路径:com.android.tools.build:gradle:2.1.3
minSdkVersion 16
targetSdkVersion 24
buildToolsVersion 24.0.0
发布于 2018-07-29 19:17:27
我没有得到令人满意的答案。下面是我对数据绑定知识的总结。
解决DataBinding问题的提示
更新
为了获得更准确的errors和suggestions,我强烈建议将Android Studio和Gradle插件的版本更新到最新。因为在AS 3.2版本之后,我不会面临太多问题。
请参见Latest Android Studio和Latest Gradle Plugin。
原始解决方案
阅读此答案后,您的将不会在类和数据变量的数据绑定自动生成问题中卡住。
逐一检查这些要点。其中的任何一个都可以让你的工作完成。倒数第三点非常重要,所以不要错过它们。
1.检查数据绑定是否启用
您应该在build.gradle中启用数据绑定。如果不是,则添加此和同步。
android {
...
buildFeatures {
dataBinding true
}
}2.检查布局已转换为绑定布局
现在,如果您希望生成数据绑定类,那么您应该使用数据绑定标记( (<layout data binding tag)进行包装。就像这样。
<?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.自动生成绑定类名?
您的数据绑定类应在创建绑定布局后生成。
如果您的布局名称是snake case
activity_main.xml,那么数据绑定类将在驼峰大小写中生成,如ActivityMainBinding。
4.看不到导入建议?
有时,当您键入ActivityMai...,时,它不会显示suggestion,在这种情况下,。
import <yourpackage>databinding.ActivityMainBinding;5.阅读构建失败日志
如果构建失败,将不会在布局中生成绑定类和新变量。因此,首先通过CtrlCtrl键和F9 (Build > Make )来创建项目。
(找到合适的日志
6.从最近关闭和打开项目
我总是这样做,因为它比Rebuild / Make项目花费的时间要少得多。
打开
请注意,我更喜欢从最近的中关闭和打开,因为它比Rebuild/ Restart 花费的时间要少得多。
7.重建项目
如果仍然没有生成您的类。(有时当我们粘贴布局文件时,它就会发生)。然后从Build> Rebuild重新构建项目(而不是Build或Make项目)。它将生成您的数据绑定类。(Rebuild为我变魔术了。)
8.拥有最新的Android Studio
在更新了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,那么Close Open from Recent您的项目。
2.更改类型后清理项目
如果您更改了布局中某些<variable的类型,并且getter setter类型没有更改,则清理项目setter
最后一句话
最后,如果您的绑定类仍然没有生成,那么我们就有了最强大的武器。-重启Android Studio
先尝试无效缓存,然后重新启动,这总是在restart.
这就是我为解决数据绑定错误所做的全部工作。如果你有任何进一步的问题,你可以在这里发表评论。
发布于 2017-10-04 17:34:51
自动生成的DataBinding类。
如果您的xml名称为activity_test,则绑定类将为ActivityTestBinding.
但,
dataBinding {
enabled = true
}布局应以布局为根
<layout xmlns:android="http://schemas.android.com/apk/res/android">
</layout>发布于 2017-06-23 02:33:52
我也有同样的问题。在阅读android sdk文档后,只有预期的文件名需要创建,但没有说明如果没有创建,该如何处理。经过进一步的研究后,我注意到在像下面这样(使用您的示例)删除了布局元素的名称空间之后,它对我起作用了。
<?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> https://stackoverflow.com/questions/39483094
复制相似问题