Android Databinding DatabindingUtil与绑定类

Fra*_*ois 6 performance android android-databinding

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

binding = DataBindingUtil.inflate(inflater, R.layout.drawer_item_primary, parent, false);
Run Code Online (Sandbox Code Playgroud)

VS

binding = DrawerItemPrimaryBinding.inflate(inflater, parent, false);
Run Code Online (Sandbox Code Playgroud)

有任何性能差异吗?
每个的首选用例是什么?

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

谢谢!

Khe*_*raj 9

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

DataBindingUtil文档中,您可以看到.

膨胀

T inflate (LayoutInflater inflater, 
                int layoutId, 
                ViewGroup parent, 
                boolean attachToParent)
Run Code Online (Sandbox Code Playgroud)

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

一种选择是通过膨胀,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();
}
Run Code Online (Sandbox Code Playgroud)

在科特林

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

如果未生成布局biniding类,请参阅此答案.


Ruj*_*dhi 5

实际上,两者都在工作,不会影响性能。我注意到的只有一个微小的区别是,如果您确定要膨胀的布局,那么您可以使用

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

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

int layoutId = R.layout.drawer_item_primary;
DataBindingUtil.inflate(inflater, layoutId, parent, false);
Run Code Online (Sandbox Code Playgroud)

所以DrawerItemPrimaryBinding.inflate(inflater, parent, false);总是会回到我们的DrawerItemPrimaryBinding班级。如果我们必须使用, DataBindingUtil.inflate(inflater, layoutId, parent, false);那么我们可以根据需要进行转换。

谢谢你。