Android - DataBinding - 如何以及何时生成绑定类?

sow*_*mia 66 data-binding android

数据绑定指南

  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.
Run Code Online (Sandbox Code Playgroud)

什么时候会生成Binding类,比如说ActivityMainBinding.我有编译时错误."无法解析ActivityMainBinding".

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.谢谢

小智 88

你的布局名称是什么?

上面的布局文件是activity_main.xml,因此生成类是ActivityMainBinding.

这意味着生成的类名将取决于您的布局名称

activity_main.xml - > ActivityMainBinding.java

我认为你的活动名称是"main_activity",所以生成的绑定类名应该是MainActivityBinding而不是ActivityMainBinding

  • 这不回答"如何和何时"的问题.我遇到与OP相同的问题,绑定文件对我来说并不生成.这个答案只是告诉你命名约定,并没有给出任何关于如何解决丢失文件问题的线索. (24认同)
  • @Siavash我不知道“如何和何时”,但是我遇到了类似的问题,而对我来说解决的是将所有xmlns:app =“ http://schemas.android.com/apk/res-自动”的内容,而不是顶视图标记。这只是我的疏忽,但它使我发疯,所以我认为我会把它转嫁给别人,以防它帮助别人。 (2认同)

Fra*_*eng 35

当它没有生成绑定类时,我重新启动Android studio.然后将生成绑定类.是不是由android studio的缓存引起的?

顺便说一句,如果您正在使用android-apt,请检查它.因为它会导致绑定类不被生成.

  • 伤心但真实.重启与AS 2.0 alpha一起使用 (9认同)

yig*_*git 29

您是否更新了数据绑定的布局文件?它们仅针对具有数据绑定的布局生成.

它必须以带有layout2个子标签(数据和根视图)的标签开头.

像这样的东西:

<?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>
Run Code Online (Sandbox Code Playgroud)

当您的布局具有此表单时,AndroidStudio应自动完成该类.此外,默认情况下,它是在<your.app.package>.databinding包中生成的.

  • 即使您没有使用Android Studio,gradle插件也会在注释处理阶段生成代码.如果没有Android Studio,您必须确信将生成该类并自行导入Binding类.像"import com.my.package.databinding.ActivityMainBinding;"之类的东西 for activity_main.xml (2认同)

sur*_*lac 14

尝试将布局重命名为main_activity.xml.

就我而言,它不能为"activity_main.xml"生成绑定类.
但重命名布局文件以正常main_activity.xml工作.


Khe*_*raj 11

规则

布局名称在snake_case,并生成绑定类名称PascalCase.

如果你的布局名称是activity_home.xml绑定类名将ActivityHomeBinding.class.

问题

  1. 很多时候你没有获得DataBinding类的导入建议.
  2. 布局中存在某些问题时,不会生成绑定类.
  3. 构建失败时,绑定类不可用

这是黑客

当你没有得到导入建议

导入行仍显示错误?

  • 如果您的导入行显示错误,请尝试make project(ctrl + F9)/ Build> Make Project..
    1. 如果Build由于某些错误而失败,则解决它.
    2. 如果构建成功,则将生成绑定类.

快速破解生成绑定类 -

  • 如果未生成绑定类,则关闭项目("文件">"关闭项目")并从最近打开.

请注意,我建议从最近关闭并打开,因为它比重建/重新启动IDE花费的时间更少.

快速破解绑定类中的布局变量 -

  • 如果未生成布局数据变量,则关闭项目("文件">"关闭项目")并从最近打开.

如果你还有问题.请在评论中告诉我,或者查看此答案以便更好地理解.

  • 正确答案.手动导入工作. (2认同)