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 Navigationsbereich. Daher sollten Sie der Benutzeroberfläche Ihrer App keine Zurück-Schaltfläche hinzufügen. 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 in der Regel
zu vorherigen Zielen, wenn Sie die Taste „Zurück“ drücken. Es gibt jedoch einige
in denen Ihre App ein eigenes Back-Verhalten implementieren muss,
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.
Benutzerdefinierte Zurück-Navigation implementieren
ComponentActivity
, die Basis
Kurs für FragmentActivity
und AppCompatActivity
,
können Sie das Verhalten der Zurück-Schaltfläche mithilfe der
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. Nur wenn ein Callback aktiviert ist (d.h.
isEnabled()
gibt true
zurück) ruft der Disponent 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 über die addCallback
-Methoden hinzugefügt. Es wird dringend empfohlen,
addCallback()
verwenden
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, wodurch Speicherlecks verhindert werden und die Anwendung geeignet ist.
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 will only be 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 will only be 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() } ... }
Du kannst mehrere Callbacks über addCallback()
bereitstellen.
Dabei werden die Callbacks in umgekehrter Reihenfolge aufgerufen.
hinzugefügt – der zuletzt hinzugefügte Callback ist der erste, der die Möglichkeit hat, den
Ereignis zur Schaltfläche „Zurück“ Wenn Sie z. B. drei Callbacks mit dem Namen
one
, two
und three
der Reihe nach werden sie in der Reihenfolge
three
, two
und 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
Beispiel: Der Callback two
wird nur aufgerufen, wenn der Callback three
war nicht aktiviert. Der Rückruf one
wird nur aufgerufen, wenn der Rückruf two
nicht aktiviert war usw.
Beim Hinzufügen über addCallback()
wird der Callback erst dann der Verantwortlichkeitskette hinzugefügt, wenn das Ereignis
LifecycleOwner
nimmt am
Lifecycle.State.STARTED
Bundesstaat.
Änderung des Aktivierungsstatus für OnBackPressedCallback
wird dringend empfohlen
für temporäre Änderungen empfohlen,
da die oben beschriebene Reihenfolge beibehalten wird,
Dies ist besonders wichtig, wenn Callbacks auf mehreren
Inhaber unterschiedlicher Inhaber von verschachtelten
Lebenszyklen nutzen.
Wenn Sie die OnBackPressedCallback
vollständig entfernen möchten,
solltest du anrufen
remove()
Das ist jedoch normalerweise nicht erforderlich, da Callbacks automatisch entfernt werden, wenn ihr verknüpftes LifecycleOwner
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
.