Я попытался переопределить метод onkeydown () вместе с методом onBackPressed () , но диалоговое окно с предупреждением не отображается, а просто возвращается к предыдущему намерению. попробовал несколько примеров, но ни один из них не сработал.

 @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","");

}

0
Shehani Perera 24 Апр 2017 в 05:57

2 ответа

Лучший ответ
@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 ();

0
Johnett Mathew 24 Апр 2017 в 04:53
  • Совет 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(){
     ...
    }
    
1
xiaoyuan 24 Апр 2017 в 03:11
43579093