对话框上的后退按钮正在取消对话框,即使我有一个监听器

Sna*_*ake 1 android android-alertdialog

我有一个对话框显示,我希望在按下后退按钮时要求用户确认他要在取消生效前取消对话框.这是我的代码:

dialog.setOnCancelListener(new OnCancelListener(){

            @Override
            public void onCancel(DialogInterface arg0) {
                AlertDialog.Builder builder = new AlertDialog.Builder(dialog.getContext());
                builder.setMessage( "Are you sure you want to cancel?")
                       .setCancelable(false)
                       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface diag, int id) {
                               diag.dismiss();
                               dialog.dismiss();

                           }
                       })
                       .setNegativeButton("No", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface diag, int id) {
                                diag.cancel();
                           }
                       });
                AlertDialog alert = builder.create();
                alert.show();               
            }

        });
        dialog.show();
Run Code Online (Sandbox Code Playgroud)

问题是,当按下后退按钮时,我的当前对话框被取消,然后显示我的"确认消息".在用户确认对话框之前,如何确保不取消对话框?

Apr*_*ian 6

onCancel取消对话框时调用,这就是取消对话框后显示确认消息的原因.你应该setOnKeyListener改为对话.

dialog.setOnKeyListener(new OnKeyListener() {
    @Override
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Toast.makeText(Activity.this, "back pressed", Toast.LENGTH_SHORT).show();
            return true;
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)