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
。
在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();
在 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 数据绑定:在生成的数据绑定文件中找不到 ...BindingImpl
Android 数据绑定 DatabindingUtil 与绑定类