Android 数据绑定 DatabindingUtil 与绑定类

Posted

技术标签:

【中文标题】Android 数据绑定 DatabindingUtil 与绑定类【英文标题】:Android Databinding DatabindingUtil vs binding class 【发布时间】:2019-01-24 09:13:52 【问题描述】:

我想知道以下之间有什么区别:

binding = DataBindingUtil.inflate(inflater, R.layout.drawer_item_primary, parent, false);

binding = DrawerItemPrimaryBinding.inflate(inflater, parent, false);

有任何性能差异吗? 每个的首选用例是什么? 任何其他信息将不胜感激!

谢谢!

【问题讨论】:

【参考方案1】:

按照Android Documentation中的建议使用Binding class's inflate

DataBindingUtildocumentation中可以看到。

膨胀

T inflate (LayoutInflater inflater, 
                int layoutId, 
                ViewGroup parent, 
                boolean attachToParent)

仅当 layoutId 事先未知时才使用此版本。否则,使用生成的 Binding 的 inflate 方法来确保类型安全 通货膨胀。

一种选择是通过DataBindingUtil 膨胀但只有当您没有生成绑定类时

您已生成binding class,请使用该类而不是使用DataBindingUtil

在 Java 中

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    HomeFragmentBinding binding = HomeFragmentBinding.inflate(inflater, container, false);
    //set binding variables here
    return binding.getRoot();

在 Kotlin 中

lateinit var binding: HomeFragmentBinding 
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? 
    binding = HomeFragmentBinding.inflate(inflater, container, false)
    return binding.root

如果你的布局绑定类没有生成@See this answer

【讨论】:

【参考方案2】:

实际上,这两个东西都是一样的,不会影响性能。 我注意到的唯一一个细微差别是,如果您确定要充气的布局,那么您可以使用

binding = DrawerItemPrimaryBinding.inflate(inflater, parent, false);

但是如果你想要动态绑定类那么你可以使用

int layoutId = R.layout.drawer_item_primary;
DataBindingUtil.inflate(inflater, layoutId, parent, false);

所以DrawerItemPrimaryBinding.inflate(inflater, parent, false); 将始终返回我们的DrawerItemPrimaryBinding 类。 如果我们必须使用DataBindingUtil.inflate(inflater, layoutId, parent, false);,那么我们可以根据要求进行转换。

谢谢。

【讨论】:

以上是关于Android 数据绑定 DatabindingUtil 与绑定类的主要内容,如果未能解决你的问题,请参考以下文章

Android 数据绑定库 vs Kotlin Android 扩展

数据绑定;查看标签不正确,Android

Android 数据绑定:在生成的数据绑定文件中找不到 ...BindingImpl

Android 数据绑定 DatabindingUtil 与绑定类

Android 数据绑定 SetSupportActionBar

android 数据绑定单元测试错误无法解析数据绑定编译器选项。参数: