Sie haben die onKeyDown()
Methode in der Activity
außer Kraft zu setzen.
Dadurch wird das Ereignis "Zurück" erfasst und der Benutzer zum ersten Element im ViewPager gesendet.
Es gibt auch ViewPager#getCurrentItem(), die verwendet werden kann, um nur zurückzugehen, wenn der Benutzer geklaut hat. Eine Implementierung wie folgt:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && myViewPager.getCurrentItem() == 1) {
myViewPager.setCurrentItem(0, true);
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
würde den Benutzer zurück zur vorherigen Seite nur senden, wenn der Benutzer auf der nächsten Seite war. Anderenfalls wird das "Zurück" normal registriert und der Benutzer wird wie erwartet verlassen.
Möglicherweise möchten Sie den Fall, in dem der Benutzer zur vorherigen Seite zurückkehrt (vorausgesetzt, Sie haben mehr als zwei Seiten). In diesem Fall möchten Sie die ViewPager.OnPageChangeListener() implementieren und die Position jedes Mal speichern, wenn onPageSelected(int position)
aufgerufen wird. Wenn Sie sie in einem Stapel implementieren, können Sie sie bei jedem Drücken des "Zurück" -Buttons wieder entfernen. Sobald der Stapel leer ist, beenden Sie die App.
EDIT
Wie richtig in den Kommentaren von Jade Byfield, eine etwas einfacher Weise erklärt, dies zu tun wäre onBackPressed()
in der Aktivität zu verwenden. Dies funktioniert nur in API-Level 5+.
@Override
public void onBackPressed() {
if(i_dont_want_to_leave) {
myViewPager.setCurrentItem(0, true);
} else {
super.onBackPressed(); // This will pop the Activity from the stack.
}
}
Könnte er onBackPressed auch überschreiben? Oder ist das nur für frühere APIs? –
Die Verwendung von onKeyDown() funktioniert auf jeder Plattform-API-Ebene 1+. Außerdem verhindert onBackPressed nicht, dass die Aktivität vom Stapel entfernt wird, es sei denn, ich habe die ganze Zeit falsch verwendet. Wenn Sie in 'onKeyDown()' '' true '' zurückgeben, dann ist das die einzige Sache, die passiert, und das Ereignis stoppt die Kaskadierung. – DeeV
Warten. Ich hatte gerade eine Gehirnwäsche. Ja. Er kann onBackPressed() verwenden, wenn er auf API 5+ abzielen möchte. Rufen Sie einfach nicht 'super.onBackPressed()' auf, es sei denn, Sie sind absolut sicher, dass Sie den Vorgang beenden möchten. – DeeV