By default, a Binding class will be generated based on the name of the layout
file, converting it to Pascal case and suffixing “Binding” to it.
The above layout file was activity_main.xml so the generate class was ActivityMainBinding.
什么时候会生成Binding类,比如说ActivityMainBinding。我有编译时错误。 “无法解析ActivityMainBinding”。
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
感谢任何帮助。谢谢
答案 0 :(得分:85)
你的布局名称是什么?
上面的布局文件是activity_main.xml,因此生成类是ActivityMainBinding。
这意味着生成的类名将取决于您的布局的名称
activity_main.xml - > ActivityMainBinding.java
我认为您的活动名称是" main_activity",因此生成的绑定类名称应该是MainActivityBinding而不是ActivityMainBinding
答案 1 :(得分:35)
当它没有生成绑定类时,我重新启动Android studio。然后将生成绑定类。是不是由android studio的缓存引起的?
顺便说一句,如果你使用的是android-apt
,请检查一下。因为它会导致不生成绑定类。
答案 2 :(得分:27)
您是否更新了数据绑定的布局文件?它们仅针对具有数据绑定的布局生成。
必须以layout
标记开头,该标记包含2个子标记(数据和您的根视图)。
这样的事情:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout ...
</LinearLayout>
</layout>
当您的布局具有此表单时,AndroidStudio应自动完成该类。此外,默认情况下,它是在<your.app.package>.databinding
包中生成的。
答案 3 :(得分:14)
尝试将布局重命名为main_activity.xml
。
就我而言,它并没有为&#34; activity_main.xml&#34;生成绑定类。
但是将布局文件重命名为main_activity.xml
就可以了。
答案 4 :(得分:9)
布局名称位于 snake_case
中,并且生成的绑定类名称将为 CamelCase
。
如果布局名称为
activity_home.xml
,则绑定类名称将为 是ActivityHomeBinding.class
。
未收到导入建议时。像这样手动导入您的绑定类。 (IDE通常不显示有关绑定类的建议)
import <yourpackage>databinding.ActivityMainBinding;
请注意,我建议从最近开始关闭并打开,因为它花费的时间比重建 / 少 >重新启动IDE 。
如果仍有问题。在评论中让我知道,或进一步了解this answer。
答案 5 :(得分:4)
确保:
的布局 <data>
<variable name="user" type="com.example.User"/>
</data>
如果您正在寻找ActivityMainBinding,请在 activity_main.xml 中。在大多数样板项目中,您将内容视图设置为activity_main.xml,但随后会为您的fragment_main.xml充气。
如果您将<data>
置于 fragment_main.xml 布局中,则生成的类将为 FragmentMainBinding 。
注意:阅读后这看起来很明显,但是在关注android文档时很容易被忽略。
答案 6 :(得分:4)
如果您想提供自己的Binding类名,只需将class
属性添加到具有类名的data
元素
通过调整数据元素的class属性,可以重命名绑定类或将绑定类放在不同的包中。
<data class="ContactItem">
...
</data>
<data class="com.example.ContactItem">
...
</data>
答案 7 :(得分:4)
在我的情况下,重启Android Studio确实有效。这是android-apt
中的错误答案 8 :(得分:1)
为了使android数据绑定正常工作,你必须使用android工具进行gradle(com.android.tools.build:gradle)&gt; = 1.3.0。
所以你的项目build.gradle必须如下:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
classpath "com.android.databinding:dataBinder:1.0-rc1"
}
}
allprojects {
repositories {
jcenter()
}
}
模块build.gradle必须有这个插件:
apply plugin: 'com.android.databinding'
毕竟,检查你的模块,你正在使用最新的buildToolsVersion(现在它是22.0.1)。我不确定是否需要,但它可能会让你感觉良好,因为你处于“技术的最前沿”^ _ ^:
buildToolsVersion '22.0.1'
重新同步gradle和重建项目。如果不重建项目,可能无法生成SomeLayoutBinding
个类。
在Android Studio中,可以从应用程序菜单中完成:Build -> Rebuild project
答案 9 :(得分:1)
面临同样的问题。
原因&#34;无法解决ActivityMainBinding&#34;是你的Binding文件没有生成。尝试清理和重建项目。 还要确保您已按照以下步骤操作:
或者,如果您想查看生成的来源。
这些类将在首次构建时生成。 另外,请确保您的应用模块中的 applicationId 与应用模块的AndroidManifest.xml中的包名称相同。 希望这会有所帮助。
答案 10 :(得分:1)
只是简单的重启对我不起作用。我必须Invalidate Caches and Restart
然后我才能看到绑定类。对于那些不知道的人来说,它位于File
菜单下。
答案 11 :(得分:1)
我的经验是,在单击“构建>重建项目”后,Android Studio 3.1.3生成了数据绑定类。该文件存储在:
\ Project \ app \ build \ generated \ source \ apt \ development \ debug \ project \ android \ app \ databinding
但是,Android Studio still 在源代码中将绑定类报告为“未知”。
要最终解决该问题,我手动添加了 import 语句:
导入project.android.app.databinding。*;
答案 12 :(得分:0)
嗨,也许你可以试试这个,也可以在 build.gradle(:app) 中包含这个
在android块内
构建功能{ 视图绑定真 }
对我有用,也许对你也有用
答案 13 :(得分:0)
我遇到了一个类似的问题,这里没有提到。就我而言,我错误地将<Layout>
添加为标签,而不是<layout>
。 <Layout>
显然是有效标签,因为Android Studio没有抱怨(除了<layout>
不需要的layout_width和layout_height之外)。大写的差异将以类似的行为表现出来,即使<Layout>
是有效的标记,并且构建正确定义了.gradle文件以支持数据绑定。
就我而言,为了使ActivityMainBinding有效导入并在以下位置引用,我并不需要定义<data>
标记:
private lateinit var binding: ActivityMainBinding
当我遇到以下行为时,我正在研究以下代码实验室:https://developer.android.com/codelabs/kotlin-android-training-data-binding-basics/index.html
答案 14 :(得分:0)
如果您不想重新启动android studio,一种方法是将activity_main.xml重命名为其他内容,例如activity_m.xml,然后将其重命名为activity_main.xml。它比重启android studio要快得多。
要重命名,请右键单击activity_main.xml并选择重构 =&gt;的重命名强>
答案 15 :(得分:0)
检查对象的字段访问级别,当我公开它在这里工作时
答案 16 :(得分:0)
<data class="MainActivityBinding">
<variable
name="user"
type="com.example.administrator.my_mvvm.User" />
</data>
//记住需要 建设 - &GT;重建项目
答案 17 :(得分:0)
在我的情况下,我只是在<layout></layout>
标签中包含了我的布局xml,而没有添加数据标签,我成功生成了数据绑定。希望这会有所帮助。
<data>
<variable name="user" type="com.example.User"/>
</data>
答案 18 :(得分:0)
android-studio中一个奇怪的“bug”导致生成的BR.java文件不使用@Bindable
字段,如果res / layout目录不存在,仍然只有_all
属性
当我想创建一个“无活动”应用程序以拥有一个包含我不同的可绑定数据的库时,它发生在我身上。