Android DialogFragment在屏幕旋转时未被保留

3

我只是想在Android上保持一个方向对话框,我以为这很简单。但它并没有像我想象的那样工作。我有一个简单的成员类叫做StartMonitoringDialogFragment,它继承了DialogFragment。在我的活动中,我像这样显示它:

    StartMonitoringDialogFragment dialog = new StartMonitoringDialogFragment();
    dialog.show(getFragmentManager(), getClass().getName() + "StartDialog");

然而,当屏幕方向改变时,对话框并没有出现。我注意到片段的onCreateView在方向改变后会被正确地调用,并且正在创建和正确返回其视图(片段的实例变量仍然已设置),但是没有显示任何内容。它不应该被显示吗?我需要手动跟踪它吗?
    Fragment dialog;
    if(savedInstanceState != null && (dialog = getFragmentManager().findFragmentByTag(getClass().getName() + "StartDialog")) != null) {
        ((DialogFragment)dialog).show(getFragmentManager(), getClass().getName() + "StartDialog");
    }

我在onCreate(Bundle savedInstanceState)方法中添加了一些代码,并且起初它似乎可以工作,然而现在我不断地遇到一个异常:java.lang.IllegalStateException: Fragment already added。有什么想法该怎么办?

1个回答

3
这是一个已知问题,即使没有支持库,出现的原因不明。
无论如何,我发现一个解决方法,就是在每个DialogFragment中添加以下内容(或者在所有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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接