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


175

android.app.Fragment和之间的区别是android.support.v4.app.Fragment什么,应在什么情况下使用?

Answers:


288

android.support.v4.app.Fragment是android支持库中的Fragment类,它是一个兼容性软件包,允许您在旧版Android上使用Android的某些新功能。

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

如果要使您的应用使用片段,并希望在API 11之前定位设备,则必须使用android.support.v4.app.Fragment。但是,如果您仅定位运行API 11或更高版本的设备,则可以使用android.app.Fragment

编辑:android.app.Fragment 不推荐使用操作系统(自API级别28开始),每个人都应该使用支持库实现。


4
另请参阅“使用FragmentStatePagerAdapter WITHOUT支持库”:stackoverflow.com/questions/18512294/...
CJBS

如果重写onAttach(),请参阅本线程,以避免它没有在某些情况下调用android.app.Fragment: stackoverflow.com/questions/32083053/...
香港

3
将使用Androidx:androidx.fragment.app.Fragment
Abhijit Kurane

56

截至2018年:

android.app.Fragment 文档

该类在API级别28中已弃用。
使用支持库Fragment可在所有设备上保持一致的行为并访问Lifecycle。

因此,现在android.support.v4.app.Fragment应在各处使用支持片段(),而不要使用本机片段(android.app.Fragment)。


@Artyom,作为android开发的菜鸟,我希望android.app.Fragment弃用该类时,API级别28将具有替代的,可能是根本的替代方法。有向前的方法还是向后兼容android.support.v4.app.Fragment的正确方法?
ergohack

1
@ergohack那样看:对于Java代码,您可以在设备的运行时内部或应用程序的jar文件中包含字节码。支持库代码将放入您的jar中,并提供与运行时提供的代码相同的功能,因此,没有理由不使用现代且经过维护的支持库,而不是使用目标电话的老化且无需维护的代码。
皮埃尔

12

android.support.v4.app.Fragment专门使用。

我编写的所有应用都需要直接支持Android 2.3,这是最简单的方法。

如果您支持11+,请坚持使用android.app.Fragment


18
在那种情况下,您会丢失支持库中存在的许多功能,但仅在特定API级别之后才存在于本机功能中。例如,getChildFragmentManager()直到级别17才可用。我的建议是仅使用支持片段,并假装本机片段不存在。
约翰

4

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

否则,请将android.support.v4.app.Fragment库添加到您的项目中,以支持较早的android API版本(Android 3.x)。


2

android.support.v4.app.Fragment 是一个库,可用于获取旧API版本的向后兼容性。

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


-2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.