Android Databinding DatabindingUtil vs绑定类

时间:2018-08-17 10:34:19

标签: android performance android-databinding

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

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

vs

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

是否存在性能差异?
每种情况的首选用例是什么?

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

谢谢!

2 个答案:

答案 0 :(得分:6)

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

DataBindingUtil documentation 中,您可以看到。

  

充气

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();
}

在科特林

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

如果未生成布局分类类,请参见 this answer

答案 1 :(得分: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);,则可以根据要求进行转换。

谢谢。