125

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

你对此有何看法?在为 Android 4 开发时,您是否使用支持库中的片段,即使它们已经可用?

4

5 回答 5

90

根据我的经验,在所有 Android 设备上使用相同的片段实现是一个很大的优势。当使用本机片段在 Android 4.0 上保存状态时,我无法摆脱所有 NullPointerExceptions,支持库它们都消失了。到目前为止,我也看不出这种方法有任何缺点。

所以我现在对自己的问题的回答是:在为 Android 4.x 开发时,使用支持库中的片段是一个好主意。支持库修复了旧片段实现中仍然存在的错误,并且经常通过更多错误修复进行更新。

于 2013-06-29T09:37:01.537 回答
40

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

如果您有包含其他片段的片段,这将变得很重要。这在具有大量复杂性和/或您的整体架构基于选项卡式布局或使用导航抽屉的平板电脑应用程序中很常见。

于 2014-08-18T00:50:35.683 回答
21

尽管针对的是 Android 4.0+,但我也对必须包含支持库感到沮丧——但它似乎是官方推荐的:

Android 支持库包包含多个可以包含在您的应用程序中的库。这些库中的每一个都支持特定范围的 Android 平台版本和一组功能。

本指南解释了支持库提供的重要功能和版本支持,以帮助您决定应在应用程序中包含哪些功能。通常,我们建议包含 v4 支持和 v7 appcompat 库,因为它们支持广泛的 Android 版本并为推荐的用户界面模式提供 API。

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

于 2015-03-20T04:24:13.130 回答
4

IMHO if you are planning to develop for 4.0 only, I would recommend going with the native libraries since the executable will get smaller. It is true that you might run into problems of bugs in early versions, but I think most of these should be fairly trivial to work around. Also the compatibility library is supposed to map to the native fragments in case you are running on 4.0 and higher anyway. So you might end up having to struggle with these kinds of problems anyway. The problem with the support libraries is that you have a lot of the classes appear 2x (once in the support package structure and once in the "native" package structure) which makes development a bit more cumbersome.

However, if you want to also release your app pre 4.0 then there is no way around the support library. Also since there are about 38% of all users on 2.3 it might make business sense to include this OS version. In such a case you can use the support library in combination with Jake Wartons ActionBarSherlock (or with googles support ActionBar Library once it is finally released).

于 2013-06-26T07:09:14.093 回答
2

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

此类在 API 级别 P 中已弃用。使用支持库片段在所有设备上实现一致的行为并访问生命周期。

于 2018-03-08T10:35:21.923 回答