【问题标题】:How to prevent DialogFragment from being dismissed when activity gets resumed如何防止 DialogFragment 在活动恢复时被解除
【发布时间】:2014-07-30 08:29:06
【问题描述】:

我有一个Activity,当Activity 中发生事件时,它会显示DialogFragment。当我的应用程序运行时,用户可以按主页按钮使应用程序在后台运行。当应用程序在后台运行时,一旦事件发生,活动应该显示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");

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

【问题讨论】:

标签: android android-dialogfragment


【解决方案1】:

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

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

【讨论】:

  • 我虽然与您建议的解决方案大致相同,但我认为应该有一种适当的方法来实现这一目标,并寻找那个答案。谢谢。
  • 不幸的是,当您的活动在后台时,您无法显示 DialogFragment,因为在 onPause() 发生后您无法提交片段事务。我所知道的实现这种功能的唯一方法是在您的活动完成时将某种标志保存到您的 SharedPreferences 中,然后当您的活动恢复时,您读取该标志以了解您是否必须显示一个对话框。
【解决方案2】:

尝试使用FragmentActivityshowDialog(int) 方法,您的对话框将自动保留。

【讨论】:

  • 链接已损坏且不安全,请删除它
猜你喜欢
  • 2011-07-22
  • 2012-11-30
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多