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

178
什么是 android.app.Fragmentandroid.support.v4.app.Fragment 的区别,以及在什么情况下应该使用它们?
6个回答

292

android.support.v4.app.Fragment是Android支持库中的Fragment类,它是一个兼容包,可以让您在旧版本的Android上使用一些新功能。

android.app.Fragment是原生Android SDK中的Fragment类。它是在Android 3(API 11)中引入的。

如果您想使应用程序使用片段,并且要针对API 11之前的设备,请使用android.support.v4.app.Fragment。但是,如果您只针对运行API 11或更高版本的设备,则可以使用android.app.Fragment

编辑:自API级别28起,操作系统内置的android.app.Fragment已弃用,每个人都应该转而使用支持库实现。


4
还可以参考“不使用支持库的FragmentStatePagerAdapter”:https://dev59.com/8mMl5IYBdhLWcg3wTlcl - CJBS
如果您覆盖了onAttach()方法,请参考以下线程,以避免在某些情况下android.app.Fragment中未被调用:https://dev59.com/k1wY5IYBdhLWcg3w5bTt - Hong
3
将使用Androidx:androidx.fragment.app.Fragment - Abhijit Kurane

57

截至2018年:

文档中可以看到,从android.app.Fragment类开始被API级别28弃用:

现在应该使用支持库的Fragment,以确保在所有设备上具有一致的行为并获得生命周期的访问权限。

因此,现在应该在所有地方使用支持片段(android.support.v4.app.Fragment),而不是原生片段(android.app.Fragment)。


作为 Android 开发的新手,当 android.app.Fragment 类被弃用时,我期望 API 级别 28 会有一种可能是激进的替代方法。@Artyom,请问现在是否有一种前瞻性的方法,还是说使用向后兼容的 android.support.v4.app.Fragment 是正确的做法? - ergohack
1
@ergohack 看待这个问题的方式是:对于 Java 代码,您可以将字节码包含在设备的运行时内部或应用程序的 jar 文件内部。支持库代码将被放置在您的 jar 中,并提供与运行时提供的代码相同的功能,因此没有理由不使用现代和维护良好的支持库,而不是目标手机的老化和未维护的代码。 - Pierre

12

我一直在使用android.support.v4.app.Fragment

我编写的所有应用程序都需要支持到Android 2.3,这是实现它的最简单方法。

如果你支持11+版本,则坚持使用android.app.Fragment


18
如果你这样做,就会错过很多仅在支持库中存在,在特定API级别后才存在于原生库中的功能,例如getChildFragmentManager() 直到17级才可用。我的建议是只使用支持库的Fragments,并假装原生库不存在。 - Johan

4

如果您的应用程序针对API 11或更高版本,则可以使用android.app.Fragment,这样您的APK文件将更小。

否则,请在项目中添加android.support.v4.app.Fragment库以支持旧版Android API(Android 3.x)。


2

android.support.v4.app.Fragment是一个库,您可以使用它来获得对老版本API的向后兼容性。

Fragment是在API 11级别上添加的(以及其他功能),您应该包括该库以将这些功能扩展到先前的API 11设备。这是一个有用的库,我建议看一下ActionBarSherlock,它可以将操作栏扩展到先前的API v11设备。


-2
如果您的应用程序针对API 11或更高级别,请使用android.app.Fragment,这将减小APK大小。 否则,请使用android.support.v4.app.Fragment。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接