Sudheesh B Nair tiene una respuesta agradable (y aceptada) sobre la pregunta, que creo que debería tener una mejor alternativa como;
¿Qué hay de malo en medir el tiempo transcurrido y verificar si TIME_INTERVAL
pasaron milisegundos (por ejemplo, 2000) desde la última vez que presionó hacia atrás? Se llama al siguiente código de muestra System.currentTimeMillis();
para almacenar el tiempo onBackPressed()
;
private static final int TIME_INTERVAL = 2000; // # milliseconds, desired time passed between two back presses.
private long mBackPressed;
@Override
public void onBackPressed()
{
if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis())
{
super.onBackPressed();
return;
}
else { Toast.makeText(getBaseContext(), "Tap back button in order to exit", Toast.LENGTH_SHORT).show(); }
mBackPressed = System.currentTimeMillis();
}
Volver a la respuesta aceptada crítica ; El uso de a flag
para indicar si se presionó en los últimos TIME_INTERVAL
milisegundos (por ejemplo, 2000) y se estableció el restablecimiento mediante Handler
el postDelayed()
método fue lo primero que se me ocurrió. Pero la postDelayed()
acción debe cancelarse cuando se cierra la actividad, eliminando el Runnable
.
Para eliminarlo Runnable
, no debe declararse anónimo , y debe declararse como miembro junto con el Handler
también. Entonces removeCallbacks()
método deHandler
puede ser llamado apropiadamente.
La siguiente muestra es la demostración;
private boolean doubleBackToExitPressedOnce;
private Handler mHandler = new Handler();
private final Runnable mRunnable = new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce = false;
}
};
@Override
protected void onDestroy()
{
super.onDestroy();
if (mHandler != null) { mHandler.removeCallbacks(mRunnable); }
}
@Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
mHandler.postDelayed(mRunnable, 2000);
}
Gracias a @NSouth por contribuir; Para evitar que aparezcan mensajes de brindis incluso después de cerrar la aplicación, Toast
puede declararse como miembro, digamos mExitToast
, y puede cancelarse mExitToast.cancel();
justo antes de la super.onBackPressed();
llamada.