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_INTERVAL
seit 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 Handler
as 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, Toast
können sie beispielsweise als Mitglied deklariert mExitToast
und über mExitToast.cancel();
kurz zuvor gekündigt werdensuper.onBackPressed();
Anruf .