android.app.Fragment和android.support.v4.app.Fragment

时间:2016-07-02 20:15:21

标签: android android-fragments

首先,我知道这个高度投票的问题的存在 -

Difference between android.app.Fragment and android.support.v4.app.Fragment

但是,这里的答案更多地讨论了何时使用它们(即支持API 4+的Fragment和API 11+的应用Fragment),而不是它们的行为和用途

我想知道在开发支持两​​者的最小SDK(例如16+)时使用的优​​点和缺点是什么,以及app {{1}支持的新功能有哪些? } s而不是支持Fragment s。

1 个答案:

答案 0 :(得分:1)

我无法告诉您每个Google更改背后的逻辑,但根据https://developer.android.com/topic/libraries/support-library/packages#v4-fragment上的Google文档:

  

v13支持库提供了FragmentCompat类。 v4   片段类是一个独立的类,可提供   在更高的平台版本中添加,而v13 FragmentCompat类   为框架的实现提供兼容性填充   片段类。

因此,总而言之,使用支持版本基本上可以修复错误。

https://developer.android.com/reference/android/support/v4/app/Fragment处说:

  

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

     
      
  • 您的活动必须扩展FragmentActivity
  •   
  • 您必须调用getSupportFragmentManager()才能获取FragmentManager
  •   

使用在线差异工具,从支持库28.0.0-alpha1到框架API级别28,我可以看到API中的以下差异(并非详尽无遗):

  • 在支持版本getActivity中返回FragmentActivity而不是Activity,并且支持版本docs解释说,如果片段与上下文相关联,则该函数可能返回null。
  • 在诸如getReenterTransition之类的过渡上运行的函数在支持版本中返回Object,而不是ObjectTransition
  • 支持版本添加了以下功能:getLifecyclegetViewModelStoreonCreateAnimationrequireActivityrequireContextrequireFragmentManager,{{1 }}
  • 已弃用带有requireHost参数的onInflate方法

除了以下内容外,我发现ActivityFragmentManager方面没有显着差异:

  • 已弃用支持版本FragmentTransaction,作者说setAllowOptimization是替代版本

总结一下,我看到的唯一主要区别是,似乎支持setReorderingAllowed不需要与Fragment关联,但是框架Fragment似乎需要关联的Activity才能正常运行。