如何防止DialogFragment在活动恢复时被解雇

时间:2014-07-30 08:29:06

标签: android android-dialogfragment

我有Activity,当DialogFragment中发生事件时,会显示Activity。当我的应用程序运行时,用户可以按主页按钮使应用程序在后台运行。当应用程序在后台运行时,一旦事件发生,活动应该显示DialogFragment,这样当用户恢复应用程序时,对话框应该在活动之上,但是我没有得到结果我想。只要我从启动器图标或通知恢复应用程序,该对话框就不会出现在活动中。

这是我的DialogFragment类:

public static class MyDialog extends DialogFragment {

    public static DialogInterface.OnClickListener mListener;
    public static String mTitle, mBody;
    public static boolean mConfirm;

    public static MyDialog getInstance(String body, boolean confirm,
            DialogInterface.OnClickListener listener) {
        mListener = listener;
        mTitle = "MyDialog";
        mBody = body;
        mConfirm = confirm;
        MyDialog fragment = new MyDialog();
        return fragment;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedIntanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
        .setTitle(mTitle).setMessage(mBody)
        .setPositiveButton("Ok", mListener);
        if (mConfirm)
            builder.setNegativeButton("Cancel", mListener);
        return builder.create();
    }
}

当活动在前台时,对话框可以正常工作。 以下是我展示对话框的方式:

MyDialog.getInstance("This is dialog body text", true, 
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (which == DialogInterface.BUTTON_POSITIVE) {
                            // positive button pressed
                        }else //negative button pressed
                    }
        }).show(getSupportFragmentManager(), "dialog");

即使活动在后台,我想要一个仍然在活动上的对话框,一旦我恢复活动,对话框应该在活动的顶部。我怎样才能实现这种行为?

2 个答案:

答案 0 :(得分:2)

您可以声明一个全局布尔值来确定是否应该显示该对话框。然后在您的活动onResume()方法中,根据布尔值显示对话框。

如果用户与对话框完成交互,您可以将此布尔值设置为false,这将导致当您的活动位于前台(onResume)时不再显示该布尔值。

答案 1 :(得分:-1)

尝试使用FragmentActivity的{​​{1}}方法,您的对话框将自动保留。

查看that链接