Sudheesh B Nair a une réponse agréable (et acceptée) à la question, qui je pense devrait avoir une meilleure alternative telle que;
Quel est le problème avec la mesure du temps écoulé et la vérification si les TIME_INTERVAL
millisecondes (disons 2000) se sont écoulées depuis la dernière pression arrière. L'exemple de code suivant utilise System.currentTimeMillis();
pour stocker l'heure onBackPressed()
est appelé;
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();
}
Retour sur la critique des réponses acceptées ; Utiliser une flag
pour indiquer si elle a été pressée au cours des dernières TIME_INTERVAL
(disons 2000) millisecondes et set - reset est par Handler
la postDelayed()
méthode de via a été la première chose qui m'est venue à l'esprit. Mais l' postDelayed()
action doit être annulée à la fermeture de l'activité, supprimant le Runnable
.
Afin de supprimer le Runnable
, il ne doit pas être déclaré anonyme et être déclaré comme membre avec l' Handler
aswell. Ensuite, la removeCallbacks()
méthode de Handler
peut être appelée de manière appropriée.
L'exemple suivant est la démonstration;
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);
}
Merci à @NSouth pour sa contribution; Afin d'éviter que le message toast n'apparaisse même après la fermeture de l'application, il Toast
peut être déclaré membre - disons mExitToast
- et peut être annulé via mExitToast.cancel();
juste avant l' super.onBackPressed();
appel.