SetCancelable和Back Button(android)

时间:2016-06-13 22:43:55

标签: android

我有一个应用程序,当用户按下BACK按钮时,它显示对话框,对话框无法取消所以我设置它setCancelable(false)

但我想在用户再次按下BACK按钮时关闭对话框。 ( 如果用户按下后退按钮,显示对话框。 如果用户再次按下“返回按钮”,则关闭对话框 )

我的代码

private boolean dialogshown = false;
private AlertDialog d;
public boolean onKeyDown(int keycode, KeyEvent e) {   
  if(keycode == KeyEvent.KEYCODE_BACK)
    if(!dialogshown) {
        d = new AlertDialog.Builder(MainActivity.this).create();
        d.setButton(AlertDialog.BUTTON_POSITIVE, "Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        dialogshown = false;
                    }
                });
        d.setButton(AlertDialog.BUTTON_NEGATIVE, "Exit",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                        System.exit(0);
                    }
                });
        d.setCancelable(false);
        d.show();
        dialogshown = true;
    } else {
        try{ d.dismiss(); }catch (Exception exc){Toast.makeText(this,"Error back",Toast.LENGTH_LONG).show();}
    }
return super.onKeyDown(keycode, e);
}

问题是,当我按“返回”按钮时,它会显示一个对话框,但当我再次按下它时,什么都不会发生

2 个答案:

答案 0 :(得分:0)

试试这段代码:

AlertDialog alertDialog;
     public void onBackPressed() {
            if(alertDialog == null || !alertDialog.isShowing()){
                alertDialog = = new AlertDialog.Builder(context)
                .setTitle("Delete entry")
                .setMessage("Are you sure you want to delete this entry?")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // continue with delete
                    }
                })
                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // do nothing
                    }
                })
                .setIcon(android.R.drawable.ic_dialog_alert)
                .show();
            }else{
                alertDialog.cancel();
            }
}

无需维护任何额外的变量来执行此操作。

希望它会对你有所帮助:)。

答案 1 :(得分:-1)

为对话框打开或不打开布尔值。

isDialogOpen = false 

并覆盖背压。当用户按下此方法时会调用。

    @Override
    public void onBackPressed() {
    if(isDialogOpen==false){
                d.show();
                 isDialogOpen == true;
            }
            else {
                isDialogOpen == false;
                d.dismiss();
                finish();
            }
     }

我希望这能解决你的问题。

编辑:感谢akyirem samuel