Диалоговое окно, отображаемое дважды при нажатии кнопки «Назад»

#android #android-alertdialog #onkeydown

#Android #android-alertdialog #onkeydown

Вопрос:

В коде диалоговое окно отображается два раза, когда я нажимаю кнопку «Назад». Кто-нибудь, пожалуйста, может сказать мне, как получить диалоговое окно только один раз?

 public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK))
        {
            onBackPressed();
        }
        return super.onKeyDown(keyCode, event);
         }

public void onBackPressed()
    {

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("Do you want to save configuration?");
            builder.setPositiveButton
                           ("Yes", new DialogInterface.OnClickListener()
            {
                public void onClick(DialogInterface dialog, int id)
                {
                //here saveConfiguration is boolean type    
                    if (saveConfiguration()) 

                                              {
                        dialog.dismiss();
                        finish();

                    }
                    else
                    {
                        dialog.dismiss();
                    }

                }
            });
            builder.setNegativeButton("No", new DialogInterface.OnClickListener()
            {
                public void onClick(DialogInterface dialog, int id)
                {
                    dialog.dismiss();
                    finish();
                }
            });
            builder.show();
    }



}
  

Ответ №1:

Ваше диалоговое окно появляется дважды, потому что оно использует два события от клавиши «Назад», то есть клавишу «Вниз» и клавишу «вверх».. ограничьте это любым из них..

              if (event.getAction() != KeyEvent.ACTION_DOWN)
 {

      /* Now call onBackPressed method here */
 }
  

Ответ №2:

onBackPressed () является стандартным методом работы

Что вы делаете, так это вызываете этот метод из onKeyDown вручную, а затем вызываете его снова, делегируя событие дальше через super.onKeyDown(код ключа, событие) (который регистрирует, что вы нажали назад, и автоматически вызывает onBackPressed());

Если вы хотите работать с событием обратного нажатия клавиши, то либо полностью удалите метод onKeyDown и используйте только onBackPressed (), либо переименуйте ваш onBackPressed (), чтобы он был чем-то уникальным.