Android Databinding DatabindingUtil vs binding class



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

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

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

是否有任何性能差异?
每种方法的首选用例是什么?

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

谢谢!

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

DataBindingUtil文档中,您可以看到。

膨胀

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

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

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

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

在爪哇语中

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

在科特林

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

如果您的布局分箱类未生成@See此答案

实际上,两件事的工作方式相同 它不会影响性能。 我注意到的只有一个小区别是,如果您确定要膨胀哪种布局,则可以使用

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);那么我们可以根据需要进行投射。

谢谢。

最新更新