在Fragment的后退按钮按下时关闭不可取消的对话框 - Android

6
我有一个导航抽屉活动和许多通过导航抽屉到达的片段。在其中一些片段中,当后台任务正在进行时,我显示一个对话框,上面写着“加载中...”。
现在我通过dialog.setCancelable(false)使我的对话框不可取消,这样用户就不会因为在屏幕上点击任何位置而意外地关闭它。即使按下手机的返回按钮,也无法取消。
这是我的对话框代码 -
Dialog dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.custom_progress_dialog);
    ((TextView)dialog.findViewById(R.id.custom_dialog_message)).setText("Loading ...");

    dialog.setCancelable(false);     
    dialog.show();

我需要编写代码,当手机后退按钮被按下时,关闭加载对话框并返回到上一个片段。我需要实现特定于片段的backPress。谢谢!
4个回答

10

删除你的代码行:

dialog.setCancelable(false); 

放入这一个并尝试

dialog.setCanceledOnTouchOutside(false);

如果使用此方法,当用户意外触碰屏幕时,对话框不会被取消,但如果用户按下返回按钮,则会被取消。


9
这很简单。
dialog.setOnKeyListener(new Dialog.OnKeyListener() {
        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                dialog.dismiss();
            }
            return true;
        }
    });

8
你可以使用 getFragmentManager().popBackStackImmediate(); 方法。它可用于在 Android 应用程序中管理 fragment 的后退栈。
dialog.setOnKeyListener(new Dialog.OnKeyListener() {
        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                dialog.dismiss();
                getFragmentManager().popBackStackImmediate();
            }
            return true;
        }
    });

感谢添加返回上一个片段的功能。运行良好! - Mallika Khullar

0
请将以下代码放置在您初始化alertDialogbuilder的位置。
    alertDialogBuilder = new AlertDialog.Builder(this);

    alertDialogBuilder.setOnKeyListener(new Dialog.OnKeyListener() {
        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                dialog.dismiss();
                getFragmentManager().popBackStackImmediate();
            }
            return true;
        }
    });

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