Die Zurück-Navigation ist die Art und Weise, wie sich Nutzer durch den Verlauf von Bildschirmen rückwärts navigieren, die sie zuvor besucht haben. Bei allen Android-Geräten gibt es für diese Art der Navigation eine Zurück-Schaltfläche. Fügen Sie also keine Zurück-Schaltfläche zur App-Benutzeroberfläche hinzu. Je nach Android-Gerät des Nutzers kann diese Taste eine physische Taste oder eine Softwaretaste sein.
Android verwaltet einen Back-Stack aus Zielen, während der Nutzer durch deine App navigiert. So kann Android korrekt zu vorherigen Zielen navigieren, wenn die Schaltfläche „Zurück“ gedrückt wird. Es gibt jedoch einige Fälle, in denen Ihre App ihr eigenes „Back“-Verhalten implementieren muss, um die bestmögliche Nutzererfahrung zu bieten.
Wenn Sie beispielsweise ein WebView
verwenden, können Sie das Standardverhalten der Schaltfläche „Zurück“ überschreiben, damit der Nutzer anstatt zu den vorherigen Bildschirmen in Ihrer App durch seinen Browserverlauf zurückspringen kann.
Android 13 und höher bietet auf Android-Geräten eine vorausschauende Touch-Geste „Zurück“. Weitere Informationen zu dieser Funktion finden Sie unter Unterstützung für die vorausschauende „Zurück“-Touch-Geste hinzufügen.
Benutzerdefinierte Rückwärtsnavigation implementieren
Mit ComponentActivity
, der Basisklasse für FragmentActivity
und AppCompatActivity
, können Sie das Verhalten der Schaltfläche „Zurück“ mithilfe der Schaltfläche OnBackPressedDispatcher
steuern, die Sie durch Aufrufen von getOnBackPressedDispatcher()
abrufen können.
Mit OnBackPressedDispatcher
wird festgelegt, wie Ereignisse für die Schaltfläche „Zurück“ an ein oder mehrere OnBackPressedCallback
-Objekte gesendet werden. Der Konstruktor für OnBackPressedCallback
verwendet einen booleschen Wert für den anfänglichen aktivierten Status. Wenn ein Callback aktiviert ist – isEnabled()
also true
zurückgibt – ruft der Disponent den handleOnBackPressed()
des Callbacks auf, um das Ereignis für die Schaltfläche „Zurück“ zu verarbeiten. Sie können den aktivierten Status durch Aufrufen von setEnabled()
ändern.
Callbacks werden mit den addCallback
-Methoden hinzugefügt. Wir empfehlen die Verwendung der Methode addCallback()
, für die ein LifecycleOwner
erforderlich ist.
Dadurch wird sichergestellt, dass OnBackPressedCallback
nur dann hinzugefügt wird, wenn LifecycleOwner
gleich Lifecycle.State.STARTED
ist.
Durch die Aktivität werden auch registrierte Callbacks entfernt, wenn der zugehörige LifecycleOwner
gelöscht wird. Dadurch werden Speicherlecks verhindert und LifecycleOwner
für die Verwendung in Fragmenten oder anderen Lebenszyklusinhabern mit einer kürzeren Lebensdauer als die Aktivität geeignet.
Hier ist ein Beispiel für eine Callback-Implementierung:
Kotlin
class MyFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // This callback is only called when MyFragment is at least started val callback = requireActivity().onBackPressedDispatcher.addCallback(this) { // Handle the back button event } // The callback can be enabled or disabled here or in the lambda } ... }
Java
public class MyFragment extends Fragment { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // This callback is only called when MyFragment is at least started OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) { @Override public void handleOnBackPressed() { // Handle the back button event } }; requireActivity().getOnBackPressedDispatcher().addCallback(this, callback); // The callback can be enabled or disabled here or in handleOnBackPressed() } ... }
Mit addCallback()
kannst du mehrere Callbacks angeben.
In diesem Fall werden die Callbacks in umgekehrter Reihenfolge von der Reihenfolge, in der Sie sie hinzufügen, aufgerufen. Der zuletzt hinzugefügte Callback ist die erste mit der Möglichkeit, das Ereignis für die Zurück-Schaltfläche zu verarbeiten. Wenn Sie beispielsweise drei Callbacks mit den Namen one
, two
und three
in dieser Reihenfolge hinzufügen, werden sie in der Reihenfolge three
, two
, one
aufgerufen.
Callbacks folgen dem Muster der Chain of Responsibility. Jeder Callback in der Kette wird nur aufgerufen, wenn der vorherige Callback nicht aktiviert war. Das bedeutet, dass im vorherigen Beispiel der Callback two
nur dann aufgerufen wird, wenn der Callback three
nicht aktiviert ist, und der Callback one
nur dann, wenn der Callback two
nicht aktiviert ist.
Wenn der Callback mit addCallback()
hinzugefügt wird, wird er erst dann der Verantwortungskette hinzugefügt, wenn LifecycleOwner
den Status Lifecycle.State.STARTED
erhält.
Wir empfehlen, den aktivierten Status für OnBackPressedCallback
für temporäre Änderungen zu ändern, um so die oben beschriebene Reihenfolge beizubehalten.
Das ist besonders wichtig, wenn Sie Callbacks für mehrere verschachtelte Lebenszyklusinhaber registriert haben.
Wenn Sie das OnBackPressedCallback
vollständig entfernen möchten, können Sie remove()
aufrufen.
Dies ist in der Regel nicht erforderlich, da Callbacks automatisch entfernt werden, wenn die zugehörige LifecycleOwner
gelöscht wird.
Aktivität onBackPressed()
Wenn Sie onBackPressed()
zur Verarbeitung von Ereignissen für die Schaltfläche „Zurück“ verwenden, empfehlen wir stattdessen die Verwendung von OnBackPressedCallback
.
Wenn Sie diese Änderung nicht vornehmen können, gelten die folgenden Regeln:
- Alle über
addCallback
registrierten Callbacks werden ausgewertet, wenn Siesuper.onBackPressed()
aufrufen. - Unter Android 12 (API-Level 32) und niedriger wird
onBackPressed
immer aufgerufen, unabhängig von registrierten Instanzen vonOnBackPressedCallback
.