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

4 回答 4

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;
        }
    });
于 2015-09-30T10:19:41.383 回答
9

删除您的代码行:

dialog.setCancelable(false); 

把这个放上去试试

dialog.setCanceledOnTouchOutside(false);

这样,如果用户不小心触摸屏幕,您的对话框将不会取消,但如果用户按下后退按钮,它将取消

于 2015-09-30T10:24:15.047 回答
8

您可以使用 getFragmentManager().popBackStackImmediate();

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;
        }
    });
于 2015-09-30T10:28:22.037 回答
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;
        }
    });
于 2018-11-10T10:29:33.143 回答