Fragment or Support Fragment?

我正在开发一个支持 Android > = 4.0的应用程序。它使用来自 android.app包的片段。由于我正面临着4.0中较老的片段实现的问题,比如 这个,这些问题在支持库中已经得到了修复,我正在考虑从支持库切换回片段实现,以获得更可靠和一致的实现。

你对此有什么看法?在为 Android 4开发时,您是否使用了来自支持库的片段,尽管它们已经可用了?

36510 次浏览

恕我直言,如果您计划只开发4.0版本,我建议使用本地库,因为可执行文件将变得更小。的确,在早期版本中您可能会遇到 bug 问题,但是我认为大多数这些问题应该相当容易解决。此外,兼容性库应该映射到本机片段,以防您在4.0或更高版本上运行。所以无论如何,你可能最终不得不与这些问题作斗争。 支持库的问题在于,很多类显示为2x (一次显示在支持包结构中,一次显示在“本机”包结构中) ,这使得开发更加繁琐。

然而,如果你想同时发布你的应用 pre 4.0,那么就没有办法绕过支持库了。此外,由于大约有38% 的用户在2.3上,它可能有商业意义,包括这个操作系统版本。在这种情况下,您可以将支持库与 Jake Wartons ActionBarSherlock 结合使用(或者在最终发布后与 Google 支持的 ActionBar Library 结合使用)。

根据我的经验,在所有 Android 设备上使用相同的片段实现是一个很大的优势。当在 Android 4.0上使用原生片段保存状态时,我无法消除所有的 NullPointerException,因为支持库已经不存在了。此外,我也看不出这种方法到目前为止有什么缺点。

So my answer to my own question is now: When developing for Android 4.x, using the fragments from the support library is a good idea. The support library has bugs fixed that are still present in older fragment implementations and is frequently updated with more bug fixes.

坚持使用 SupportFragment一段时间的一个重要原因是,直到 API 17才能访问 ChildFragmentManager。支持库将为您提供子片段管理器的支持版本。

如果您有包含其他片段的片段,那么这将成为一个大问题。这在复杂的平板电脑应用程序中很常见,并且/或者你的整体架构是基于选项卡式布局或者使用导航抽屉。

I was also getting frustrated at having to include the support libraries, despite targeting Android 4.0+ - but it seems it is officially recommended:

Android 支持库包包含几个库 可以包含在您的应用程序中 一系列特定的 Android 平台版本和特性。

本指南解释了重要的特性和版本支持 由支援图书馆提供,以协助你决定你的 一般来说,我们建议包括 V4支持和 v7应用程序库,因为它们支持广泛的 并为推荐用户提供 API 接口模式

Http://developer.android.com/tools/support-library/features.html

现在似乎最好使用支持库,因为我在这里看到了 https://developer.android.com/reference/android/app/Fragment.html语句

此类在 API 级别 P 中已被弃用。请使用支持库 片段,以便在所有设备和访问 生命周期。