Sudheesh B Nair Le site de l'association a une bonne réponse (et acceptée) à la question, mais je pense qu'il devrait y avoir une meilleure alternative, par exemple ;
Qu'y a-t-il de mal à mesurer le temps passé et à vérifier si TIME_INTERVAL
milisecondes (disons 2000) écoulées depuis la dernière pression arrière. L'exemple de code suivant utilise System.currentTimeMillis();
pour enregistrer l'heure onBackPressed()
s'appelle ;
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 réponse acceptée critique ; Utilisation d'un flag
pour indiquer si elle a été pressée en dernier TIME_INTERVAL
(disons 2000) millisecondes et set - reset est via Handler
's postDelayed()
la méthode a été la première chose qui m'est venue à l'esprit. Mais la postDelayed()
doit être annulée lors de la clôture de l'activité, en supprimant l'action Runnable
.
Afin d'enlever le Runnable
il ne doit pas être déclaré anonyme et être déclarée comme membre avec le Handler
également. Puis removeCallbacks()
méthode de Handler
peut être appelé de manière appropriée.
L'exemple suivant en 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 de prévenir message de toast apparaissant même après la fermeture de l'application, Toast
peut être déclaré comme un membre - disons mExitToast
- et peut être annulé via mExitToast.cancel();
juste avant super.onBackPressed();
appeler.
0 votes
[Android - Confirmez la sortie de l'application avec un toast] [1] : stackoverflow.com/questions/14006461/
1 votes
J'ai eu le même problème en utilisant la bibliothèque HoloEverywhere. Il suffit d'ajouter Android:launchMode="singleTask" à la définition de votre activité dans le fichier manifeste.
0 votes
Autre solution stackoverflow.com/questions/8430805/
1 votes
Duplicata possible de cliquer deux fois sur le bouton retour d'Android pour quitter l'application