首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未生成数据绑定类

未生成数据绑定类
EN

Stack Overflow用户
提问于 2016-09-14 13:33:12
回答 33查看 83.5K关注 0票数 120

当在我的xml Binding类中使用<layout><data>时,我在我的项目中使用数据绑定。

例如,我有activity_main.xml

代码语言:javascript
运行
复制
<?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

EN

回答 33

Stack Overflow用户

回答已采纳

发布于 2018-07-29 19:17:27

我没有得到令人满意的答案。下面是我对数据绑定知识的总结。

解决DataBinding问题的提示

更新

为了获得更准确的errors和suggestions,我强烈建议将Android Studio和Gradle插件的版本更新到最新。因为在AS 3.2版本之后,我不会面临太多问题。

请参见Latest Android StudioLatest Gradle Plugin

原始解决方案

阅读此答案后,您的将不会在类和数据变量的数据绑定自动生成问题中卡住

逐一检查这些要点。其中的任何一个都可以让你的工作完成。倒数第三点非常重要,所以不要错过它们。

1.检查数据绑定是否启用

您应该在build.gradle中启用数据绑定。如果不是,则添加此和同步

代码语言:javascript
运行
复制
android {
    ...
    buildFeatures {
        dataBinding true
    }
}

2.检查布局已转换为绑定布局

现在,如果您希望生成数据绑定类,那么您应该使用数据绑定标记( (<layout data binding tag)进行包装。就像这样。

代码语言:javascript
运行
复制
<?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,在这种情况下,

代码语言:javascript
运行
复制
import <yourpackage>databinding.ActivityMainBinding;

5.阅读构建失败日志

如果构建失败,将不会在布局中生成绑定类和新变量。因此,首先通过CtrlCtrl键和F9 (Build > Make )来创建项目。

  • 如果构建失败,那么看看什么是错误,通常我们在布局字段中会有错误。错误日志将指出错误行号,其中包含issue.
  • Binding可能会失败并导致一些愚蠢的错误,如语法错误或缺少导入。在这种情况下,您将得到充满绑定类错误的logcat。但您应该阅读完整的logcat to find issue.

(找到合适的日志

6.从最近关闭和打开项目

我总是这样做,因为它比Rebuild / Make项目花费的时间要少得多。

  • 从文件关闭项目>关闭项目
  • 再次从最近的

打开

请注意,我更喜欢从最近的中关闭和打开,因为它比Rebuild/ Restart 花费的时间要少得多。

7.重建项目

如果仍然没有生成您的类。(有时当我们粘贴布局文件时,它就会发生)。然后从Build> Rebuild重新构建项目(而不是Build或Make项目)。它将生成您的数据绑定类。(Rebuild为我变魔术了。)

8.拥有最新的Android Studio

在更新了Android Studio 3.2之后,我感觉数据绑定自动生成中的许多错误都被修复了。所以你也应该有最新的AS。

# <variables解决方案

代码语言:javascript
运行
复制
<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.

  • If之后生成我的绑定布局的变量它不工作然后&无效

这就是我为解决数据绑定错误所做的全部工作。如果你有任何进一步的问题,你可以在这里发表评论。

票数 298
EN

Stack Overflow用户

发布于 2017-10-04 17:34:51

自动生成的DataBinding类。

如果您的xml名称为activity_test,则绑定类将为ActivityTestBinding.

但,

代码语言:javascript
运行
复制
dataBinding {
        enabled = true
    }

布局应以布局为根

代码语言:javascript
运行
复制
<layout xmlns:android="http://schemas.android.com/apk/res/android">
</layout>
票数 29
EN

Stack Overflow用户

发布于 2017-06-23 02:33:52

我也有同样的问题。在阅读android sdk文档后,只有预期的文件名需要创建,但没有说明如果没有创建,该如何处理。经过进一步的研究后,我注意到在像下面这样(使用您的示例)删除了布局元素的名称空间之后,它对我起作用了。

代码语言:javascript
运行
复制
    <?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> 
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39483094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档