SherlockFragmentActivity在使用ViewPager时无法正确恢复片段

时间:2013-07-21 18:32:51

标签: android actionbarsherlock android-viewpager fragment

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

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

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

通过大量的调试,我终于发现SherlockFragmentActivity'记得'附加在它上面的碎片。重新创建时,它会重新创建并将片段附加到自身,从而阻止ViewPager将任何新片段附加到活动中。

我通过使用空实现覆盖SherlockFragmentActivity#onSaveInstanceState解决了这个问题,迫使SherlockFragmentActivity忘记了所有片段。但我还没有任何完美的解决方案。

我怀疑这是SherlockFragmentActivity的缺陷。

总结一下,我认为SherlockFragmentActivity在使用ViewPager时存在恢复内部碎片的缺陷。

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

2 个答案:

答案 0 :(得分:0)

根据你所说的,我看到这里没有任何错误证据。您的解决方案是一个广泛使用的好解决方案。

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

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

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

答案 1 :(得分:0)

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

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

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

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

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