Sudheesh B Nair hat eine nette (und akzeptierte) Antwort auf die Frage, die meiner Meinung nach eine bessere Alternative haben sollte, wie z.
Was ist falsch daran, die verstrichene Zeit zu messen und zu überprüfen, ob TIME_INTERVALseit dem letzten Zurückdrücken Millisekunden (z. B. 2000) vergangen sind ? Der folgende Beispielcode System.currentTimeMillis();zum Speichern der Uhrzeit onBackPressed()wird aufgerufen.
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();
}
Zurück auf akzeptierte Antwort Kritik ; Verwendung einerflag um anzuzeigen , ob es in der letzten gedrückt wurde TIME_INTERVAL(etwa 2000) Millisekunden und Set - Reset ist über Handler‚s - postDelayed()Methode das erste , was in meinem Kopf zu kommen war. Die postDelayed()Aktion sollte jedoch abgebrochen werden, wenn die Aktivität geschlossen wirdRunnable .
Um das zu entfernen Runnable, darf es nicht anonym deklariert und zusammen mit dem Handleras auch als Mitglied deklariert werden. Dann removeCallbacks()Methode vonHandler kann die entsprechend aufgerufen werden.
Das folgende Beispiel ist die Demonstration;
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);
}
Vielen Dank an @NSouth für Ihren Beitrag. Um zu verhindern, dass Toastnachrichten auch nach dem Schließen der Anwendung angezeigt werden, Toastkönnen sie beispielsweise als Mitglied deklariert mExitToastund über mExitToast.cancel();kurz zuvor gekündigt werdensuper.onBackPressed(); Anruf .