Sudheesh B Nair hat eine nette (und akzeptierte) Antwort auf die Frage, die meiner Meinung nach eine bessere Alternative haben sollte, wie zum Beispiel;
Was ist falsch daran, die verstrichene Zeit zu messen und zu prüfen, ob TIME_INTERVAL
Milisekunden (z. B. 2000) seit dem letzten Drücken der Taste "Zurück" vergangen sind. Der folgende Beispielcode verwendet System.currentTimeMillis();
zum Speichern der Uhrzeit onBackPressed()
genannt wird;
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 zur akzeptierten Antwort Kritik Mit einer flag
um anzuzeigen, ob sie zuletzt gedrückt wurde TIME_INTERVAL
(sagen wir 2000) Millisekunden und einstellen - zurücksetzen erfolgt über Handler
's postDelayed()
Methode war das erste, was mir einfiel. Aber die postDelayed()
Aktion sollte abgebrochen werden, wenn die Aktivität geschlossen wird, wodurch die Runnable
.
Um die Runnable
darf sie nicht angegeben werden anonyme und wird zusammen mit dem Mitglied Handler
ebenfalls. Dann removeCallbacks()
Methode der Handler
entsprechend aufgerufen werden kann.
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);
}
Dank an @NSouth für seinen Beitrag; Um zu verhindern, dass Toastnachricht auch nach dem Schließen der Anwendung angezeigt werden, Toast
kann als Mitglied deklariert werden - zum Beispiel mExitToast
- und kann gelöscht werden über mExitToast.cancel();
kurz vor super.onBackPressed();
anrufen.