方向更改后,片段不会恢复

时间:2014-12-01 15:33:20

标签: android android-fragments android-viewpager fragmentstatepageradapter

在我的程序中,我有以下层次结构:

Activity
    Fragment
        ViewPager + FragmentStatePagerAdapter
            Fragment containing video

使用setRetainInstance(true)初始化活动中立即嵌套的片段。切换方向时,这会导致崩溃。使用错误报告中描述的解决方案:https://code.google.com/p/android/issues/detail?id=42601#c10

不过,每当我切换方向时,应用程序都会崩溃。我发现了另一个错误报告+解决方案:https://code.google.com/p/android/issues/detail?id=42601#c32

应用此解决方案后,我能够在不崩溃的情况下旋转设备。但是,深层嵌套的片段没有保留其状态。由于此片段包含的视频应该继续播放,尽管有任何方向更改,这是必须的。我在这里发现了第三个错误报告,描述了这是Android支持库版本20中的一个已知问题:https://code.google.com/p/android/issues/detail?id=74222#c17

现在,似乎最深的片段保留了某种状态。至少它没有被破坏,因为视频的音频在整个方向改变之后和之后继续播放。但是,在方向更改后,片段不会恢复。我只是看到视频应该是的白色矩形。

正如你所看到的,这太荒谬了。我已经不得不在ViewPager类中使用三个hacky解决方案,但它仍然无法正常工作。如果有人知道我还能尝试什么,我将非常感激。

1 个答案:

答案 0 :(得分:0)

最终,我没有找到问题的解决方案。我已经通过在父片段中保留嵌套片段的状态来解决问题,该片段确实正确地保留了状态。为此,我做了以下事情:

  • 将HashMap添加到父片段
  • 为每个片段提供一个唯一的ID字符串,无论何时重新创建片段都可以恢复
  • 在onCreate方法中为所有嵌套片段创建一个状态对象,并将其添加到父片段中的HashMap中。或者,if((ParentFragment)getParentFragment())。stateMap.contains(id),恢复现有状态。
  • 将嵌套片段的所有成员变量移动到StateObjects