OnBackPressed 不显示警报

OnBackPressed doesn't display alert

我尝试重写 onkeydown() 方法以及 onBackPressed() 方法,但没有出现警告对话框相反,它只是回到之前的 intent.I 尝试了几个示例,但其中 none 成功了。

 @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
          if (keyCode == KeyEvent.KEYCODE_BACK) {
        onBackPressed();

      }

      return super.onKeyDown(keyCode, event);
   }

      @Override
       public void onBackPressed() {


       Log.d("confirm save method","");
        AlertDialog.Builder builder = new AlertDialog.Builder(this);

           builder.setTitle("");
           builder.setMessage("Do you want to Save the Game ?");
           builder.setCancelable(false);
               builder.setPositiveButton("YES",
                 new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int which) {
                    finish();
                    System.exit(0);
                }
            });

    builder.setNegativeButton("NO",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });

               AlertDialog alert = builder.create();
              alert.show();


            Log.d("confirm save method","");

}

  • 提示 1:如果覆盖 onBackPressed,则不必覆盖 onKeyDown(int keyCode, KeyEvent event)。那很复杂。删除这个方法(onKeyDown)可以解决这个问题。
  • 技巧2:return true中断此按键事件

     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
          if (keyCode == KeyEvent.KEYCODE_BACK) {
          alertAialog();
          return true;
          }
    
      return super.onKeyDown(keyCode, event);
    }
    private void alertDialog(){
     ...
    }
    
@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Are you sure you want to exit?")
            .setTitle("Exit Alert")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    //finishAffinity(); 
                    finish();  //or do anything
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
}

试试这个代码,同时删除你的 onKeyDown();