关闭片段backPress上的不可取消对话框 - Android

Mal*_*lar 6 android dialog onbackpressed

我有一个导航抽屉活动和我通过导航抽屉到达的许多片段.

在其中一些片段中,我会在后台任务发生时显示一个"正在加载..."的对话框.

现在我已经使我的对话框不可取消,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();
Run Code Online (Sandbox Code Playgroud)

我需要编写代码来关闭加载对话框,并在任何片段上按下电话后退按钮时转到上一个片段.

有人可以帮帮我吗?大多数情况下,我需要实现特定于片段的backPress.谢谢!

Usm*_*urd 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;
        }
    });
Run Code Online (Sandbox Code Playgroud)


Nav*_*yle 7

这很简单

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;
        }
    });
Run Code Online (Sandbox Code Playgroud)


Lak*_*ngh 6

删除您的代码行:

dialog.setCancelable(false); 
Run Code Online (Sandbox Code Playgroud)

并把这一个尝试

dialog.setCanceledOnTouchOutside(false);
Run Code Online (Sandbox Code Playgroud)

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