#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 (), чтобы он был чем-то уникальным.