未生成数据绑定类

新手上路,请多包涵

我在我的项目中使用数据绑定,当在我的 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 它会显示错误,即类不可用。但是在我的 xml 文件中包含 <variable> 之后,它能够生成 ActivityMainBinding 类。

安卓工作室: 2.1.3

类路径: com.android.tools.build :gradle:2.1.3

minSdkVersion 16

targetSdkVersion 24

构建工具版本 24.0.0

原文由 Ravi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

我没有得到任何令人满意的答案。所以这里有一些技巧,它们是我的数据绑定知识的总结。

解决数据绑定问题的技巧

更新

为了获得 更准确的错误建议,我强烈建议将 Android Studio 和 Gradle 插件版本更新到最新版本。因为在 AS 3.2 版本之后我没有遇到很多问题。

请参阅 最新的 Android Studio最新的 Gradle 插件

原始解决方案

阅读此答案后,您 将不会陷入 Classes 和 Data Variables 的数据绑定自动生成问题。

将这些点一一核对。这些中的任何一个都可以完成您的工作。 第3点到最后真的很重要,所以不要错过它们。

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

您应该在 build.gradle启用数据绑定。如果没有,那么添加这个和 Sync

 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.自动生成的Binding类名?

您的数据绑定类应在创建绑定布局后生成。

如果您的布局名称为 蛇形 activity_main.xml 则数据绑定类将以 驼峰 形式生成,如 ActivityMainBinding

4. 看不到导入建议?

有时当您键入 ActivityMai... 时,它 不会显示建议,在这种情况下 手动导入

 import <yourpackage>databinding.ActivityMainBinding;

5.阅读构建失败Logcat

如果构建失败,将不会生成布局中的绑定类和新变量。所以首先通过 Ctrl + F9 (Build > Make project) 制作项目

  • 如果构建失败然后查看什么是错误,通常我们在布局字段中有错误。错误日志将指出问题所在的错误行号。
  • 绑定可能会 失败 导致一些 愚蠢的错误,如语法错误或缺少导入。在这种情况下,您将得到充满绑定类错误的 logcat。但是您 应该阅读完整的 logcat找到适当的问题

6.关闭并打开最近的项目

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

  • 从文件关闭项目 > 关闭项目
  • 从最近重新打开

请注意, 我更喜欢 Close and Open from Recent ,因为它比 Rebuild / Restart IDE 花费的时间要少得多。

7. 重建项目

如果仍然没有生成您的课程。 (有时当我们粘贴布局文件时,它会发生)。然后从 Build> 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 & Restart

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

原文由 Khemraj Sharma 发布,翻译遵循 CC BY-SA 4.0 许可协议

大多数时候它只需要重建。不建不做项目。如果你首先做无效的缓存并重新启动Android工作室然后清理并重建它会更好。

原文由 Arezou 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题