我只是想在Android中保留一个Dialog方向,我认为这很简单。但它并没有像我想象的那样起作用。我有一个名为Activity
StartMonitoringDialogFragment
的简单成员类,其中DialogFragment
扩展了 StartMonitoringDialogFragment dialog = new StartMonitoringDialogFragment();
dialog.show(getFragmentManager(), getClass().getName() + "StartDialog");
。在我的活动中,我表现得像:
Fragment dialog;
if(savedInstanceState != null && (dialog = getFragmentManager().findFragmentByTag(getClass().getName() + "StartDialog")) != null) {
((DialogFragment)dialog).show(getFragmentManager(), getClass().getName() + "StartDialog");
}
然而,对话框在方向更改时不会出现。我注意到,在方向更改后正确调用onCreateView上的片段并正确创建并返回其视图(片段的实例变量仍然设置),但是没有显示任何内容。它不应该被显示出来吗?我需要手动跟踪吗?
修改 我尝试通过添加
来解决这个问题onCreate(Bundle savedInstanceState)
到我的活动java.lang.IllegalStateException: Fragment already added
方法,它最初似乎有效,但我现在经常面临异常{{1}}。任何想法该怎么做?
答案 0 :(得分:3)
这是一个known issue,即使没有支持库也会出现这种情况。
在任何情况下,我发现一个可行的解决方法是将此添加到您拥有的每个DialogFragment(当然还包括所有将扩展的基础):
@Override
public void onDestroyView() {
//workaround for this issue: https://code.google.com/p/android/issues/detail?id=17423 (unable to retain instance after configuration change)
if (getDialog() != null && getRetainInstance())
getDialog().setDismissMessage(null);
super.onDestroyView();
}