Диалог на нажатой клавише BackKey
У меня есть alertDialog
для моей игры, когда я нажимаю backkey
моего устройства появится диалоговое окно. если я нажимаю "Выйти", моя игра закрывается, а если я нажимаю "Отключить", то на 3 секунды появляется тост, а через 3 секунды моя игра начинается снова. Теперь проблема в том, что когда я нажимаю в первый раз backkey
моего устройства, затем появляется диалоговое окно, и я выполняю некоторые функции, все работает нормально, но если я нажимаю backkey
снова без "Cancle" или "Quit" из игры, тогда моя игра не возобновится, пока я не нажму кнопку "No".
То, что я хочу, это если я нажимаю backkey
затем появится диалоговое окно, и если я нажму backkey
снова моя игра возобновляется снова, не показывая мне диалог снова спасибо.
Вот мой код диалога предупреждения:
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// GamePanel.thread.setStoped(true);
GamePanel.thread.setRunning(false);
// in the next line of code we also style the dialog through xml which i put in styles
AlertDialog alertDialog = new AlertDialog.Builder(this,R.style.myBackgroundStyle).create();
alertDialog.setTitle("Exit Alert");
alertDialog.setMessage("Do you really want to exit the Game?");
alertDialog.setButton("Quit", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//Best way is firstly use finish() and after that use System.exit(0) to clear static variables. It will give you some free space.
// A lot of applications leave working processes and variables what makes me angry. After 30 minutes of using memory is full and i have to run Task Manager - Lvl 2 clear memory
finish();
System.exit(0);
return;
}
});
alertDialog.setButton2("Cancle", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// dialog.cancel();
// GamePanel.thread.resume();
dialog.dismiss();
// When user press the "Cancle" button then game resume for 3 seconds then start again
// Here is the Code of the toasts and each toast appear with delay of one second.
toast = new Toast(Game.this);
TextView textView=new TextView(Game.this);
textView.setTextColor(Color.DKGRAY);
textView.setBackgroundColor(Color.TRANSPARENT);
textView.setTextSize(60);
textView.setText("READY!");
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setView(textView);
toast.show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// show toast 2.
toast = new Toast(Game.this);
TextView textView = new TextView(Game.this);
textView.setTextColor(Color.DKGRAY);
textView.setBackgroundColor(Color.TRANSPARENT);
textView.setTextSize(140);
textView.setText("3");
// textView.setText("done!");
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setView(textView);
toast.show();
}
}, 2500);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// show toast 2.
toast = new Toast(Game.this);
TextView textView = new TextView(Game.this);
textView.setTextColor(Color.DKGRAY);
textView.setBackgroundColor(Color.TRANSPARENT);
textView.setTextSize(140);
textView.setText("2");
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setView(textView);
toast.show();
}
}, 5000);
new Handler().postDelayed(new Runnable() {
@Override public void run() {
toast = new Toast(Game.this);
TextView textView=new TextView(Game.this);
textView.setTextColor(Color.DKGRAY);
textView.setBackgroundColor(Color.TRANSPARENT);
textView.setTextSize(140);
textView.setText("1");
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setView(textView);
toast.show();
}
}, 7500);
new Handler().postDelayed(new Runnable() {
@Override
public void run()
GamePanel.thread.setRunning(true);
}
}, 10000);
return;
}
}
);
alertDialog.show();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
1 ответ
Вам нужно установить OnKeyListener
в диалоговом окне и проверьте, нажата ли кнопка возврата.
Вот пример кода, который соответствует вашим потребностям, вам нужно изменить ваш код следующим образом:
AlertDialog alertDialog = new AlertDialog.Builder(this,R.style.myBackgroundStyle).create();
alertDialog.setTitle("Exit Alert");
alertDialog.setMessage("Do you really want to exit the Game?");
alertDialog.setButton("Quit", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//Best way is firstly use finish() and after that use System.exit(0) to clear static variables. It will give you some free space.
// A lot of applications leave working processes and variables what makes me angry. After 30 minutes of using memory is full and i have to run Task Manager - Lvl 2 clear memory
finish();
System.exit(0);
return;
}
});
//New part regarding the back key when only dialog is shown.
alertDialog.setOnKeyListener(new Dialog.OnKeyListener() {
@Override
public boolean onKey(DialogInterface arg0, int keyCode,
KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
alertDialog.dismiss();
}
return true;
}
});
это будет работать только тогда, когда появится диалоговое окно, поэтому вы сможете вернуться к своей деятельности