android - 未生成数据绑定(bind)类

标签 android data-binding android-databinding

我在我的项目中使用数据绑定(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 like ActivityMainBinding.


4. 看不到导入建议?
有时当您输入 ActivityMai... ,那么它 不显示建议 ,在这种情况下 手动导入 .
import <yourpackage>databinding.ActivityMainBinding;
5.读取构建失败Logcat
如果构建失败,将不会生成布局中的绑定(bind)类和新变量。所以先制作项目 来自 Ctrl + F9(构建 > 制作项目) .
  • 如果构建失败,那么查看什么是错误,通常我们在布局字段中有错误。错误日志将指出问题的错误行号。
  • 绑定(bind)可能失败 引起一些 愚蠢的错误 ,例如语法错误或缺少导入。在这种情况下,您将得到充满绑定(bind)类错误的 logcat。但是你应该阅读完整的 logcat 找到合适的问题 .

  • 6.关闭和打开最近的项目
    我总是这样做,因为它比 Rebuild 花费的时间少得多。/Make项目。
  • 从"file">“关闭项目”中关闭项目
  • 从最近开始再次打开

  • 请注意 我更喜欢 关闭和打开 来自 近期 因为它比 花费的时间少得多重建/重启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)布局的变量。
  • 如果它不起作用那么 使缓存无效并重新启动 .

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

    关于android - 未生成数据绑定(bind)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39483094/

    相关文章:

    android - Exoplayer Analytics,获取分析的准确方法

    android - VibrationEffect 不会改变我的 Galaxy S8 上的振动幅度

    wpf - 当 UI 值更改时,将 ViewModel 上的结构属性绑定(bind)到 WPF 工具包 PropertyGrid 不会更新 ViewModel

    delegates - Kotlin 委托(delegate)更有趣

    android - 为什么 android 数据绑定(bind)库没有按预期工作?

    android - 在忽略特殊字符的同时在 RegEx 中查找 Word

    java - 用于更改 Android 应用布局背景颜色的切换按钮

    data-binding - Go walk 中的基本数据绑定(bind)

    asp.net - 如何将转发器绑定(bind)到 List<Person> 以同时更新绑定(bind)的项目? (2种方法)

    android - Android 中的静态数据绑定(bind) [文字]