Я пытаюсь добиться, чтобы когда пользователь нажимал кнопку «Назад», когда MENU
виден, состояние menuActual
и MENU
меняется с видимого на невидимое. Если MENU
не открыт и пользователь щелкает обратно, то отображается Toast
с надписью "Press again to Exit"
, и если вы щелкнете обратно в течение 2 секунд, приложение закроется.
Код, который у меня есть:
@Override
public void finish() {
if (MENU.getVisibility() == View.VISIBLE){
MENU.setVisibility(View.INVISIBLE);
menuActual.setVisibility(View.INVISIBLE);
}else {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
moveTaskToBack(true);
return;
}else {
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Tap again to Exit!", Toast.LENGTH_SHORT).show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
}
}
}`
Я заявил boolean doubleBackToExitPressedOnce = false;
Приложение доходит до того, что отображает Toast
с надписью "Press again to Exit"
, но если снова нажать кнопку "Назад", приложение сообщает ""AppName isn't responding"
".
Пытаясь понять, почему это так, был долгий день.
Спасибо!
Сделайте это в onBackPressed
так:
private boolean doubleBackToExitPressedOnce = false;
private Handler handler;
private Runnable runnable;
@Override
public void onBackPressed() {
if (MENU.getVisibility() == View.VISIBLE) {
MENU.setVisibility(View.INVISIBLE);
menuActual.setVisibility(View.INVISIBLE);
return;
}
if (!doubleBackToExitPressedOnce) {
doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Tap again to Exit!", Toast.LENGTH_SHORT).show();
handler = new Handler();
handler.postDelayed(runnable = new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
return;
}
// Removes the callBack
handler.removeCallbacks(runnable);
// Replace this next line with finishAffinity() if you want to close the app.
super.onBackPressed();
}