Android 嵌套的DialogFragment在旋转后被解除
我有一个嵌套的(!)片段,它显示了我的PhotoNoteDialogFragment:Android 嵌套的DialogFragment在旋转后被解除,android,nested,android-dialogfragment,screen-rotation,Android,Nested,Android Dialogfragment,Screen Rotation,我有一个嵌套的(!)片段,它显示了我的PhotoNoteDialogFragment: private void newPhotoNote() { mPhotoDialog = PhotoNoteDialogFragment.newInstance(this); mPhotoDialog.show(getFragmentManager(), PhotoNoteDialogFragment.TAG); } 对话框会弹出,但在我旋转设备时会立即消失。我已经做了一些研究,并尝试了这些东西,但
private void newPhotoNote() {
mPhotoDialog = PhotoNoteDialogFragment.newInstance(this);
mPhotoDialog.show(getFragmentManager(), PhotoNoteDialogFragment.TAG);
}
对话框会弹出,但在我旋转设备时会立即消失。我已经做了一些研究,并尝试了这些东西,但没有成功:
- 设置PhotoNoteDialogFragment#setRetainInstance(true)。不起作用,因为嵌套片段无法保留
- 在PhotoNoteDialogFragment中使用此代码段可防止错误导致系统发出不必要的拒绝调用:
- 如果PhotoNoteDialogFragment的实例不为null,请尝试调用嵌套片段#onActivityCreated中的show()-方法:
thx我认为您不必覆盖创建的活动,您的对话框没有它也很好。我也试过了。如果您在ActivityCreated上显示对话框,您的应用程序将崩溃。纵向和横向模式是否使用了不同的布局…如何添加根片段?您确定它被系统保留,还是手动重新创建?@Amsheer:是的,我对嵌套片段和dialogFragment有不同的布局。@BartoszFilipowicz:是的,我确定片段被保留。当我在其中一个“onCreate”方法中设置断点时,dialogFragment的实例在旋转后仍然存在。它是一个嵌套片段,您应该使用子fragmentmanager。使用getChildFragmentManager()显示对话框片段。父片段是否也设置了保留实例状态? @Override public void onDestroyView() { if (getDialog() != null) getDialog().setDismissMessage(null); super.onDestroyView(); } @Override public void onActivityCreated(final Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (mPhotoNoteDialogFragment != null) { mPhotoNoteDialogFragment.show(getFragmentManager(), PhotoNoteDialogFragment.TAG); } }