1

我使用 ActionBarSherlock 和 ViewPager 将 4 个片段作为 SherlockFragmentActivity 中的标签页。

在正常情况下,此解决方案运行良好。

但是,如果应用程序异常退出,即由于内存不足而被Android OS 杀死,则ViewPager 在导航回SherlockFragmentActivity 时无法再将新创建的片段附加到活动中。

经过大量调试,我终于发现 SherlockFragmentActivity “记住”了附加到它的片段。当它被重新创建时,它会重新创建片段并将其附加到自身,这会阻止 ViewPager 将任何新片段附加到活动。

我通过使用空实现覆盖 SherlockFragmentActivity#onSaveInstanceState 来解决此问题,以强制 SherlockFragmentActivity 忘记所有片段。但是我仍然没有任何完美的解决方案。

我怀疑这是 SherlockFragmentActivity 的缺陷。

综上所述,我认为 SherlockFragmentActivity 在使用 ViewPager 时存在恢复内部 Fragment 的缺陷。

有没有人遇到过同样的问题?

4

2 回答 2

0

根据您所说的,我在这里几乎看不到任何错误的证据。您的解决方案是一个很好的解决方案,它被广泛使用。

但是,我确实想质疑您的分析。如果片段是静态的 (XML),那么 Android 将自动重新创建它们。但是,如果您是动态创建片段(我假设您使用的是选项卡),那么 Android 系统不会在 Activity 销毁后自动重新创建它们。在这种情况下,您应该使用 onSaveInstanceState 以编程方式恢复片段/选项卡。

虽然您没有提到配置更改的问题,但如果您使用的是 ABS,则不应尝试在您的应用程序中处理配置更改。这是我在使用 ABS 时遇到的与“标准”的唯一偏差。

如果您在这里寻找高质量的响应,那么我建议您发布代码和 logcat 跟踪。

于 2013-07-29T01:24:20.603 回答
0

我遇到过类似的问题。解决方案对我有用:

  1. 首先,使用默认构造函数重新创建片段。因此,如果您将自定义构造函数中的一些参数传递给片段,您应该在 onSaveInstanceState 期间保存它们并在 onCreateView() 中将它们取出。

    如果整个应用程序没有被操作系统杀死,它将保存您的片段。

  2. 要在整个应用重新创建后恢复片段,请使用 SharedPrefs 来保存重要数据。在 onStop() 方法中执行此操作并在 onCreateView() 中恢复的好地方。

如果您需要代码示例,请告诉我,但这对您来说似乎不是问题。

于 2013-07-30T15:52:34.937 回答