Sudheesh B Nair hat eine gute (und akzeptierte) Antwort auf die Frage, die ich für eine bessere Alternative halte, wie zum Beispiel;
Was ist falsch daran, die vergangene Zeit zu messen und zu überprüfen, ob TIME_INTERVAL
Millisekunden (sagen wir 2000) seit dem letzten Zurückdrücken vergangen sind. Der folgende Beispielcode verwendet System.currentTimeMillis();
um die Zeit zu speichern, wenn onBackPressed()
aufgerufen wird;
private static final int TIME_INTERVAL = 2000; // # Millisekunden, gewünschte Zeit zwischen zwei Zurück-Drücken.
private long mBackPressed;
@Override
public void onBackPressed()
{
if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis())
{
super.onBackPressed();
return;
}
else { Toast.makeText(getBaseContext(), "Tippen Sie auf die Zurück-Taste, um zu beenden", Toast.LENGTH_SHORT).show(); }
mBackPressed = System.currentTimeMillis();
}
Zurück zur akzeptierten Antwort Kritik; Die Verwendung einer flag
um anzuzeigen, ob sie in den letzten TIME_INTERVAL
(sagen wir 2000) Millisekunden gedrückt wurde und das Festlegen - Zurücksetzen erfolgt über Handler
's postDelayed()
Methode war das erste, was mir in den Sinn kam. Aber die postDelayed()
Aktion sollte abgebrochen werden, wenn die Aktivität geschlossen wird, indem der Runnable
entfernt wird.
Um den Runnable
zu entfernen, darf er nicht anonym deklariert sein und muss zusammen mit dem Handler
als Mitglied deklariert werden. Dann kann die Methode removeCallbacks()
des Handlers
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, "Bitte nochmal auf ZURÜCK klicken, um zu beenden", Toast.LENGTH_SHORT).show();
mHandler.postDelayed(mRunnable, 2000);
}
Danke an @NSouth für den Beitrag; Um zu verhindern, dass die Toast-Meldung auch nachdem die Anwendung geschlossen wurde weiterhin erscheint, kann Toast
als Mitglied deklariert werden - sagen wir mExitToast
- und kann über mExitToast.cancel();
kurz vor dem Aufruf von super.onBackPressed();
abgebrochen werden.
0 Stimmen
[Android - Bestätigung des App-Austritts mit Toast] [1]: stackoverflow.com/questions/14006461/…
1 Stimmen
Ich hatte das gleiche Problem beim Verwenden der HoloEverywhere-Bibliothek, zu einfach können Sie android:launchMode="singleTask" zur Aktivitätsdefinition in der Manifestdatei hinzufügen.
0 Stimmen
Andere Lösung stackoverflow.com/questions/8430805/…
1 Stimmen
Mögliche Duplikat von beim doppelten Klicken auf die Android-Zurück-Taste, um die App zu verlassen