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 aufrufstsuper.onBackPressed()
. - In Android 12 (API-Level 32) und niedriger wird
onBackPressed
immer aufgerufen, unabhängig von registrierten Instanzen vonOnBackPressedCallback
.