当显示 android.support.v7.app.AlertDialog 并且屏幕旋转时,应用程序在屏幕旋转时崩溃

App crashes on screen rotation when android.support.v7.app.AlertDialog is displayed and screen is rotated

我已经阅读了与此问题相关的所有问题并尝试了所有方法(包括使用 setRetainInstance),但没有找到任何有效的方法。我将 dialogFragment 精简(见下文),但问题仍然存在。在其他地方阅读了一篇博客,其中作者说他已经在 Whosebug 上尝试了所有方法但没有成功,我决定像他那样做并关闭 onStop 中的 dialogFragment 并在 onStart 中重新创建它。但是我想我会问这个问题是否有新的解决方案。

在 Android Studio 中调试我刚刚收到一条不幸的应用程序已停止消息,没有捕获异常并且没有 logcat 输出。

这里是大大简化但仍然失败的代码:

import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;

public class TextViewDialogFragment extends DialogFragment
{
    public TextViewDialogFragment()
    {
        super();
    }

    static public TextViewDialogFragment newInstance(int title, @Nullable String message, int identifier, int inputType, int positiveText, int negativeText, boolean cancelable)
    {
        TextViewDialogFragment fragement = new TextViewDialogFragment();
        return fragement;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        // Using AppCompatActivity activity = (AppCompatActivity) getActivity(); does not help.
        Activity activity = getActivity();
        AlertDialog.Builder alert = new AlertDialog.Builder(activity);
        alert.setCancelable(true).setTitle("title");
        AlertDialog dialog = alert.create();
        return dialog;
    }
}

我使用以下代码从 AppCompatActivity 创建并显示对话框:

folderAddGetName = TextViewDialogFragment.newInstance(R.string.add_folder, resources.getString(R.string.addFolderMessage, selectedFolderView.getText()), 1, InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES, R.string.add, android.R.string.cancel, true);
folderAddGetName.show(getFragmentManager(), "addFolder");

首先,如果你使用AppCompatActivity,你应该使用android.support.v4.app.DialogFragment而不是android.app.DialogFragment。也使用 folderAddGetName.show(getSupportFragmentManager(), "addFolder");

我将错误追溯到 activity 中的错误,该错误仅在创建 dialogfragment 时遇到。对话片段其实没问题。