首先,我知道这个高票数问题的存在——
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
- 支持版新增
getLifecycle
、getViewModelStore
、onCreateAnimation
、requireActivity
、requireContext
、requireFragmentManager
、requireHost
- 使用
Activity
参数的onInflate
方法已被弃用
我看FragmentManager
和FragmentTransaction
没有明显的区别,除了:
- 在支持版本
setAllowOptimization
被弃用,作者说setReorderingAllowed
是替代
总结我看到的唯一主要区别是,似乎支持Fragment
不需要与Activity
相关联,但框架片段似乎需要一个相关的活动来正常运行。