Kürzlich musste ich diese Funktion der Zurück-Taste in einer meiner Anwendungen implementieren. Die Antworten auf die ursprüngliche Frage waren nützlich, aber ich musste noch zwei weitere Punkte berücksichtigen:
- Zu bestimmten Zeitpunkten ist die Zurück-Taste deaktiviert
- Die Hauptaktivität ist die Verwendung von Fragmenten in Kombination mit einem Backstack
Auf der Grundlage der Antworten und Kommentare 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() {
// Do nothing if the back button is disabled.
if (!mBackPressCancelled) {
// Pop fragment if the back stack is not empty.
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 setzt voraus, dass die Support-Bibliothek verwendet wird. Wenn Sie Fragmente, aber nicht die Unterstützungsbibliothek verwenden, müssen Sie die getSupportFragmentManager()
von getFragmentManager()
.
Entfernen Sie die erste if
wenn die Rückwärtstaste nie aufgehoben wird. Entfernen Sie die zweite if
wenn Sie keine Fragmente oder einen Fragment-Backstack verwenden
Außerdem ist es wichtig zu wissen, dass die Methode onBackPressed
wird seit Android 2.0 unterstützt. Prüfen Sie diese Seite für eine ausführliche Beschreibung. Damit die Funktion "Zurückdrücken" auch bei älteren Versionen funktioniert, fügen Sie die folgende Methode zu Ihrer Aktivität 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) {
// Take care of calling this method on earlier versions of
// the platform where it doesn't exist.
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}