繁体   English   中英

方向更改后,无法恢复其中的片段

[英]Fragments in are not restored after orientation change

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

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

现在,似乎最深处的碎片仍保留着某种状态。 至少它不会被破坏,因为视频的音频会在整个方向更改后以及在方向更改后一直播放。 但是,片段在方向更改后不会恢复。 我只是在视频应该出现的地方看到一个白色矩形。

如您所见,这变得荒谬。 我已经不得不使用三个hacky解决方案来解决ViewPager类中的错误,但它仍然无法正常工作。 如果有人知道我还能尝试什么,我将非常有义务。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM