android.app.Fragment和android.support.v4.app.Fragment使用差异



首先,我知道这个高票数问题的存在——

android.app.Fragment与android.support.v4.app.Fragment的区别

然而,这里的答案更多地讨论了何时使用它们(即支持API 4+的Fragment s和API 11+的应用程序Fragment s),而不是它们的行为和用法的差异。

我想知道在开发一个支持它们的最小SDK(例如16+)时使用它们的优点或缺点是什么,以及在应用程序Fragment s中支持的新功能是什么,而不支持Fragment s。

我不能告诉你谷歌每一个变化背后的逻辑,但根据谷歌文档https://developer.android.com/topic/libraries/support-library/packages#v4-fragment:

v13支持库提供了FragmentCompat类。v4Fragment类是一个独立的类,它提供了错误修复在后来的平台版本中添加,而v13 FragmentCompat类类的框架实现提供兼容性垫片片段类。

所以总结一下,你基本上是通过使用支持版本得到错误修复。

在https://developer.android.com/reference/android/support/v4/app/Fragment上面写着:

使用此支持版本而不是使用框架版本:

  • activity必须扩展FragmentActivity
  • 你必须调用getSupportFragmentManager()来获得FragmentManager

使用在线diff工具,我可以看到支持库28.0.0-alpha1与框架API级别28的API中的以下差异(不是详尽的):

  • 在支持版本中,getActivity返回FragmentActivity而不是Activity,并且支持版本文档解释说,如果片段与上下文关联,该函数可能返回null
  • 在支持版本中,对getReenterTransition等转换进行操作的函数返回Object而不是ObjectTransition
  • 支持版新增getLifecyclegetViewModelStoreonCreateAnimationrequireActivityrequireContextrequireFragmentManagerrequireHost
  • 使用Activity参数的onInflate方法已被弃用

我看FragmentManagerFragmentTransaction没有明显的区别,除了:

  • 在支持版本setAllowOptimization被弃用,作者说setReorderingAllowed是替代

总结我看到的唯一主要区别是,似乎支持Fragment不需要与Activity相关联,但框架片段似乎需要一个相关的活动来正常运行。

最新更新