Android 数据绑定 DatabindingUtil 与绑定 class

Android Databinding DatabindingUtil vs binding class

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

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

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

是否存在任何性能差异?
每个的首选用例是什么?

任何其他信息将不胜感激!

谢谢!

其实这两个东西是一样的,不会影响性能。 我注意到的唯一一个小区别是,如果您确定要膨胀哪种布局,则可以使用

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

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

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

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

谢谢。

按照 Android Documentation.

中的建议使用 Binding class's inflate

DataBindingUtilclassdocumentation中可以看到。

inflate

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

Use this version only if layoutId is unknown in advance. Otherwise, use the generated Binding's inflate method to ensure type-safe inflation.

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

您已生成 binding class,请使用 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
}

如果你的布局biniding class没有生成@See .