navigationevent

  
Die Navigation Event-Bibliothek bietet eine KMP-First-API für die Verarbeitung von System-Back-Vorgängen sowie Predictive Back.
Letzte Aktualisierung Stabile Release Releasekandidat Beta-Release Alpha-Release
8. April 2026 1.0.2 1.1.0-rc01 - -

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.1.0-rc01"
}

Kotlin

dependencies {
    implementation("androidx.navigationevent:navigationevent:1.1.0-rc01")
}

Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.

Feedback

Ihr Feedback hilft uns, Jetpack zu verbessern. Wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben, lassen Sie es uns wissen. Bevor Sie ein neues Problem erstellen, sollten Sie sich jedoch die bereits gemeldeten Probleme in dieser Bibliothek ansehen. Wenn Sie sich einer Problemmeldung anschließen möchten, klicken Sie auf den Button mit dem Stern.

Neues Problem melden

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Für dieses Artefakt gibt es keine Versionshinweise.

Version 1.1

Version 1.1.0-rc01

8. April 2026

androidx.navigationevent:navigationevent-*:1.1.0-rc01 ist veröffentlicht. Version 1.1.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Das Compose-compileSdk wurde auf API 37 aktualisiert. Das bedeutet, dass bei der Verwendung von Compose mindestens AGP 9.2.0 erforderlich ist. (Id45cd, b/413674743)

Version 1.1.0-beta01

27. März 2026

androidx.navigationevent:navigationevent-*:1.1.0-beta01 ist veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.

API-Änderungen

  • Fügen Sie OnForwardCompletedFallback zu NavigationEventDispatcher hinzu, um ein Standardverhalten des Systems für nicht verarbeitete Ereignisse für die Vorwärtsnavigation zu ermöglichen. (Iac620, b/489138116)

Version 1.1.0-alpha01

25. Februar 2026

androidx.navigationevent:navigationevent-*:1.1.0-alpha01 ist veröffentlicht. Version 1.1.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Unterstützung aller Kotlin Multiplatform-Ziele (KMP) in NavigationEvent-Compose. Entkoppeln Sie die Eigentümerauflösung von LocalView, damit Plattform-Hosts einen Standardwert für LocalNavigationEventDispatcherOwner bereitstellen können, während LocalView als sicherer Fallback auf Android beibehalten wird. (Iae980, b/434940570, Iccf58)

API-Änderungen

  • Fügen Sie die Erweiterungsfunktionen NavigationEvent.toBackEvent() und BackEvent.toNavigationEvent() hinzu, um zwischen BackEvent und NavigationEvent von Android zu konvertieren. (Ie3b71, b/477001292)

Version 1.0

Version 1.0.2

28. Januar 2026

androidx.navigationevent:navigationevent-*:1.0.2 ist veröffentlicht. Version 1.0.2 enthält diese Commits.

Fehlerkorrekturen

  • Absturz bei Verwendung von NavigationEventHandler in Android Studio-Vorabversionen behoben. Der Handler erkennt jetzt den Inspektionsmodus und führt keine Aktionen aus. So kann die Vorschau ohne bereitgestellten Dispatcher gerendert werden. (I370f2, b/454313986)

Version 1.0.1

3. Dezember 2025

androidx.navigationevent:navigationevent-*:1.0.1 ist veröffentlicht. Version 1.0.1 enthält diese Commits.

Fehlerkorrekturen

  • Behebt einen ConcurrentModificationException beim Entfernen eines untergeordneten NavigationEventDispatcher, z. B. eines mit rememberNavigationEventDispatcherOwner() erstellten. (ec68a9, b/454363524)

Version 1.0.0

19. November 2025

androidx.navigationevent:navigationevent-*:1.0.0 ist veröffentlicht. Version 1.0.0 enthält diese Commits.

Wichtige Funktionen von Version 1.0.0:

Die Navigation Event-Bibliothek ist jetzt stabil. Navigation Event ist die AndroidX-Bibliothek für die Verarbeitung von Interaktionen auf Systemebene wie System-Zurück und Predictive Back in Android (und anderen Plattformen).

  • Um NavigationEvents zu verarbeiten, können Sie eine eigene NavigationEventHandler implementieren, die die gewünschten Funktionen überschreibt. Anschließend müssen Sie den Handler einem NavigationEventDispatcher hinzufügen. Ab der Version Activity 1.12.0 implementiert ComponentActivity die neue NavigationEventDispatcherOwner-Schnittstelle, die einen sofort einsatzbereiten Dispatcher bietet :

    // The NavigationEventInfo provides information about a navigation state
    object CurrentInfo : NavigationEventInfo()
    
    // you can retrieve this from any component that is a NavigationEventDispatcherOwner
    // or you can instantiate your own custom dispatcher
    val dispatcher = myActivity.navigationEventDispatcher
    
    val myHandler = object : NavigationEventHandler<NavigationEventInfo>(
                initialInfo = CurrentInfo,
                isBackEnabled = true
            ) {
                override fun onBackStarted(event: NavigationEvent) {
                    // Prepare for the back event
                }
    
                override fun onBackProgressed(event: NavigationEvent) {
                    // Use event.progress for predictive animations
                }
    
                // This is the required method for final event handling
                override fun onBackCompleted() {
                    // Complete the back event
                }
    
                override fun onBackCancelled() {
                    // Cancel the back event
                }
            }
    
    dispatcher.addHandler(myHandler)
    
  • Das Modul navigationevent:navigationevent-compose bietet die praktische Compose-Funktion NavigationBackHandler, die den Handler automatisch mit dem NavigationEventDispatcher des nächstgelegenen LocalNavigationEventDispatcherOwner verbindet. Entwickler können das gewünschte Verhalten als Parameter angeben:

    object CurrentInfo : NavigationEventInfo()
    object PreviousInfo : NavigationEventInfo()
    
    val navEventState = rememberNavigationEventState(
      currentInfo = CurrentInfo,
      backInfo = PreviousInfo
    )
    
    // Inside composition
    NavigationBackHandler(
        State = navEventState,
        isBackEnabled = true,
        // optional
        onBackCancelled = { // Cancel the back event },
        // required
        onBackCompleted = { // Complete the back event } ,
    )
    

Wenn Sie dieses Muster in Compose verwenden, lässt sich NavigationEventState sehr einfach nach oben verschieben, sodass es von verschiedenen Composables beobachtet werden kann (z.B. bei Navigation3, wo Sie den Status aus NavDisplay nach oben verschieben können).

  • Jeder NavigationEventDispatcher kann sowohl für Compose- als auch für Nicht-Compose-Fälle einen übergeordneten Dispatcher bereitstellen. So können Entwickler eine hierarchische Struktur erstellen, in der mehrere Dispatcher von einem einzelnen übergeordneten Element verwaltet werden können. Mit einem übergeordneten Dispatcher ist es relativ einfach, Gruppen von Dispatchern zu verarbeiten, die möglicherweise deaktiviert oder entfernt werden müssen:

    // Non-Compose
    val parentDispatcher = NavigationEventDispatcher()
    val childDispatcher = NavigationEventDispatcher(parent = parentDispatcher)
    
    // Compose
    val composeChildDispatcher = rememberNavigationEventDispatcher(
        // This defaults to `LocalNavigationEventDispatcherOwner.current`
        // Must explicitly provide null to have an unparented dispatcher created here
        parent = NavigationEventDispatch() 
    )
    
  • Die Bibliothek ermöglicht es auch, Signale direkt über eine NavigationEventInput an die NavigationEventDispatcher zu senden. NavigationEventInputs fungiert als „Eingabe“-Seite des Navigationssystems und übersetzt plattformspezifische Ereignisse (z. B. System-Zurück-Gesten oder Schaltflächenklicks) in standardisierte Ereignisse, die an ein NavigationEventDispatcher gesendet werden können. Das Modul navigationevent:navigationevent bietet derzeit zwei NavigationEventInputs: ein generischeres DirectNavigationEventInput, mit dem beliebige Ereignisse gesendet werden können, und ein Android-spezifisches OnBackInvokedInput, mit dem ein NavigationEventDispatcher die System-Zurück- und die Vorhersage-Zurück-Geste unterstützen kann. Wenn Sie einen eigenen Dispatcher implementieren (anstatt den von ComponentActivity bereitgestellten zu verwenden), müssen Sie die Eingabe manuell hinzufügen:

    val dispatcher = NavigationEventDispatcher()
    
    dispatcher.addInput(DirectNavigationEventInput())
    dispatcher.addInput(OnBackInvokedDefaultInput(invoker))
    

Version 1.0.0-rc01

5. November 2025

androidx.navigationevent:navigationevent-*:1.0.0-rc01 ist veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.

Version 1.0.0-beta01

8. Oktober 2025

androidx.navigationevent:navigationevent-*:1.0.0-beta01 ist veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.

API-Änderungen

  • Korrigieren Sie die FloatRange-Annotation für NavigationEvent.touchX und NavigationEvent.touchY. Diese Werte stellen absolute Pixelkoordinaten dar und haben keine Obergrenze von 1.0. (I4b205, b/445989313)
  • Refaktorieren Sie die zusammensetzbare Funktion NavigationEventDispatcherOwner in rememberNavigationEventDispatcherOwner. Die Funktion gibt jetzt direkt den NavigationEventDispatcherOwner zurück. Verwenden Sie CompositionLocalProvider, um diesen Inhaber für eine untergeordnete Komposition anzugeben. (I874b2, b/444446629)

Version 1.0.0-alpha09

24. September 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha09 ist veröffentlicht. Version 1.0.0-alpha09 enthält diese Commits.

API-Änderungen

  • Verwenden Sie direkt das Singleton-Objekt NavigationEventTransitionState.Idle, anstatt Idle() zu instanziieren. (Ic7d9e, b/444734264)
  • Machen Sie Convenience-Konstruktoren intern. Rufen Sie Instanzen über das öffentliche NavigationEventDispatcher.history anstelle der direkten Konstruktion ab. (I3b7e0, b/444734264)
  • Erfordert die Erstellung von NavigationEventState über rememberNavigationEventState; der Konstruktor ist jetzt intern. (Ie143c, b/444734264)
  • Übernehmen Sie onBackCompletedFallback und ersetzen Sie die Verwendungen von fallbackOnBackPressed und den Konstruktorparameter. Das Verhalten ist unverändert. Die Methode wird nur bei abgeschlossenen, nicht verarbeiteten Back-Events aufgerufen. (Idabe9, b/444734264)
  • Der primäre Konstruktor von NavigationEventHistory(mergedHistory, currentIndex) ist jetzt internal. Externe Nutzer müssen die öffentlichen Konstruktoren (entweder den leeren Konstruktor oder den partitionsbasierten Konstruktor) verwenden, um Instanzen zu erstellen. (I1c047, b/444734264)
  • View.setViewTreeNavigationEventDispatcherOwner akzeptiert jetzt auch einen Nullwert als Inhaber (Ic9eb6, b/444436762)
  • NavigationEventInfo ist jetzt ein abstract class statt eines interface. Aktualisieren Sie alle benutzerdefinierten Implementierungen, damit sie von der Klasse erben (z. B. data class MyInfo : NavigationEventInfo()). (I1e59c, b/444734264)
  • Die alte Property NavigationEventDispatcher.state und die Funktion getState<T>() wurden entfernt. Verwenden Sie die neuen, separaten Abläufe dispatcher.transitionState (für den Fortschritt von Touchgesten) und dispatcher.history (für den Navigationsstapel). (Ic2ceb, b/444734264)
  • Der NavigationEventInput.onInfoChanged(...)-Callback wird ersetzt. Implementieren Sie den neuen onHistoryChanged(history: NavigationEventHistory)-Callback, um Updates als einzelnes NavigationEventHistory-Objekt zu erhalten. (I23e0b, b/444734264)
  • Führen Sie eine neue globale NavigationEventDispatcher.history StateFlow ein. Bei diesem nicht generischen Ablauf können Beobachter nur Änderungen am Navigationsstapel abonnieren. Außerdem bleibt er während des Fortschritts von Gesten stabil. Dies ist das Gegenstück zu transitionState. (I1db10, b/444734264)
  • Führen Sie eine neue globale NavigationEventDispatcher.transitionState StateFlow ein. In diesem nicht generischen Ablauf können Beobachter nur den physischen Gestenzustand (Leerlauf/Wird ausgeführt) abonnieren, unabhängig vom Verlauf. (I171fa, b/444734264)
  • Stellen Sie die Klasse NavigationEventHistoryState vor. Dies dient als Kern-API zum Beobachten des Navigationsinformationsverlaufs, unabhängig vom Gestenstatus. (I81ca5, b/444734264)
  • NavigationEvent ist jetzt als @Immutable gekennzeichnet, sodass der Compose-Compiler Recompositions optimieren kann. (If78c7, b/444734264)
  • Die Handler-APIs für navigationevent-compose wurden aktualisiert. NavigationEventHandler und NavigationBackHandler (und Varianten) unterstützen jetzt eine neue Überladung, die gehostete NavigationEventStates akzeptiert. Die einfachen Überladungen (mit currentInfo) bleiben erhalten und verwenden jetzt intern dieses neue Statusmodell. (Ic3251, b/444734264)
  • Fügen Sie der navigationevent-compose-Bibliothek den neuen @Stable-NavigationEventState<T>-Status-Holder hinzu. Dieses Objekt kombiniert den lokalen Verlauf mit dem lokalen Gestenstatus und ist die primäre Verbindung zwischen rememberNavigationEventState und NavigationEventHandler. (Ifb69f, b/444734264)
  • Fügen Sie NavigationEventHandler eine neue öffentliche schreibgeschützte transitionState: TransitionState-Property hinzu. Handler haben jetzt einen eigenen Übergangsstatus, der von externen Systemen beobachtet werden kann. (I9acd2, b/444734264)
  • Die neue versiegelte Klasse TransitionState wird eingeführt. Sie dient als Kern-API zum Beobachten des Gestenzustands, unabhängig vom Navigationsverlauf. (Id4beb, b/444734264)
  • currentInfo, backInfo und forwardInfo als öffentliche schreibgeschützte Attribute für NavigationEventHandler verfügbar machen. (Ia7636, b/444734264)
  • Bei Implementierungen von NavigationEventHandler muss jetzt ein initialInfo: T-Wert für den Basiskonstruktor angegeben werden. (Idcfea, b/444734264)
  • Ersetzen Sie OnBackInvokedInput durch OnBackInvokedOverlayInput oder OnBackInvokedDefaultInput. (I5323f, b/428948766)
  • Markiere NavigationEventState als @Immutable. Dadurch wird die Leistung von Compose verbessert, da Composables, die diesen Status beobachten, die Neuzusammensetzung korrekt überspringen können. (I399c8)
  • Benennen Sie NavigationEventInfo.NotProvided in NavigationEventInfo.None; um und aktualisieren Sie die Verweise. Keine Verhaltensänderung. (I5e2d4)
  • NavigationEventInfo ist jetzt als @Immutable gekennzeichnet, sodass der Compose-Compiler Recompositions optimieren kann. (I7c112)
  • Verbesserung der Java-Ergonomie durch eine benutzerfreundliche Schnittstelle für den Fallback für die Vervollständigung des Backends. (I8a860)
  • Benennen Sie onHasEnabledHandlerChanged in onHasEnabledHandlersChanged um. Damit wird klargestellt, dass im Callback-Bericht der gemeinsame Aktivierungsstatus aller Handler und nicht nur eines einzelnen angegeben wird. (I1af61, b/443711297)
  • Entfernen Sie hasEnabledHandler() aus NavigationEventDispatcher; und verwenden Sie stattdessen NavigationEventInput.onHasEnabledHandlersChanged. (Idef72, b/443711297)
  • Fügen Sie den onInfoChanged-Callback zu NavigationEventInput hinzu, um Listener über Änderungen am Navigationsverlauf zu benachrichtigen. Dadurch wird der vollständige Kontext der aktuellen, vorherigen und nächsten Stacks bereitgestellt, sodass Eingaben auf die Kontextinformationen reagieren können. (I69a8b, b/443282983)
  • Make NavigationEvent's swipeEdge an @IntDef (Icee54, b/443950342)
  • Fügen Sie NavigationEventDispatcher.addInput den Parameter priority hinzu, um einen Dispatcher auf eine Priorität zu beschränken. Ereignisse wie onHasEnabledCallbacksChanged werden jetzt nur ausgelöst, wenn sich Rückrufe mit dieser Priorität ändern. (I3e488, b/443711297)
  • Benennen Sie den NavigationEventDispatcher-Parameter zur besseren Übersichtlichkeit von parentDispatcher in „parent“ um. (Id4f1f, b/443801782)
  • NavigationEventPriority zugunsten von @IntDef für Java-Nutzer entfernen (I10a9f, b/440514265)
  • Navigations-Handler-Vertrag erzwingen. Wenn in Ihrem NavigationEventHandler isBackEnabled oder isForwardEnabled auf true festgelegt ist, müssen Sie jetzt onBackCompleted bzw. onForwardCompleted überschreiben. Die Standardimplementierungen lösen jetzt eine Ausnahme aus, um stille Fehler zu verhindern. (I17c62)
  • Gültige Prioritätswerte beim Hinzufügen von Navigationsereignis-Handlern erzwingen Wenn Sie addHandler mit einer nicht unterstützten Priorität aufrufen, wird jetzt ein IllegalArgumentException ausgelöst. So erhalten Sie auf allen Zielplattformen sofort Feedback zur falschen Verwendung. (I3c474)

Fehlerkorrekturen

  • Machen Sie addHandler idempotent und ignorieren Sie doppelte Registrierungen. (I052aa, b/444734264)
  • NavigationEventState-Attribute während der Neuzusammenstellung synchronisieren (Ib3b4d, b/444734264)
  • NavigationEventInputs muss die aktuellen Kontextinformationen (aktuell, zurück, vorwärts) sofort nach der Registrierung erhalten. (Ie65bf, b/443282983)

Version 1.0.0-alpha08

10. September 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha08 ist 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. Rückwärts- und Vorwärtsgesten lassen sich mit einfachen Callbacks anstelle von Flow-Erfassung verarbeiten. Das reduziert Boilerplate-Code und vermeidet Probleme mit der Abbrechen. NavigationBackHandler und NavigationForwardHandler als gezielte Convenience-APIs bereitstellen. Entfernen Sie das Flow-basierte NavigationEventHandler und migrieren Sie zu den neuen Callbacks. (I23bac, b/436248277)
  • Ermöglicht es passiven Zuhörern, über kombinierte Back-Informationen auf den vollständigen Navigations-Backstack zuzugreifen. Benutzeroberflächen können Vorschauen und den verschachtelten Navigationsverlauf 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 und isForwardEnabled zu NavigationEventCallback hinzu. (Ic100f, b/436248290)
  • Unterstützung für die Vorwärtsnavigation in NavigationEventInput hinzugefügt. (I5734b)

API-Änderungen

  • Aktivieren Sie das Testen von Ereignissen für die Vorwärtsnavigation mit TestNavigationEventCallback. Verwenden Sie die Hooks isForwardEnabled und onForward*. (I21fb5, b/420443609)
  • Benennen Sie onEvent*-Callbacks in NavEvent in onBack* 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 in NavigationEventHandler verdeutlicht. Diese Änderung entspricht besser dem Zweck der Klasse, mehrstufige Navigationsgesten zu verarbeiten. Die entsprechende addCallback-Methode ist jetzt addHandler. (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. NavigationEvent-APIs verarbeiten jetzt sowohl Rückwärts- als auch Vorwärtsgesten und ermöglichen so einheitliche Animationen für beide Navigationsrichtungen. (Idc98c, b/436248290)
  • Verhindert einen IllegalStateException-Absturz während der Neuzusammenstellung, wenn ein untergeordnetes Element NavigationEventDispatcherOwner entfernt wird. (Iff50c, b/412629020)
  • Passive Listener können jetzt über kombinierte Back-Informationen auf den vollständigen 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 ist veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.

API-Änderungen

  • NavigationEventDispatcher.onHasEnabledCallbacksChanged entfernen. (I50e97)
  • Mache NavigationEventCallback.onEventCompleted() abstrakt. (I36b38)
  • Ändern Sie die NavigationEventCallback#on*-Methoden in protected. Aktualisieren Sie den Ländercode, um sie zu überschreiben. (I6b691)
  • Benennen Sie DirectNavigationEventInput-Funktionen um. (Iffb62)
  • Benennen Sie NavigationEventInput.onAttach in onAdded um. (I2d0b8)
  • Benennen Sie NavigationEventInput.onDetach in onRemoved um. (I2d0b8)
  • Benennen Sie NavigationEventInputHandler in NavigationEventInput um. (I676a4)
  • Fügen Sie @EmptySuper zu NavigationEventInput.onHasEnabledCallbacksChanged hinzu. (If9853)
  • Implementiere onAttach in NavigationEventInputHandler. (I03648)
  • Implementiere onDetach in NavigationEventInputHandler. (I03648)
  • Standardmäßig ist NavigationEventCallback bei der Erstellung aktiviert. (Ic0188)
  • Ersetzen Sie NavigationEventInput.addOnHasEnabledCallbacksChangedCallback durch NavigationEventInput.onHasEnabledCallbacksChanged. (I64e93)
  • Hauptthread für NavigationEventDispatcher.addInput erforderlich. (Ic2930)
  • Hauptthread für NavigationEventDispatcher.removeInput erforderlich. (Ic2930)
  • Dispatcher.addOnHasEnabledCallbacksChangedCallback entfernen. Ersetzen Sie den Text durch Dispatcher.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 ist 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 Ihrer Benutzeroberfläche warten. Dadurch werden kontextbezogene Animationen für die intelligente „Zurück“-Touchgeste und andere gestengesteuerte Navigationsfunktionen ermöglicht.

Diese Funktion besteht aus zwei Teilen:

  1. Informationen bereitstellen: Verwenden Sie NavigationEventInfo, um benutzerdefinierte Daten zu übertragen.
  2. Consuming State: Verwenden Sie dispatcher.state (NavigationEventState), um den Fortschritt und Kontext der Geste zu beobachten.
  • NavigationEventCallback bietet jetzt die Methode setInfo(currentInfo, previousInfo) zum Festlegen des Kontextes für Gesten in einem Aufruf (I1d5e7, b/424470518).
  • Mit NavigationEventHandler wird eine neue Überladung hinzugefügt, die currentInfo und previousInfo 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 jetzt dispatcher.state und dispatcher.getState<T>() verfügbar (If7fae, Ia90ca, b/424470518). Mit diesen StateFlow-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 zu NavigationEventState (I7b196) hinzu, das latestEvent.progress zurückgibt, wenn die Aktion läuft, und 0F, wenn nicht:

    val progress = state.progress
    
  • Fügen Sie die zusammensetzbare Funktion NavigationEventDispatcherOwner hinzu, um NavigationEventDispatcher-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 NavigationEventCallback entfernt. (I99028, b/424470518)
  • NavigationEventState-Konstruktoren sind jetzt intern. Aktualisieren Sie für Tests den Status (Standardwert ist Idle) über die DirectNavigationEventInputHandler. Rufen Sie handleOnStarted oder handleOnProgressed auf, um den Status auf InProgress festzulegen, und handleOnCompleted oder handleOnCancelled, um ihn auf Idle zurückzusetzen. Verwenden Sie NavigationEventCallback.setInfo, um NavigationEventInfo zu aktualisieren. (I93dca, b/424470518)
  • NavigationEvent wurden Standardparameter hinzugefügt, um die Instanziierung zu vereinfachen und Tests zu vereinfachen, die anstelle von TestNavigationEvent 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 vorherige AbstractNavigationEventInputHandler durch eine Implementierung in DirectNavigationEventInputHandler zu ersetzen (Iadde5, Ifed40I3897c, b/432616296, b/435416924).
  • Die Präfixe der send*-Funktionen in NavigationEventInputHandler wurden in handle* umbenannt. (Iffcaf)
  • OnBackInvokedInputHandler wird jetzt auf die neu abstract NavigationInputHandler erweitert. (Ib45aa)
  • Für NavigationEventDispatcherOwner ist jetzt ein übergeordneter Dispatcher erforderlich. Sie müssen null 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 zu verdeutlichen und das Verhalten von Eigenschaften für verschiedene Navigationstypen (Gesten, Klicks) zu beschreiben. (I91e8d)
  • Die Dokumentation für die Compose-APIs zur Verarbeitung von Systemrückgaben (BackHandler, PredictiveBackHandler, NavigationEventHandler) wurde aktualisiert, um das Verhalten speziell in Bezug auf die Callback-Reihenfolge zu erläutern. (I7ab94, )

Abhängigkeitsupdate

  • NavigationEvent hängt jetzt von Compose Runtime 1.9.0-beta03 ab, wodurch das navigationevent-compose-Artefakt alle KMP-Ziele unterstützt. (Ia1b87)

Version 1.0.0-alpha05

30. Juli 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha05 ist 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, die eine hierarchische Baumstruktur bilden. 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 konsistente 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 die navigationevent-Bibliothek bereitzustellen. (0e50b6)
  • Fügen Sie TestNavigationEventCallback als Fake-Utility-Klasse zum Testen hinzu. Es werden Callback-Methodenaufrufe aufgezeichnet und empfangene NavigationEvent-Elemente zur Unterstützung der Bestätigung gespeichert. (4a0246)
  • Fügen Sie die TestNavigationEvent-Fake-Hilfsfunktion hinzu, um NavigationEvent-Instanzen mit Standardwerten zu erstellen. Dadurch werden Unittests für die Verarbeitung von Navigationsereignissen vereinfacht. (3b63f5)
  • Fügen Sie TestNavigationEventDispatcherOwner als Fake-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 von androidMain nach commonMain, damit es im gemeinsamen KMP-Code verfügbar ist. Neue public send*-Methoden zum Senden von Ereignissen hinzufügen Ändern Sie die Dispatch-Funktionen in NavigationEventDispatcher von public zu internal. Nutzer müssen jetzt NavigationEventInputHandler verwenden, um Ereignisse zu senden. (Ia7114)
  • Benennen Sie NavigationInputHandler in OnBackInvokedInputHandler um. (I63405)

Fehlerkorrekturen

  • NavigationEventDispatcher wurde umgestaltet, um den Aufwand zu reduzieren, indem Zwischenlistenzuweisungen vermieden und die Leistung der Callback-Weiterleitung verbessert wurde. (I82702, I1a9d9)
  • Fügen Sie @FloatRange-Annotationen zu den Feldern touchX, touchY und progress in NavigationEvent 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 ist veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.

Fehlerkorrekturen

  • implementedInJetBrainsFork wurde für navigationevent-compose verwendet und ein commonStubs-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 ist 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 der navigationevent-Bibliothek zu unterstützen. (980d78)
  • NavigationEvent Compose hat eine neue lokale Komposition LocalNavigationEventDispatcherOwner 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 Inhaber nicht gefunden wird. (62ffda)
  • NavigationEvent Compose hat eine neue NavigationEventHandler-Composable-Funktion zum Verarbeiten von Ereignissen für die vorhersagende Zurück-Geste hinzugefügt. Sie enthält ein Flow von NavigationEvent-Objekten, die in der von Ihnen bereitgestellten Lambda-Funktion für die Sperrung c42ba6 erfasst werden müssen:
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 einem NavigationEventDispatcher gleichzeitig registriert werden. Wenn er mehreren Dispatchern hinzugefügt wird, wird ein IllegalStateException ausgegeben. Dieses Verhalten unterscheidet sich von OnBackPressedDispatcher, das mehrere Dispatcher zulässt. (e82c19)
  • isPassThrough wurde zu einem val gemacht, um Mutationen während der Navigation zu verhindern, die die Weiterleitung von NavigationEvent unterbrechen könnten. (I0b287)

Version 1.0.0-alpha02

4. Juni 2025

androidx.navigationevent:navigationevent-*:1.0.0-alpha02 ist 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 an NavigationEventDispatcher.addCallback(). (I13cae)

Fehlerkorrekturen

  • Ein ConcurrentModificationException wurde behoben, das auftreten konnte, wenn NavigationEventCallback.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 ist 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. Die NavigationEventDispatcher dient als gemeinsame API zum Registrieren einer oder mehrerer NavigationEventCallback-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 der OnBackInvokedDispatcher APIs des Android-Frameworks sein. Die androidx.activity-APIs wurden im Rahmen von Activity 1.12.0-alpha01 auf Basis der Navigation Event APIs neu geschrieben.