方向更改时不保留Android DialogFragment

时间:2014-10-20 10:56:44

标签: android android-dialogfragment

我只是想在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}}。任何想法该怎么做?

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();
}