Kürzlich musste ich dieses Zurück-Taste-Feature in einer meiner Apps implementieren. Die Antworten auf die ursprüngliche Frage waren hilfreich, aber ich musste zwei weitere Punkte beachten:
- Zu einigen Zeitpunkten ist die Zurück-Taste deaktiviert
- Die Hauptaktivität verwendet Fragmente in Kombination mit einem Back-Stack
Basierend auf den Antworten und Kommentaren habe ich den folgenden Code erstellt:
private static final long BACK_PRESS_DELAY = 1000;
private boolean mBackPressCancelled = false;
private long mBackPressTimestamp;
private Toast mBackPressToast;
@Override
public void onBackPressed() {
// Nichts tun, wenn die Zurück-Taste deaktiviert ist.
if (!mBackPressCancelled) {
// Fragment aus dem Back-Stack entfernen, wenn der Back-Stack nicht leer ist.
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
super.onBackPressed();
} else {
if (mBackPressToast != null) {
mBackPressToast.cancel();
}
long currentTimestamp = System.currentTimeMillis();
if (currentTimestamp < mBackPressTimestamp + BACK_PRESS_DELAY) {
super.onBackPressed();
} else {
mBackPressTimestamp = currentTimestamp;
mBackPressToast = Toast.makeText(this, getString(R.string.warning_exit), Toast.LENGTH_SHORT);
mBackPressToast.show();
}
}
}
}
Der obige Code geht davon aus, dass die Support-Bibliothek verwendet wird. Wenn du Fragmente verwendest, aber nicht die Support-Bibliothek, musst du getSupportFragmentManager()
durch getFragmentManager()
ersetzen.
Entferne das erste if
, wenn die Zurück-Taste nie abgebrochen wird. Entferne das zweite if
, wenn du keine Fragmente oder einen Fragment-Back-Stack verwendest
Es ist auch wichtig zu beachten, dass die Methode onBackPressed
seit Android 2.0 unterstützt wird. Überprüfe diese Seite für eine ausführliche Beschreibung. Um die Zurück-Taste-Funktion auch auf älteren Versionen zum Laufen zu bringen, füge der Aktivität folgende Methode hinzu:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
// Umgang mit dem Aufruf dieser Methode auf früheren Versionen
// der Plattform, auf denen sie nicht existiert.
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
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