嵌套的 DialogFragment 在轮换后被关闭

Nested DialogFragment gets dismissed after rotation

提问人:muetzenflo 提问时间:6/19/2013 更新时间:9/8/2013 访问量:1327

问:

我有一个嵌套的(!显示我的 PhotoNoteDialogFragment 的片段:

private void newPhotoNote() {
  mPhotoDialog = PhotoNoteDialogFragment.newInstance(this);
  mPhotoDialog.show(getFragmentManager(), PhotoNoteDialogFragment.TAG);
}

该对话框会弹出,但一旦我旋转设备就会被关闭。我已经做了一些研究,并尝试了这些事情,但没有成功:

  • 设置 PhotoNoteDialogFragment#setRetainInstance(true)。不起作用,因为嵌套的 Fragment 不能保留。

  • 在 PhotoNoteDialogFragment 中使用以下代码片段可防止从系统发出不需要的关闭调用的 bug:

    @Override
    public void onDestroyView() {
        if (getDialog() != null)
            getDialog().setDismissMessage(null);
        super.onDestroyView();
    }
  • 尝试在我的嵌套 Fragment#onActivityCreated 中调用 show()-方法,如果 PhotoNoteDialogFragment 的实例不为空:
  @Override
  public void onActivityCreated(final Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (mPhotoNoteDialogFragment != null) {
      mPhotoNoteDialogFragment.show(getFragmentManager(), PhotoNoteDialogFragment.TAG);
    }
  }

这些尝试都无法使 DialogFragment 在屏幕旋转后再次出现。 还有其他人的想法,我接下来可以尝试什么..?我没有想法了。

感谢

嵌套 android-dialogfragment 屏幕旋转

评论

0赞 Amsheer 6/19/2013
您是否为纵向和横向模式使用了不同的布局......
0赞 Bartek Filipowicz 6/19/2013
如何添加根片段?您确定它是由系统保留的,还是手动重新创建它?
0赞 muetzenflo 6/19/2013
@Amsheer:是的,我对嵌套片段和 dialogFragment 有不同的布局。
1赞 Bartek Filipowicz 6/19/2013
如果它是一个嵌套片段,您应该使用子片段管理器。使用 getChildFragmentManager() 显示对话框片段。父片段是否设置了保留实例状态?
1赞 MHogge 8/9/2016
2年后有什么解决方案吗?

答:

0赞 Zyoo 9/8/2013 #1

我认为您不必覆盖,没有它您的对话就可以了。我也试过了。如果显示,则应用上的对话框将崩溃。onActivityCreatedonActivityCreated