Benutzerdefinierte Zurück-Navigation bereitstellen

Die Zurücknavigation ist die Art und Weise, wie Nutzer im Verlauf der Bildschirme rückwärts navigieren, besucht haben. Alle Android-Geräte verfügen über eine Zurück-Schaltfläche für diese Art von für die Navigation, also fügen Sie keine Zurück-Schaltfläche zur Benutzeroberfläche Ihrer App hinzu. Je nach das Android-Gerät des Nutzers ist, kann es sich bei dieser Schaltfläche um eine physische Taste oder eine Software- Schaltfläche.

Android pflegt einen Back-Stack von Zielen, während der Nutzer navigiert. in Ihrer gesamten Anwendung. So kann Android ordnungsgemäß zu zu vorherigen Zielen, wenn Sie die Taste „Zurück“ drücken. Es gibt jedoch einige in denen Ihre App unter Umständen ein eigenes die bestmögliche Nutzererfahrung zu bieten.

Wenn Sie beispielsweise WebView verwenden, können Sie das Standardverhalten der Schaltfläche "Zurück" überschreiben, damit der Nutzer durch den Browserverlauf und nicht die vorherigen Bildschirme zurückkehren, in Ihrer App.

Android 13 und höher enthalten eine vorausschauende Touch-Geste für Android-Geräte. Bis Weitere Informationen

Benutzerdefinierte Zurück-Navigation implementieren

ComponentActivity, die Basis Kurs für FragmentActivity und AppCompatActivity, können Sie das Verhalten der Zurück-Schaltfläche über die OnBackPressedDispatcher die Sie durch Aufrufen von getOnBackPressedDispatcher() abrufen können.

Mit OnBackPressedDispatcher wird gesteuert, wie Ereignisse der Schaltfläche „Zurück“ gesendet werden auf ein oder mehrere OnBackPressedCallback Objekte. Der Konstruktor für OnBackPressedCallback verwendet einen booleschen Wert für die anfänglich aktiviert. Wenn ein Callback aktiviert ist, also isEnabled() gibt true zurück: Der Disponent ruft die handleOnBackPressed() um das Ereignis der Zurück-Schaltfläche zu verarbeiten. Sie können den Aktivierungsstatus ändern, indem Sie folgenden Befehl aufrufen: setEnabled()

Callbacks werden mit den addCallback-Methoden hinzugefügt. Wir empfehlen die Verwendung von addCallback() für die ein LifecycleOwner-Zeichen verwendet wird. Dadurch wird OnBackPressedCallback nur hinzugefügt, wenn das LifecycleOwner Lifecycle.State.STARTED Durch die Aktivität werden auch registrierte Callbacks entfernt, wenn ihre zugehörigen LifecycleOwner wird gelöscht. Dadurch werden Speicherlecks vermieden und LifecycleOwner geeignet zur Verwendung in Fragmenten oder anderen Inhabern des Lebenszyklus mit kürzerer Lebensdauer als die Aktivität.

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 bereitstellen. Die Callbacks werden dann in umgekehrter Reihenfolge aufgerufen, hinzufügen. Der zuletzt hinzugefügte Callback ist der erste, der die Möglichkeit hat, Ereignis zur Schaltfläche „Zurück“ Wenn Sie beispielsweise drei Callbacks mit den Namen one, two und three (in dieser Reihenfolge) werden in der Reihenfolge aufgerufen three, two, one.

Callbacks folgen dem Verantwortungskette Muster zu ändern. Jeder Callback in der Kette wird nur aufgerufen, wenn die vorherige Callback war nicht aktiviert. Das bedeutet, dass in der im vorherigen Beispiel wird der Callback two nur aufgerufen, wenn der Callback three ist nicht aktiviert und der Rückruf one wird nur ausgelöst, wenn der Rückruf two ist nicht aktiviert.

Wenn der Callback mit addCallback() hinzugefügt wird, wird es erst in die Kette der Verantwortung aufgenommen, LifecycleOwner wechselt in den Status Lifecycle.State.STARTED.

Wir empfehlen, den aktivierten Status für OnBackPressedCallback zu ändern für temporäre Änderungen, da dadurch die oben beschriebene Reihenfolge beibehalten wird. Dies ist besonders wichtig, wenn Callbacks auf mehreren Inhaber verschachtelter Lebenszykluse.

Wenn Sie die OnBackPressedCallback vollständig entfernen möchten, gehen Sie so vor: kannst du anrufen remove() Dies ist normalerweise nicht erforderlich, da Callbacks automatisch entfernt werden, wenn die zugehörige LifecycleOwner ist gelöscht.

Aktivität onBackPressed()

Wenn Sie onBackPressed() zur Verarbeitung von Ereignissen der Schaltfläche „Zurück“ verwenden, OnBackPressedCallback. Falls Sie diese Änderung nicht vornehmen können, gelten folgende Regeln:

  • Alle über addCallback registrierten Callbacks werden ausgewertet, wenn du aufrufst super.onBackPressed().
  • In Android 12 (API-Level 32) und niedriger wird onBackPressed immer aufgerufen, unabhängig von registrierten Instanzen von OnBackPressedCallback.