Rav*_*avi 70 data-binding android android-databinding
我在我的项目中使用数据绑定,当使用时<layout>,<data>我的xml绑定类中没有生成.
例如,我有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>
Run Code Online (Sandbox Code Playgroud)
现在,如果我ActivityMainBinding在我的活动/片段中写入,则显示该类不可用的错误.但是<variable>在我的xml文件中包含它后,它能够生成ActivityMainBinding类.
Android Studio:2.1.3
Classpath:com.android.tools.build:
grad :2.1.3
minSdkVersion 16
targetSdkVersion 24
buildToolsVersion 24.0.0
Khe*_*raj 141
我没有得到任何令人满意的答案.所以这里有一些提示,它是我的数据绑定知识的摘要.
为了获得更准确的错误和建议,我强烈建议您将Android Studio和Gradle插件版本更新为最新版本.因为我在AS 3.2版本之后没有遇到很多问题.
查看最新的Android Studio和最新的Gradle插件.
阅读此答案后,您将不会遇到类和数据变量的数据绑定自动生成问题.
逐个检查这些要点.任何这些都可以使你的工作完成.第3点到最后是非常重要的,所以不要错过它们.
你应该有数据绑定启用在build.gradle.如果没有,则添加此项并同步.
android {
...
dataBinding {
enabled = true
}
...
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您希望生成数据绑定类,那么您应该使用数据绑定(标记)进行换行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>
Run Code Online (Sandbox Code Playgroud)
创建绑定布局后,应生成数据绑定类.
如果您的布局名称是蛇的情况下
activity_main.xml,然后数据绑定类将在生成驼峰状ActivityMainBinding.
有时当您键入时ActivityMai...,它不显示建议,在这种情况下手动导入.
import <yourpackage>databinding.ActivityMainBinding;
Run Code Online (Sandbox Code Playgroud)
如果构建失败,则不会生成布局中的绑定类和新变量.因此,首先让项目通过按Ctrl + F9(生成>制作项目).
我总是这样做,因为它比Rebuild/ Makeproject 花费的时间少得多.
请注意,我更喜欢Close和Open from Recent,因为它比Rebuild/Restart IDE花费的时间少得多.
如果仍未生成您的课程.(有时候我们粘贴布局文件,然后就会发生).然后从(不构建或制作项目)重建项目.它将生成您的数据绑定类.(重建为我做魔术.)Build> Rebuild
在将AS更新到Android Studio 3.2之后,我觉得在数据绑定自动生成中有很多错误修复.所以你也应该有最新的AS.
<variables<data>
<variable
name="item"
type="com.package.Model"/>
</data>
Run Code Online (Sandbox Code Playgroud)
通常当我们将变量放在布局中时,它会创建它的getter和setter.我们可以使用binding.setItem(item);和binding.getItem();,但如果你看不到那些方法,那么请阅读以下信息.
如果您已经创建了一个数据变量 - <variable在您的布局中并且它没有在数据绑定类中显示其setter和getter,那么从最近的项目中关闭并打开.
如果您<variable在布局中更改了某些类型并且getter setter类型未更改,则清除项目(Build> Clean Project)
最后,如果仍未生成绑定类,那么我们拥有最强大的武器.- 重启Android Studio:D
这就是我为解决数据绑定错误所做的一切.如果您有任何进一步的问题,可以在这里发表评论.
小智 22
DataBinding类自动生成.
如果你的xml名称是activity_test,那么Binding类将是ActivityTestBinding.
但,
dataBinding {
enabled = true
}
Run Code Online (Sandbox Code Playgroud)
布局应该以root身份布局
<layout xmlns:android="http://schemas.android.com/apk/res/android">
</layout>
Run Code Online (Sandbox Code Playgroud)
小智 12
我遇到过同样的问题.在阅读了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>
Run Code Online (Sandbox Code Playgroud)
Krz*_*cki 10
在我的例子中,Binding类是生成并到位的(但我认为不是)...但它不会自动将所述类的导入添加到activity/fragment import部分......所以... OPTION +输入:)
dataBinding {
enabled = true
}
Run Code Online (Sandbox Code Playgroud)
要启用新的数据绑定编译器,请将以下选项添加到 gradle.properties 文件中:
android.databinding.enableV2=true
Run Code Online (Sandbox Code Playgroud)
更新:
要启用数据绑定,请使用,
android {
...
buildFeatures {
dataBinding true
}
}
Run Code Online (Sandbox Code Playgroud)
请点击此链接: https ://developer.android.com/jetpack/androidx/releases/databinding
在正确设置它之后(包括xml命名空间并将所有内容包装进去<layout>),对我有用的是做Build - > Make项目.Nor Clean Project或Rebuild Project也做到了.我在Android Studio 2.3.1中,使用26.0.2构建工具.不需要<data>标签.
为每个布局文件生成一个绑定类。默认情况下,类的名称基于布局文件的名称,将其转换为 Pascal 大小写并添加 Binding 后缀。上面的布局文件名为activity_main.xml,因此对应的生成类为ActivityMainBinding。此类保存从布局属性(例如,用户变量)到布局视图的所有绑定,并且知道如何为绑定表达式分配值。
活动或片段类的名称命名法在前缀方面可能有所不同。因为后缀总是Binding。
在遵循Khemraj和Invalidate Caches / Restart的响应之后,您应该重写 ActivityBinding 或 FragmentBinding以获取已生成的类的 IDE 建议,并且不要对导入进行硬编码。
就我而言,我试图向后导入类的名称 be 而FragmentCompetitionsBinding不是CompetitionsFragmentBinding。
GL
我有同样的问题。我在重构时犯了一个错误。autogen 绑定类的名称来自 xml 布局文件。
fragment_name.xml - > FragmentNameBinding
| 归档时间: |
|
| 查看次数: |
37782 次 |
| 最近记录: |