navigationevent
Letzte Aktualisierung | Stabile Version | Releasekandidat | Beta-Release | Alpha-Release |
---|---|---|---|---|
10. September 2025 | - | - | - | 1.0.0-alpha08 |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von „navigationevent“ hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle
für Ihre App oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:
Groovy
dependencies { implementation "androidx.navigationevent:navigationevent:1.0.0-alpha08" }
Kotlin
dependencies { implementation("androidx.navigationevent:navigationevent:1.0.0-alpha08") }
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Lassen Sie es uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können für ein vorhandenes Problem abstimmen, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Für dieses Artefakt gibt es keine Versionshinweise.
Version 1.0
Version 1.0.0-alpha08
10. September 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha08
wird veröffentlicht. Version 1.0.0-alpha08 enthält diese Commits.
Neue Funktionen
- Einführung einer lambdabasierten
NavigationEventHandler
API, die den Flow-basierten Handler ersetzt. Mit einfachen Rückrufen können Sie Vorwärts- und Rückwärtsgesten verarbeiten, ohne Flows zu erfassen. So wird Boilerplate-Code reduziert und Probleme mit dem Abbrechen von Vorgängen werden vermieden.NavigationBackHandler
undNavigationForwardHandler
als gezielte Convenience-APIs bereitstellen Entfernen Sie das Flow-basierteNavigationEventHandler
und migrieren Sie zu den neuen Callbacks. (I23bac, b/436248277) - Ermögliche es passiven Zuhörern, über kombinierte Back-Informationen auf den vollständigen Navigations-Backstack zuzugreifen. Ermögliche es Benutzeroberflächen, Vorschauen und einen verschachtelten Navigationsverlauf zu rendern, anstatt auf den obersten Callback beschränkt zu sein. (I7a510, b/436248277)
- Einführung eines expliziten Modells für „Zurück“, „Aktuell“ und „Vorwärts“, um den Navigationsstatus zu verdeutlichen und die Vorwärtsnavigation mit verschachtelten Handlern zu unterstützen. (Ib86da, b/420443609)
- Fügen Sie
onForward*
-Methoden undisForwardEnabled
zuNavigationEventCallback
hinzu. (Ic100f, b/436248290) - Unterstützung für die Vorwärtsnavigation in
NavigationEventInput
hinzufügen. (I5734b)
API-Änderungen
- Aktivieren Sie das Testen von Ereignissen für die Vorwärtsnavigation mit
TestNavigationEventCallback
. Verwenden Sie die HooksisForwardEnabled
undonForward*
. (I21fb5, b/420443609) - Benennen Sie
onEvent*
-Callbacks inNavEvent
inonBack*
um. (I228b3, b/436248290) - Konvertieren Sie
SwipeEdge
in eine Inline-Klasse. (Id5e01) - Machen Sie die
navigationevent
-Bibliothek mit Java kompatibel. Alle öffentlichen APIs sind jetzt vollständig über Java-Code zugänglich, was eine nahtlose Integration in Projekte mit mehreren Sprachen oder nur mit Java ermöglicht. (Ibc944,I5465f, I9fb1e, b/440532890b/443040294) - API-Rollen werden durch Umbenennen von
NavigationEventCallback
inNavigationEventHandler
verdeutlicht. Diese Änderung entspricht besser dem Zweck der Klasse, mehrstufige Navigationsgesten zu verarbeiten. Die entsprechendeaddCallback
-Methode ist jetztaddHandler
. (I2492a, b/443040331)
Fehlerkorrekturen
- Verhindern, dass der „Zurück“-Fallback bei der Vorwärtsnavigation ausgeführt wird. (I74814, b/436248290)
- Unterstützung für die vorausschauende Vorwärtsnavigation hinzugefügt. Die
NavigationEvent
-APIs verarbeiten jetzt sowohl „Zurück“- als auch „Vorwärts“-Gesten und ermöglichen so einheitliche Animationen für beide Navigationsrichtungen. (Idc98c, b/436248290) - Verhindert einen
IllegalStateException
-Absturz während der Neuzusammenstellung, wenn ein untergeordnetesNavigationEventDispatcherOwner
-Element entfernt wird. (Iff50c, b/412629020) - Passive Listener können jetzt über kombinierte Back-Informationen auf den gesamten Navigations-Backstack zugreifen. So können Benutzeroberflächen Vorschauen und einen verschachtelten Navigationsverlauf rendern, anstatt auf den obersten Callback beschränkt zu sein. (I7a510, b/436248277)
Version 1.0.0-alpha07
27. August 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha07
wird veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.
API-Änderungen
- Entfernen Sie
NavigationEventDispatcher.onHasEnabledCallbacksChanged
. (I50e97) - Mache
NavigationEventCallback.onEventCompleted()
abstrakt. (I36b38) - Ändern Sie die
NavigationEventCallback#on*
-Methoden inprotected
. Aktualisieren Sie den Ländercode, um sie zu überschreiben. (I6b691) - Benennen Sie
DirectNavigationEventInput
-Funktionen um. (Iffb62) - Benennen Sie
NavigationEventInput.onAttach
inonAdded
um. (I2d0b8) - Benennen Sie
NavigationEventInput.onDetach
inonRemoved
um. (I2d0b8) - Benennen Sie
NavigationEventInputHandler
inNavigationEventInput
um. (I676a4) - Fügen Sie
@EmptySuper
zuNavigationEventInput.onHasEnabledCallbacksChanged
hinzu. (If9853) - Implementieren Sie
onAttach
inNavigationEventInputHandler
. (I03648) - Implementieren Sie
onDetach
inNavigationEventInputHandler
. (I03648) - Standardmäßig ist
NavigationEventCallback
bei der Erstellung aktiviert. (Ic0188) - Ersetzen Sie
NavigationEventInput.addOnHasEnabledCallbacksChangedCallback
durchNavigationEventInput.onHasEnabledCallbacksChanged
. (I64e93) - Hauptthread für
NavigationEventDispatcher.addInput
erforderlich. (Ic2930) - Hauptthread für
NavigationEventDispatcher.removeInput
erforderlich. (Ic2930) - Entfernen Sie
Dispatcher.addOnHasEnabledCallbacksChangedCallback
. Ersetzen Sie den Text durchDispatcher.onHasEnabledCallbacksChanged
. (Ida3e3, b/436530096)
Fehlerkorrekturen
- Es wurde ein Fehler behoben, durch den das Hinzufügen eines bereits angehängten oder das Entfernen eines nicht angehängten Handlers eine falsche Lebenszykluslogik ausgelöst hat. (I9e47b)
Version 1.0.0-alpha06
13. August 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha06
wird veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.
Neue Funktionen
Passive Listeners API
Sie können jetzt benutzerdefinierte Kontextinformationen von einem beliebigen Navigationshost übergeben und passiv auf Änderungen des Gestenstatus an einer beliebigen Stelle in der Benutzeroberfläche warten. So werden kontextbezogene Animationen für die intelligente „Zurück“-Touchgeste und andere gestengesteuerte Navigationsfunktionen ermöglicht.
Diese Funktion besteht aus zwei Teilen:
- Informationen bereitstellen: Verwenden Sie
NavigationEventInfo
, um benutzerdefinierte Daten zu übertragen. - Consuming State: Verwenden Sie
dispatcher.state
(NavigationEventState
), um den Fortschritt und Kontext der Geste zu beobachten.
NavigationEventCallback
bietet jetzt die MethodesetInfo(currentInfo, previousInfo)
, um den Kontext für Gesten in einem Aufruf festzulegen (I1d5e7, b/424470518).- Mit
NavigationEventHandler
wird eine neue Überladung hinzugefügt, diecurrentInfo
undpreviousInfo
akzeptiert. Damit ist sie die primäre API zum Bereitstellen von Kontext in Compose-Apps (I6ecd3, b/424470518).
Beispiel:
data class MyScreenInfo(val screenName: String) : NavigationEventInfo
NavigationEventHandler(
enabled = true,
currentInfo = MyScreenInfo("Details Screen"),
previousInfo = MyScreenInfo("Home Screen")
) { /* Handle back completion */ }
NavigationEventDispatcher
macht jetztdispatcher.state
unddispatcher.getState<T>()
verfügbar (If7fae, Ia90ca, b/424470518). Mit diesenStateFlow
-basierten APIs kann jede Benutzeroberfläche den Fortschritt von Gesten und Kontextdaten beobachten, ohne das Ereignis direkt zu verarbeiten.
Beispiel:
val gestureState by LocalNavigationEventDispatcherOwner.current!!
.navigationEventDispatcher
.state
.collectAsState()
val progress = gestureState.progress // Returns latestEvent.progress or 0F
when (val state = gestureState) {
is InProgress -> {
val toScreen = state.currentInfo as MyScreenInfo
val fromScreen = state.previousInfo as MyScreenInfo
println("Navigating from ${fromScreen.screenName} to ${toScreen.screenName}")
}
is Idle -> { /* Idle state */ }
}
Fügen Sie das Attribut
progress
zuNavigationEventState
(I7b196) hinzu, das bei laufender AktionlatestEvent.progress
und ansonsten0F
zurückgibt:val progress = state.progress
Fügen Sie die zusammensetzbare Funktion
NavigationEventDispatcherOwner
hinzu, umNavigationEventDispatcher
-Instanzen hierarchisch zu erstellen, zu verknüpfen und zu verwerfen. Aktivieren Sie die dynamische Steuerung des aktivierten Status des Dispatchers und die automatische Bereinigung.@Composable fun Sample() { NavigationEventDispatcherOwner(enabled = true) { val localDispatcherOwner = LocalNavigationEventDispatcherOwner.current } }
API-Änderungen
- Der Parameter
isPassthrough
wurde aus derNavigationEventCallback
entfernt. (I99028, b/424470518) NavigationEventState
-Konstruktoren sind jetzt intern. Aktualisieren Sie für Tests den Status (Standardwert istIdle
) über dieDirectNavigationEventInputHandler
. Rufen SiehandleOnStarted
oderhandleOnProgressed
auf, um den Status aufInProgress
festzulegen, undhandleOnCompleted
oderhandleOnCancelled
, um ihn aufIdle
zurückzusetzen. Verwenden SieNavigationEventCallback.setInfo
, umNavigationEventInfo
zu aktualisieren. (I93dca, b/424470518)NavigationEvent
wurden Standardparameter hinzugefügt, um die Instanziierung zu vereinfachen und Tests zu vereinfachen, die anstelle vonTestNavigationEvent
verwendet werden sollten. (I5dc49, I232f4)- Es wurde ein
TestNavigationEventCallback
zum Testen von Navigationsereignissen mit bestimmten aktuellen/vorherigen Status hinzugefügt. (Idd22e, b/424470518) NavigationEventInputHandler
wurde in eine abstrakte Klasse umgewandelt, um die vorherigeAbstractNavigationEventInputHandler
durch eine Implementierung inDirectNavigationEventInputHandler
zu ersetzen (Iadde5, Ifed40I3897c, b/432616296, b/435416924).- Die Präfixe der
send*
-Funktionen inNavigationEventInputHandler
wurden inhandle*
umbenannt. (Iffcaf) OnBackInvokedInputHandler
wird jetzt auf die neuabstract
NavigationInputHandler
erweitert. (Ib45aa)NavigationEventDispatcherOwner
wurde so geändert, dass ein übergeordneter Dispatcher erforderlich ist. Sie müssennull
explizit übergeben, um einen Root-Dispatcher zu erstellen. (Ia6f64, b/431534103)
Fehlerkorrekturen
- Verbesserte Effizienz durch Vermeidung von Sammlungskopien in
NavigationEventDispatcher.dispose()
. (I4ab09) - Ein Problem wurde behoben, bei dem
NavigationEventHandler
nicht richtig auf Änderungen des Aktivierungsstatus reagierte. (Ia5268,I19bec, I5be5c, b/431534103)
Docs-Updates
- Die KDocs für
NavigationEvent
wurden erweitert, um die Rolle als einheitlicher Ereignis-Wrapper und das Verhalten von Detail-Properties bei verschiedenen Navigationstypen (Gesten, Klicks) zu verdeutlichen. (I91e8d) - Die Dokumentation für die Compose-APIs für die Verarbeitung von Systemrückgaben (
BackHandler
,PredictiveBackHandler
,NavigationEventHandler
) wurde aktualisiert, um das Verhalten speziell in Bezug auf die Reihenfolge der Rückrufe zu beschreiben. (I7ab94, )
Abhängigkeitsupdate
NavigationEvent
hängt jetzt von Compose Runtime 1.9.0-beta03 ab, wodurch dasnavigationevent-compose
-Artefakt alle KMP-Ziele unterstützt. (Ia1b87)
Version 1.0.0-alpha05
30. Juli 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha05
wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
Unterstützung von Über- und Unterordnern:
Ein NavigationEventDispatcher
kann jetzt übergeordnete und untergeordnete Dispatcher haben, wodurch eine hierarchische Baumstruktur entsteht. So können Navigationsereignisse flexibler über komplexe Compose-UI-Komponenten hinweg weitergegeben und verwaltet werden, indem die strukturelle Hierarchie der Benutzeroberfläche durch verkettete Dispatcher abgebildet wird. (I194ac)
// Create a parent dispatcher that will manage navigation events at a higher level.
val parentDispatcher = NavigationEventDispatcher()
// Create a child dispatcher linked to the parent, forming a hierarchy.
val childDispatcher = NavigationEventDispatcher(parentDispatcher)
Mit dem hierarchischen Attribut isEnabled
lässt sich ein Dispatcher von oben nach unten steuern. Wenn isEnabled
für einen Dispatcher auf false
gesetzt ist, werden alle untergeordneten Dispatcher automatisch deaktiviert. Mit dieser Funktion lassen sich ganze Zweige des Navigationsereignissystems effizient deaktivieren. (I9e985)
// Disabling the child dispatcher disables all its callbacks and any of its children recursively.
childDispatcher.isEnabled = false
Außerdem wird bei der isEnabled
-Property für NavigationEventCallback
jetzt der aktivierte Status des zugehörigen Dispatchers berücksichtigt. Das bedeutet, dass ein Callback nur dann als aktiviert gilt, wenn sowohl der Callback selbst als auch sein Dispatcher (einschließlich seiner übergeordneten Elemente) aktiviert sind. So wird eine einheitliche hierarchische Steuerung der Callback-Aktivierung gewährleistet. (I1799a)
// Create a test callback and add it to the child dispatcher.
val callback1 = TestNavigationEventCallback(isEnabled = true)
childDispatcher.addCallback(callback1)
// Since the childDispatcher is disabled, the callback is effectively disabled as well.
assertThat(callback1.isEnabled).isFalse()
Es wurde eine neue dispose()
-Methode eingeführt, um Dispatcher und ihre untergeordneten Elemente richtig zu bereinigen. Durch Aufrufen von dispose()
werden Listener beendet, um Speicherlecks zu verhindern. Außerdem werden alle untergeordneten Dispatcher rekursiv verworfen, alle für den Dispatcher registrierten Callbacks entfernt und die Verknüpfung mit dem übergeordneten Element aufgehoben. So wird sichergestellt, dass Ressourcen korrekt freigegeben werden, wenn Dispatcher nicht mehr benötigt werden. (I9e985)
// Dispose the child dispatcher to clean up resources.
childDispatcher.dispose()
Wenn eine öffentliche Methode für einen verworfenen Dispatcher aufgerufen wird, wird sofort eine IllegalStateException
ausgelöst. So werden stille Fehler verhindert und Entwickler können eine unsachgemäße Verwendung während der Entwicklung erkennen. (Ic2dc3)
val callback2 = TestNavigationEventCallback()
// Attempting to use a disposed dispatcher will throw an exception.
assertThrows<IllegalStateException> {
childDispatcher.addCallback(callback2)
}
Hinweis:Wir führen in aosp/3692572 eine neue NavigationEventDispatcherOwner
-Composable ein, die automatisch einen untergeordneten Dispatcher in Compose UI verwaltet. Diese Änderung wurde jedoch nicht in den aktuellen Release aufgenommen und ist für den nächsten geplant.
Navigation Testing Library
- Fügen Sie das
navigationevent-testing
-Modul hinzu, um spezielle Testdienstprogramme für dienavigationevent
-Bibliothek bereitzustellen. (0e50b6) - Fügen Sie
TestNavigationEventCallback
als gefälschte Utility-Klasse zum Testen hinzu. Es werden Aufrufe von Callback-Methoden aufgezeichnet und empfangeneNavigationEvent
-Elemente zur Unterstützung der Bestätigung gespeichert. (4a0246) - Fügen Sie die
TestNavigationEvent
-Fake-Hilfsfunktion hinzu, umNavigationEvent
-Instanzen mit Standardwerten zu erstellen. Dadurch werden Unittests für die Verarbeitung von Navigationsereignissen vereinfacht. (3b63f5) - Fügen Sie
TestNavigationEventDispatcherOwner
als gefälschte Utility-Klasse zum Testen hinzu. Es werden Fallback- und „enabled-state-changed“-Ereignisanzahlen erfasst, um die Interaktionsüberprüfung in Tests zu unterstützen. (c8753e)
API-Änderungen
- Verschieben Sie
NavigationEventInputHandler
vonandroidMain
nachcommonMain
, damit es im gemeinsamen KMP-Code verfügbar ist. Neuepublic send*
-Methoden zum Senden von Ereignissen hinzufügen Ändern Sie die Dispatch-Funktionen inNavigationEventDispatcher
vonpublic
zuinternal
. Nutzer müssen jetztNavigationEventInputHandler
verwenden, um Ereignisse zu senden. (Ia7114) - Benennen Sie
NavigationInputHandler
inOnBackInvokedInputHandler
um. (I63405)
Fehlerkorrekturen
- Refaktorieren Sie
NavigationEventDispatcher
, um den Mehraufwand zu reduzieren, indem Sie die Zuweisung von Zwischenlisten vermeiden und die Leistung der Callback-Weiterleitung verbessern. (I82702, I1a9d9) - Fügen Sie
@FloatRange
-Annotationen zu den FelderntouchX
,touchY
undprogress
inNavigationEvent
hinzu, um gültige Wertebereiche zur Kompilierzeit zu erzwingen und die API-Sicherheit zu verbessern. (Iac0ec)
Version 1.0.0-alpha04
2. Juli 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha04
wird veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
Fehlerkorrekturen
implementedInJetBrainsFork
wurde fürnavigationevent-compose
verwendet und eincommonStubs
-Ziel wurde hinzugefügt, um den Compose-Konventionen zu entsprechen. Die Änderung wurde von JetBrains angefordert. (f60c79)- Die Anwendung des Compose-Compiler-Plug-ins für Kotlin/Native wurde korrigiert, um die korrekte Stub-Generierung zu gewährleisten. Es gibt keine Auswirkungen auf öffentliche APIs oder das Verhalten. (1890c9)
Version 1.0.0-alpha03
18. Juni 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha03
wird veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.
Neue Funktionen
- Es wurde ein neues
navigationevent-compose
-Modul eingeführt, um Jetpack Compose-Funktionen in dernavigationevent
-Bibliothek zu unterstützen. (980d78) NavigationEvent
Compose hat eine neue lokale KompositionLocalNavigationEventDispatcherOwner
hinzugefügt. Es wird ein Nullable-Wert zurückgegeben, um besser feststellen zu können, ob er in der aktuellen Komposition verfügbar ist.NavigationEventHandler
gibt jetzt einen Fehler aus, wenn der zugrunde liegende Eigentümer nicht gefunden wird. (62ffda)NavigationEvent
Compose hat ein neuesNavigationEventHandler
-Composable hinzugefügt, um Ereignisse für die Vorhersage der Zurück-Geste zu verarbeiten. Es wird einFlow
vonNavigationEvent
-Objekten bereitgestellt, die in der von Ihnen bereitgestellten Lambda-Funktion für die Sperrung erfasst werden müssen c42ba6:
NavigationEventHandler { progress: Flow<NavigationEvent> ->
// This block is executed when the back gesture begins.
try {
progress.collect { backEvent ->
// Handle gesture progress updates here.
}
// This block is executed if the gesture completes successfully.
} catch (e: CancellationException) {
// This block is executed if the gesture is cancelled
throw e
} finally {
// This block is executed either the gesture is completed or cancelled
}
}
API-Änderungen
- Jeder
NavigationEventCallback
kann jetzt nur bei einemNavigationEventDispatcher
gleichzeitig registriert werden. Wenn er mehreren Dispatchern hinzugefügt wird, wird einIllegalStateException
ausgegeben. Dieses Verhalten unterscheidet sich vonOnBackPressedDispatcher
, das mehrere Dispatcher zulässt. (e82c19) isPassThrough
wurde zu einemval
gemacht, um Mutationen während der Navigation zu verhindern, die die Weiterleitung vonNavigationEvent
unterbrechen könnten. (I0b287)
Version 1.0.0-alpha02
4. Juni 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha02
wird veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
- Ersetzen Sie den sekundären Konstruktor von
NavigationEventDispatcher
durch Standardargumente. (I716a0) - Entfernen Sie die Prioritätseigenschaft aus
NavigationEventCallback
. Übergeben Sie die Priorität stattdessen anNavigationEventDispatcher.addCallback()
. (I13cae)
Fehlerkorrekturen
- Ein
ConcurrentModificationException
wurde behoben, das auftreten konnte, wennNavigationEventCallback.remove()
aufgerufen wurde, weil die interne Liste der Closeables gleichzeitig geändert wurde. (b/420919815)
Version 1.0.0-alpha01
20. Mai 2025
androidx.navigationevent:navigationevent-*:1.0.0-alpha01
wird veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
- Die
androidx.navigationevent
-Bibliothek bietet eine KMP-First-API für die Verarbeitung von System-Back sowie Predictive Back. DieNavigationEventDispatcher
dient als gemeinsame API zum Registrieren einer oder mehrererNavigationEventCallback
-Instanzen für den Empfang von System-Back-Ereignissen. - Diese Ebene liegt unter den zuvor veröffentlichten APIs in
androidx.activity
und soll ein weniger meinungsbezogener Ersatz für die Verwendung der Activity APIs in Komponenten höherer Ebene oder die direkte Verwendung derOnBackInvokedDispatcher
APIs des Android-Frameworks sein. Dieandroidx.activity
APIs wurden im Rahmen von Activity 1.12.0-alpha01 auf Basis der Navigation Event APIs neu geschrieben.