Navigation

Navigation ist ein Framework für die Navigation zwischen „Zielen“ in einer Android-Anwendung. Es bietet eine einheitliche API, unabhängig davon, ob Ziele als Fragmente, Aktivitäten oder andere Komponenten implementiert werden.
Letzte Aktualisierung Stabile Version Releasekandidat Beta-Ausgabe Alpharelease
2. Juli 2025 2.9.1 - -

Abhängigkeiten deklarieren

Wenn Sie eine Abhängigkeit von Navigation 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

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21'
}
  
dependencies {
  def nav_version = "2.9.1"

  // Jetpack Compose Integration
  implementation "androidx.navigation:navigation-compose:$nav_version"

  // Views/Fragments Integration
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Feature module support for Fragments
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

  // JSON serialization library, works with the Kotlin serialization plugin.
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3"
}

Kotlin

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  kotlin("plugin.serialization") version "2.0.21"
}

dependencies {
  val nav_version = "2.9.1"

  // Jetpack Compose integration
  implementation("androidx.navigation:navigation-compose:$nav_version")

  // Views/Fragments integration
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Feature module support for Fragments
  implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")

  // Testing Navigation
  androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")

  // JSON serialization library, works with the Kotlin serialization plugin
  implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
}

Safe Args

Wenn Sie Ihrem Projekt Safe Args hinzufügen möchten, fügen Sie der build.gradle-Datei auf oberster Ebene die folgende classpath hinzu:

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.9.1"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.9.1"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

Außerdem müssen Sie eines der beiden verfügbaren Plug-ins anwenden.

Wenn Sie Java-Code generieren möchten, der für Java- oder gemischte Java- und Kotlin-Module geeignet ist, fügen Sie der build.gradle-Datei Ihrer App oder Ihres Moduls diese Zeile hinzu:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

Alternativ können Sie Kotlin-Code generieren, der für reine Kotlin-Module geeignet ist. Fügen Sie dazu Folgendes hinzu:

Groovy

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

Gemäß der Anleitung Zu AndroidX migrieren muss android.useAndroidX=true in Ihrer gradle.properties-Datei enthalten sein.

Informationen zur Verwendung von Kotlin-Erweiterungen finden Sie in der KTX-Dokumentation.

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.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung.

Version 2.9

Version 2.9.1

2. Juli 2025

androidx.navigation:navigation-*:2.9.1 wird veröffentlicht. Version 2.9.1 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, das dazu führte, dass NavEntries, die mit „single top“ instanziiert wurden, in ihrem Lifecycle.State nie über „CREATED“ hinausgingen. (I043ba, b/421095236)

Version 2.9.0

7. Mai 2025

androidx.navigation:navigation-*:2.9.0 wird veröffentlicht. Version 2.9.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.8.0

  • Navigationsaktionen für Safe Args werden jetzt mit der Annotation @CheckResult generiert, damit sie verwendet werden.

SupportingPane-Schnittstelle

  • Benutzerdefinierte Navigatoren können ihre Ziele jetzt als Implementierung der SupportingPane-Schnittstelle kennzeichnen. Dies signalisiert dem NavController, dass diese Ziele zusammen mit anderen Zielen angezeigt werden. Über diese Schnittstelle können beispielsweise mehrere Ziele gleichzeitig RESUMED werden.

Compose Kotlin Multiplatform

  • Für die Navigation gibt es jetzt eine neue gemeinsame NavController.handleDeepLink()-Funktion, die einen NavDeepLinkRequest anstelle eines Intent verwendet. So können Deeplinks auch auf anderen Plattformen als Android richtig verarbeitet werden. Vielen Dank, Konstantin Tskhovrebov!
  • Navigation bietet jetzt NavUri, eine neue gemeinsame Parserfunktion, die eine kompatible API für den URI von Android auf anderen Plattformen ist. So kann ein URI plattformunabhängig erstellt werden. Vielen Dank, Konstantin Tskhovrebov!

Typsichere Funktionen

  • Die typsicheren APIs, auf die zuvor nur über reified-Methoden zugegriffen werden konnte, d.h. composable<YourScreen> haben jetzt nicht reifizierte Versionen, die direkt eine KClass-Instanz verwenden.
  • Die Navigations-Typsicherheit unterstützt jetzt Wertklassen als Route oder als Argumenttyp einer Route.

Version 2.9.0-rc01

23. April 2025

androidx.navigation:navigation-*:2.9.0-rc01 wird veröffentlicht. Version 2.9.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Alle Nicht-Android-Plattformziele wurden aus Jetpack Navigation entfernt, da sie nicht funktionieren. Stattdessen werden jetzt Stubs für verschiedene Plattformen bereitgestellt.(I2877d)

Version 2.9.0-beta01

9. April 2025

androidx.navigation:navigation-*:2.9.0-beta01 wird veröffentlicht. Version 2.9.0-beta01 enthält diese Commits.

API-Änderungen

  • Die gemeinsame API von parseStringAsNavUri wurde in eine NavUri-Factory-Funktion geändert, die einen String akzeptiert. (I4db6e, b/403616316)

Abhängigkeitsupdates

  • Diese Bibliothek ist jetzt auf das Kotlin 2.0-Sprachniveau ausgerichtet und erfordert KGP 2.0.0 oder höher. (Idb6b5)

Version 2.9.0-alpha09

26. März 2025

androidx.navigation:navigation-*:2.9.0-alpha09 wird veröffentlicht. Version 2.9.0-alpha09 enthält diese Commits.

Neue Funktionen

  • Das navigation-testing-Modul wird jetzt neben Android auch auf Computern, Linux, macOS und iOS unterstützt. (I2b770, b/398265336)
  • NavType wird jetzt neben Android auch auf Computern, Linux, macOS und iOS unterstützt. (I297d8)

Version 2.9.0-alpha08

12. März 2025

androidx.navigation:navigation-*:2.9.0-alpha08 wird veröffentlicht. Version 2.9.0-alpha08 enthält diese Commits.

Fehlerkorrekturen

  • Navigation 2.8.9: Es wurde ein Regressionsfehler behoben, der in Navigation 2.8.8 gefunden wurde. Dieser Fehler führte dazu, dass ein Deeplink genau mit allen Feldern einer Deeplink-Anfrage oder eines Intents übereinstimmen musste, um als Übereinstimmung betrachtet zu werden. Das führte dazu, dass Deeplinks, die teilweise Feldübereinstimmungen enthielten und keine anderen, nicht mehr funktionierten. (Ie5e36, b/399826566)

Externe Beiträge

  • Neue gemeinsame Parserfunktion zum Erstellen eines NavUri. Vielen Dank, Konstantin Tskhovrebov! (If0a6a)

Version 2.9.0-alpha07

26. Februar 2025

androidx.navigation:navigation-*:2.9.0-alpha07 wird veröffentlicht. Version 2.9.0-alpha07 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem der Versuch, saveState mit einem nicht inklusiven Pop auszuführen, zu einem Null-savedState führte, der beim Wiederherstellen einen Absturz verursachen konnte. (I9f3e8, b/395091644)
  • Ab Navigation 2.8.8: Die NavDeepLink-Abstimmung wurde korrigiert. Ein Deeplink und eine Deeplinkanfrage müssen in Bezug auf URI, Aktion und MIME genau übereinstimmen. Ein Abgleich ist nicht mehr zulässig, wenn nur ein oder zwei Felder übereinstimmen. (I3b029, b/395712033)
  • Ab Navigation 2.8.8: Ein Fehler wurde behoben, bei dem Routen mit Platzhalterpfaden nicht mit einem hinzugefügten Deeplink übereinstimmten (I7ea92, b/389970341).

Externe Beiträge

  • Extrahieren Sie die APIs „navigation-common“, „navigation-runtime“ und „navigation-compose“ auf die gemeinsame Plattform. Vielen Dank, Konstantin Tskhovrebov! (I1e626, Ica76f, Idf479)

Bekannte Probleme

  • Aufgrund der Arbeiten zur Behebung von b/395712033 müssen Deeplinks fälschlicherweise alle Felder der Deeplink-Anfrage und/oder des Intent enthalten. Deeplinks sollten nur mit den Feldern übereinstimmen, die sie haben. Die nicht enthaltenen Felder sollten ignoriert werden. Dieses Problem wurde für eine spätere Version im Rahmen von b/399826566 behoben.

Version 2.9.0-alpha06

12. Februar 2025

androidx.navigation:navigation-*:2.9.0-alpha06 wird veröffentlicht. Version 2.9.0-alpha06 enthält diese Commits.

Neue Funktionen

  • Navigationsaktionen für Safe Args werden jetzt mit der Annotation @CheckResult generiert, damit sie verwendet werden. (I14d4c, b/356323084)

Fehlerkorrekturen

  • Es wurde ein Fehler in NavController behoben, bei dem versucht wurde, die Backstack-Zustände fälschlicherweise in einem Array wiederherzustellen, obwohl sie in einer Liste gespeichert wurden. (Idfb9b)
  • Navigation 2.8.7: Navigation Safe Args bietet jetzt Unterstützung für zusammensetzbare Ziele. (I35320, b/362791955)

Version 2.9.0-alpha05

29. Januar 2025

androidx.navigation:navigation-*:2.9.0-alpha05 wird veröffentlicht. Version 2.9.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, das bei der Verwendung von Navigation Compose zu einer unerwarteten Skalierungsanimation geführt hat. (I480f4, b/353294030)
  • Über Navigation 2.8.6: NavDestination-Labels, die über XML bereitgestellt werden, werden über NavType.get geparst, damit die benutzerdefinierte NavType-Logik berücksichtigt wird. (I7ec2f, b/388100796)
  • Über Navigation 2.8.6: Wenn Sie mit dataPattern zu einer Aktivität navigieren, versucht ActivityNavigator jetzt, den Argumentwert mit dem NavType des Arguments zu codieren. (I16376, b/383616432)
  • Navigation 2.8.5: Es wurde ein Problem behoben, das beim Verwenden von Navigation Compose und Aufrufen von „navigate“ im selben Frame, in dem die aktuelle Animation endet, zu einer unerwarteten Skalierungsanimation geführt hat. (I26cb1, b/353294030)

Version 2.9.0-alpha04

11. Dezember 2024

androidx.navigation:navigation-*:2.9.0-alpha04 wird veröffentlicht. Version 2.9.0-alpha04 enthält diese Commits.

Neue Funktionen

Die folgende Tabelle enthält die reifizierten und KClass-APIs.

reifiziert KClass
composable<TestClass> { } composable(TestClass::class) { }
navigation<NestedGraph>(startDestination = TestClass::class) navigation(route = NestedGraph::class, startDestination = TestClass::class)
dialog<TestClass> {} dialog(TestClass::class) {}
navDeepLink<TestClass>(baseUri) navDeepLink(TestClass::class, baseUri)
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri)
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { }
navController.getBackStackEntry<TestClass>() navController.getBackStackEntry(TestClass::class)
navController.popBackStack<TestClass>(true) navController.popBackStack(TestClass::class, true)
navController.clearBackStack<TestClass>() navController.clearBackStack(TestClass::class)
NavOptions.setPopUpTo<TestClass>() NavOptions.setPopUpTo(TestClass::class)
navOptions { popUpTo<TestClass> {...} } navOptions { popUpTo(TestClass::class) {...} }
NavGraph.setStartDestination<TestClass>() NavGraph.setStartDestination(TestClass::class)
NavGraph.findNode<TestClass>() NavGraph.findNode(TestClass::class)
backStackEntry.toRoute<TestClass>() backStackEntry.toRoute(TestClass::class)
savedStateHandle.toRoute<TestClass>() savedStateHandle.toRoute(TestClass::class)

API-Änderungen

  • Die Kotlin-spezifische NavGraph.setStartDestination-Überladung für Typsicherheit ist für Java-Quellen ausgeblendet. (Ic640c, b/364634035)

Fehlerkorrekturen

  • Navigation 2.8.5: Ein Problem wurde behoben, bei dem NavHost innerhalb von PredictiveBackHandler eine Ausnahme auslösen konnte, wenn der Backstack auf einen Eintrag reduziert wurde und im selben Frame ein System-Back ausgelöst wurde. (I1a429, b/375343407)
  • Navigation 2.8.5: Das Problem mit dem Fix NavDestination NullPointerException beim Aktualisieren von startDestination eines Diagramms wurde behoben. (I99421, b/361560785)

Externe Beiträge

Version 2.9.0-alpha03

13. November 2024

androidx.navigation:navigation-*:2.9.0-alpha03 wird veröffentlicht. Version 2.9.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Die Navigations-Typsicherheit unterstützt jetzt Wertklassen als Route oder als Argumenttyp einer Route. (I9344a, b/374347483)

Fehlerkorrekturen

  • Es wurde ein ConcurrentModificationException behoben, der auftreten konnte, wenn ein LifecycleObserver, das an ein NavBackStackEntry angehängt ist, eine Änderung des Backstacks auslöst, wenn der Host LifecycleOwner, z. B. die enthaltende Aktivität oder das enthaltende Fragment, seinen Lebenszyklusstatus ändert. (Ia9494)

Version 2.9.0-alpha02

30. Oktober 2024

androidx.navigation:navigation-*:2.9.0-alpha02 wird veröffentlicht. Version 2.9.0-alpha02 enthält diese Commits.

Externe Beiträge

  • Neue gemeinsame NavController.handleDeepLink(request: NavDeepLinkRequest)-Methode. Vielen Dank, Konstantin Tskhovrebov! (I3e228)

Version 2.9.0-alpha01

16. Oktober 2024

androidx.navigation:navigation-*:2.9.0-alpha01 wird veröffentlicht. Version 2.9.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Benutzerdefinierte Navigatoren können ihre Ziele jetzt als Implementierung der SupportingPane-Schnittstelle kennzeichnen. Dies signalisiert dem NavController, dass diese Ziele zusammen mit anderen Zielen angezeigt werden. Über diese Schnittstelle können beispielsweise mehrere Ziele gleichzeitig RESUMED werden. (Id5559)
  • Navigation 2.8.3: Für die Module navigation-common, navigation-runtime und navigation-compose wurden neue Lint-Prüfungen hinzugefügt, um alle typsicheren Routen zu identifizieren, die nicht korrekt mit @Serializable annotiert sind. Diese Prüfung wird auf alle NavGraphBuilder- und NavDeepLinkBuilder-Erweiterungsfunktionen angewendet. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • Navigation 2.8.3: Für die Module navigation-common, navigation-runtime und navigation-compose wurden neue Lint-Prüfungen hinzugefügt, um alle typsicheren Routen mit Enum-Argumenten zu identifizieren, die nicht korrekt mit @Keep annotiert sind. Diese Prüfung wird auf alle NavGraphBuilder- und NavDeepLinkBuilder-Erweiterungsfunktionen angewendet. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

Geändertes Verhalten

  • Wenn Sie versuchen, eine NavController zu verwenden, die zuvor DESTROYED wurde, wird jetzt ein IllegalStateException ausgelöst. (I520da, b/369616172)

Fehlerkorrekturen

  • Die Ausnahme „Enum-Klasse nicht gefunden“ wurde aktualisiert, um die Verwendung der Annotation @Keep vorzuschlagen, falls die Enum-Klasse in minimierten Builds gelöscht wird. (I90e79, b/358137294)

Bekannte Probleme

  • Es gibt ein Problem mit den neuen Lint-Regeln, die in Navigation 2.8.* hinzugefügt wurden. Dieses Problem führt zu einem Obsolete custom lint check-Fehler, wenn versucht wird, Lint mit dem Android-Gradle-Plugin 8.4 oder höher auszuführen. (b/368070326, b/371463741)

Version 2.8

Version 2.8.9

12. März 2025

androidx.navigation:navigation-*:2.8.9 wird veröffentlicht. Version 2.8.9 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Regressionsfehler in Navigation 2.8.8 behoben, bei dem ein Deeplink mit allen Feldern einer Deeplink-Anfrage oder eines Intents genau übereinstimmen musste, um als Übereinstimmung zu gelten. Das führte dazu, dass Deeplinks, die teilweise Feldübereinstimmungen enthielten und keine anderen, nicht mehr funktionierten. (Ie5e36, b/399826566)

Version 2.8.8

26. Februar 2025

androidx.navigation:navigation-*:2.8.8 wird veröffentlicht. Version 2.8.8 enthält diese Commits.

Fehlerkorrekturen

  • Ein Fehler wurde behoben, bei dem Routen mit Platzhalterpfaden nicht mit einem hinzugefügten Deeplink übereinstimmten. (I7ea92, b/389970341)
  • Die NavDeepLink-Abstimmung wurde korrigiert. Ein Deeplink und eine Deeplink-Anfrage müssen nun genau in Bezug auf URI, Aktion und MIME übereinstimmen. Ein Abgleich ist nicht mehr zulässig, wenn nur ein oder zwei Felder übereinstimmen. (I3227f, b/395712033)

Bekannte Probleme

  • Aufgrund der Arbeiten zur Behebung von b/395712033 müssen Deeplinks fälschlicherweise alle Felder der Deeplink-Anfrage und/oder des Intent enthalten. Deeplinks sollten nur mit den Feldern übereinstimmen, die sie haben. Die nicht enthaltenen Felder sollten ignoriert werden. Dieses Problem wurde für eine spätere Version im Rahmen von b/399826566 behoben.

Version 2.8.7

12. Februar 2025

androidx.navigation:navigation-*:2.8.7 wird veröffentlicht. Version 2.8.7 enthält diese Commits.

Fehlerkorrekturen

  • Navigation Safe Args unterstützt jetzt zusammensetzbare Ziele. (I35320, b/362791955)

Version 2.8.6

29. Januar 2025

androidx.navigation:navigation-*:2.8.6 wird veröffentlicht. Version 2.8.6 enthält diese Commits.

Fehlerkorrekturen

  • NavDestination-Labels, die über XML bereitgestellt werden, werden über NavType.get geparst, damit die benutzerdefinierte NavType-Logik berücksichtigt wird. (Id366d, b/388100796)
  • Wenn Sie mit dataPattern zu einer Aktivität navigieren, versucht ActivityNavigator jetzt, den Argumentwert mit dem NavType des Arguments zu codieren. (I1a71d, b/383616432)

Version 2.8.5

11. Dezember 2024

androidx.navigation:navigation-*:2.8.5 wird veröffentlicht. Version 2.8.5 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem NavHost innerhalb von PredictiveBackHandler eine Ausnahme auslösen konnte, wenn der Backstack auf einen Eintrag reduziert wurde und im selben Frame ein System-Back ausgelöst wurde. (I1a429, b/375343407)
  • Der Fehler NavDestination NullPointerException beim Aktualisieren der startDestination einer Grafik wurde behoben. (I99421, b/361560785)
  • Es wurde ein Problem behoben, das zu einer unerwarteten Skalierungsanimation führte, wenn Navigation Compose verwendet und „navigate“ im selben Frame aufgerufen wurde, in dem die aktuelle Animation endet. (I26cb1, b/353294030)
  • Es wurde ein ConcurrentModificationException behoben, der auftreten konnte, wenn ein LifecycleObserver, das an ein NavBackStackEntry angehängt ist, eine Änderung des Backstacks auslöst, wenn der Host LifecycleOwner, z. B. die enthaltende Aktivität oder das enthaltende Fragment, seinen Lebenszyklusstatus ändert. (Ia9494)

Externe Beiträge

  • Die Typsicherheit für die Navigation unterstützt jetzt List<Enum> als Argumenttyp einer Route, ohne dass eine benutzerdefinierte NavType erforderlich ist. Vielen Dank, Csaba Kozák! (GH-725, b/375559962)

Version 2.8.4

13. November 2024

androidx.navigation:navigation-*:2.8.4 wird veröffentlicht. Version 2.8.4 enthält diese Commits.

Neue Funktionen

Fehlerkorrekturen

Version 2.8.3

16. Oktober 2024

androidx.navigation:navigation-*:2.8.3 wird veröffentlicht. Version 2.8.3 enthält diese Commits.

Neue Funktionen

  • Es wurden neue Lint-Prüfungen für die Module navigation-common, navigation-runtime und navigation-compose hinzugefügt, um alle typsicheren Routen zu identifizieren, die nicht korrekt mit @Serializable annotiert sind. Diese Prüfung wird auf alle NavGraphBuilder- und NavDeepLinkBuilder-Erweiterungsfunktionen angewendet. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • Es wurden neue Lint-Prüfungen für die Module navigation-common, navigation-runtime und navigation-compose hinzugefügt, um alle typsicheren Routen mit Enum-Argumenten zu identifizieren, die nicht korrekt mit @Keep annotiert sind. Diese Prüfung wird auf alle NavGraphBuilder- und NavDeepLinkBuilder-Erweiterungsfunktionen angewendet. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem die neuen Lint-Regeln, die in Navigation 2.8.* hinzugefügt wurden, beim Ausführen von Lint mit dem Android-Gradle-Plug-in 8.4+ einen Obsolete custom lint check-Fehler verursacht haben. (I1be3d, b/368070326, b/371463741)

Bekannte Probleme

  • Bei der Ausführung von Lint mit Lint 16 (AGP 8.7) oder höher wird durch die Navigations-Lint-Prüfung der Fehler „Obsolete custom lint check“ (Veraltete benutzerdefinierte Lint-Prüfung) ausgegeben. (b/371926651)

Version 2.8.2

2. Oktober 2024

androidx.navigation:navigation-*:2.8.2 wird veröffentlicht. Version 2.8.2 enthält diese Commits.

Neue Funktionen

  • Die Navigation Type Safety unterstützt jetzt serialisierbare Klassen, die Double, Double?, DoubleArray, DoubleArray?, List<Double> und List<Double>? enthalten, ohne dass ein benutzerdefiniertes NavType erforderlich ist. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)

Fehlerkorrekturen

  • Die Fehlermeldung wurde verbessert, die angezeigt wird, wenn ein Argument einer Route nicht auf ein NavType abgebildet werden kann. Die neue Fehlermeldung enthält den Argumentnamen, den vollqualifizierten Namen des Arguments und den vollqualifizierten Namen der Route. (Id8416, b/346264232)

Version 2.8.1

18. September 2024

androidx.navigation:navigation-*:2.8.1 wird veröffentlicht. Version 2.8.1 enthält diese Commits.

Neue Funktionen

  • Es wurde eine neue Lint-Regel hinzugefügt, um die Verwendung der Funktion popBackStack zu erzwingen, die einen reifizierten Klassentyp akzeptiert, wenn versucht wird, popBackStack mit typsicheren APIs auszuführen. (Ief161, b/358095343)

Fehlerkorrekturen

  • Für die Navigation muss die Route, die an die NavGraph-Methode startDestination übergeben wird, die Werte für alle erforderlichen Argumente enthalten. Dazu gehören Argumente, die nicht nullfähig sind und keinen Standardwert haben. (I18e74, b/362594265)
  • Für Navigations-Safe Args wurde Unterstützung für nicht nullable Strings hinzugefügt, sodass „null“-Werte unverändert geparst und im Bundle gespeichert werden. Dies weicht vom bisherigen Verhalten ab, bei dem „null“-Werte in ein Null-Objekt geparst wurden. Diese Änderung gilt nur für String-Typen, die nicht nullfähig sind. Nullable-Strings bleiben unverändert. (I08b4a, b/348936238)
  • Für NavDestination ist kein Deeplinking mehr möglich, es sei denn, dem Ziel wurde explizit ein Deeplink hinzugefügt. Das bedeutet auch, dass Sie nur mit der Überladung der Navigationsfunktion, die eine String-Route verwendet, zu einer Zielroute navigieren können. Damit wird eine Sicherheitslücke behoben, die es ermöglichte, einen Deeplink zu einem potenziell geschützten Ziel zu erstellen. (Ie30e6)

Abhängigkeitsupdate

  • Navigation Safe Args hängt jetzt von Kotlin 1.9.24 anstelle von Kotlin 2.X ab. Entwickler sind also nicht gezwungen, ein Update durchzuführen. (a4129a)
  • Navigation Compose hängt jetzt von Compose 1.7.2 ab.

Version 2.8.0

4. September 2024

androidx.navigation:navigation-*:2.8.0 wird veröffentlicht. Version 2.8.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.7.0

Typsicherheit des Navigation Kotlin DSL

  • Die Navigation bietet jetzt Typsicherheit für die Kotlin-DSL (die von Navigation Compose verwendet wird) mithilfe von Kotlin Serialization. So können Sie Ziele in Ihrem Navigationsdiagramm über typsichere Objekte und Datenklassen definieren:
    // Define a home destination that doesn't take any arguments
    @Serializable
    object Home

    // Define a profile destination that takes an ID
    @Serializable
    data class Profile(val id: String)

    // Now define your NavHost using type safe objects
    NavHost(navController, startDestination = Home) {
        composable<Home> {
            HomeScreen(onNavigateToProfile = { id ->
                navController.navigate(Profile(id))
            })
        }
        composable<Profile> { backStackEntry ->
            val profile: Profile = backStackEntry.toRoute()
            ProfileScreen(profile)
        }
    }

Weitere Informationen finden Sie im Blogpost Navigation Compose meet Type Safety.

Navigation Compose Predictive Back

  • Navigation Compose unterstützt jetzt die vorhersagende In-App-Zurück-Funktion über die neuen SeekableTransitionState-APIs aus compose-animation. So können Sie mit der Zurück-Geste das vorherige Ziel mit Ihrer benutzerdefinierten Transition aufrufen, bevor Sie die Transaktion mit der Geste „Abgeschlossen“ bestätigen oder abbrechen.

Composable für Navigationsfragment

  • Es wurde ein neues navigation-fragment-compose-Artefakt hinzugefügt, das eine ComposableNavHostFragment-Alternative zu NavHostFragment enthält. Damit können Sie Ihren Navigations-XML-Dateien zusammensetzbare Ziele hinzufügen. Jedes composable-Ziel muss als @Composable-Methode auf oberster Ebene ohne Argumente ausgedrückt werden, deren vollqualifizierter Name als android:name-Attribut für jedes Ziel verwendet wird. Wenn Sie zu einem dieser Ziele navigieren, wird ein enthaltendes Fragment erstellt, um die zusammensetzbaren Inhalte anzuzeigen.
  // In HomeScreen.kt
  @Composable
  fun HomeScreen() {
    // Your Composable content here
  }

  // In your navigation.xml
  <composable
    android:id="@+id/home_screen"
    android:name="com.example.HomeScreenKt\$HomeScreen" />

Weitere Änderungen

  • Navigation Compose hängt jetzt von Compose 1.7.0 ab.
  • Für die Navigation gibt es jetzt die neue Klasse CollectionNavType<T>, eine Unterklasse von NavType<T> für sammlungsbasierte Argumente wie Listen, Arrays und Maps. Alle Standard-NavType-Arrays (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType und StringArrayType) werden jetzt von dieser neuen Klasse abgeleitet.
  • NavType bietet jetzt integrierte Unterstützung für Listen vom Typ „Int“, „String“, „Boolean“, „Float“ und „Long“.

Version 2.8.0-rc01

21. August 2024

androidx.navigation:navigation-*:2.8.0-rc01 wird veröffentlicht. Version 2.8.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Behebung eines Navigationsabsturzes beim Übergeben von Enum-Klassen auf oberster Ebene als typsichere Argumente. (I0ba76, b/358137294)
  • Navigation 2.8 funktioniert jetzt korrekt mit SDK 34 und wird erst mit der Version 2.9 zusammen mit den anderen AndroidX-Bibliotheken auf SDK 35 umgestellt. (b/358798728)

Version 2.8.0-beta07

7. August 2024

androidx.navigation:navigation-*:2.8.0-beta07 wird veröffentlicht. Version 2.8.0-beta07 enthält diese Commits.

Bekannte Probleme

  • Aufgrund von b/358137294 werden nur Enums unterstützt, die in einer anderen Klasse verschachtelt sind. Enums der obersten Ebene werden in der nächsten Version unterstützt.

Fehlerkorrekturen

  • Wenn Sie zu doppelten oder geteilten Zielen navigieren, wird in der Navigation das Ziel priorisiert, das dem aktuellen Standort im Diagramm am nächsten ist. (Ic89a4, b/352006850)
  • Die Navigation in Safe Args hat jetzt ein neues NavType.EnumType. Das bedeutet, dass für Enum-Typen keine benutzerdefinierten NavTypes mehr erforderlich sind. Der SerialName des Enum muss der standardmäßige vollqualifizierte Name sein. (I66d22, b/346475493)
  • Die Navigation in Safe Args bietet jetzt integrierte Unterstützung für Argumenttypen, die Nullwerte zulassen, einschließlich Int?, Long?, Float?, Boolean? und Enum<*>?. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237)
  • Die startDestination der NavGraph verwenden jetzt die Standardargumentwerte, wenn die an die NavGraph übergebene startDestination-Route genau der startDestination.route entspricht. (I13762, b/354046047)

Version 2.8.0-beta06

24. Juli 2024

androidx.navigation:navigation-*:2.8.0-beta06 wird veröffentlicht. Version 2.8.0-beta06 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem die WrongStartDestinationType-Lint-Prüfungen nicht nach Companion-Objekten für den übergebenen Klassentyp gesucht haben. Dadurch konnte der Fehler nicht erkannt werden. (I92b09)

Version 2.8.0-beta05

10. Juli 2024

androidx.navigation:navigation-*:2.8.0-beta05 wird veröffentlicht. Version 2.8.0-beta05 enthält diese Commits.

Fehlerkorrekturen

  • Ein Absturz bei der singleTop-Navigation wurde behoben, wenn verschachtelte NavGraphs dieselbe startDestination-Route verwenden. (I17b94, b/294408596)

Version 2.8.0-beta04

26. Juni 2024

androidx.navigation:navigation-*:2.8.0-beta04 wird veröffentlicht. Version 2.8.0-beta04 enthält diese Commits.

Fehlerkorrekturen

  • Die Navigation unterstützt jetzt die Navigation mit leeren Strings in Pfadargumenten. (Ic5dbd, b/339481310)
  • Die Fehlermeldung für benutzerdefinierte Serialisierer, die direkt in Klassenfeldern über @Serializable(with =...) deklariert werden, wurde verbessert. Es wird nun klargestellt, dass dies derzeit eine nicht unterstützte Funktion ist. (I052b0, b/341319151)
  • Die SavedStateHandleFactory-Test-API kann jetzt in Nicht-Android-Tests verwendet werden, erfordert aber, dass Robolectric die Argumentanalyse mit Bundles unterstützt. (I76cdc, b/340966212)
  • Der Absturz beim Wiederherstellen des Status beim Fortsetzen der App nach dem Beenden des Prozesses mit Type-Safe Navigation in Compose wurde behoben. (Ia8f38, b/341801005)
  • Ein Problem in Navigation Compose wurde behoben, bei dem die NavBackStackEntry, zu der der Nutzer zurückkehrt, nach dem Abbrechen der vorhersagenden Rückwärtsbewegung nie wieder in den RESUMED-Lebenszyklusstatus zurückkehrt. Außerdem wird so dafür gesorgt, dass das Ziel nach einem Fling korrekt wieder eingeblendet wird, anstatt einfach an die richtige Stelle zu springen. (I97a0c, b/346608857)
  • Wenn Sie die Funktion „Vorhersagende Zurück-Geste“ mit Navigation Compose verwenden, hat das Pop-Ziel jetzt die richtige Z-Reihenfolge und wird korrekt über dem eingehenden Ziel animiert. (I2077b, b/345993681)

Version 2.8.0-beta03

12. Juni 2024

androidx.navigation:navigation-*:2.8.0-beta03 wird veröffentlicht. Version 2.8.0-beta03 enthält diese Commits.

API-Änderungen

  • CollectionNavType hat eine neue abstrakte Methode emptyCollection(). Überschreiben Sie diese Methode, um eine leere Sammlung zu verarbeiten, die als Argument übergeben wird. (Ie4d84, b/341723133)

Fehlerkorrekturen

  • Dokumentation zu NavType.serializeAsValue und serializeAsValues wurde hinzugefügt, um darauf hinzuweisen, dass die endgültigen Ausgaben URI-codiert sein sollten. (Ida6bd, b/344943214)
  • Ein Absturz beim Aufrufen von toRoute<T> mit einem Null-Argument für CollectionNavType wurde behoben. Wenn Sie mit einem Nullwert für CollectionNavType navigieren, ist das Ausgabeargument der Standardwert, der in Ihrer serialisierbaren Klasse deklariert ist, oder der Rückgabewert von emptyCollection(), wenn kein Standardwert vorhanden ist. (I84158, Id630f, b/342672856)

Version 2.8.0-beta02

29. Mai 2024

androidx.navigation:navigation-*:2.8.0-beta02 wird veröffentlicht. Version 2.8.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Der ClassCastException-Absturz bei Verwendung von NavBackStackEntry.toRoute mit einem benutzerdefinierten NavType, der Nullwerte zulässt, wurde behoben. (I1c29b, b/342239473)
  • Es wurden Probleme mit der Wiederherstellung des Navigations-Backstacks behoben, die auftraten, wenn versucht wurde, einen Backstack-Eintrag wiederherzustellen, der über die ID des aktuellen Ziels nicht erreichbar ist. Da Routen auf IDs basieren, waren auch Ziele betroffen, die mit Routen erstellt wurden. Außerdem wird ein Absturz behoben, der durch den Aufruf von clearBackStack() verursacht wurde und dasselbe zugrunde liegende Problem hatte. (I423c3, b/339908057)

Version 2.8.0-beta01

14. Mai 2024

androidx.navigation:navigation-*:2.8.0-beta01 wird veröffentlicht. Version 2.8.0-beta01 enthält diese Commits.

API-Änderungen

  • SavedStateHandle.toRoute() akzeptiert jetzt einen typeMap-Parameter für benutzerdefinierte Argumenttypen. (Ie39fb, b/339026523)
  • Eine Test-API wurde navigation-testing hinzugefügt, um ein SavedStateHandle aus einem serialisierbaren Kotlin-Objekt zu erstellen. (Id4867, b/339080702)

Fehlerkorrekturen

  • Es wurden Dokumente für fehlende Parameter für Navigation Kotlin DSL-Funktionen hinzugefügt. (I26a36)

Version 2.8.0-alpha08

1. Mai 2024

androidx.navigation:navigation-*:2.8.0-alpha08 wird veröffentlicht. Version 2.8.0-alpha08 enthält diese Commits.

Safe Args in Navigation Compose

Diese Funktion verwendet Kotlin Serialization, damit Sie Ziele in Ihrem Navigationsdiagramm über typsichere Objekte und Datenklassen definieren können:

  // Define a home destination that doesn't take any arguments
  @Serializable
  object Home

  // Define a profile destination that takes an ID
  @Serializable
  data class Profile(val id: String)

  // Now define your NavHost using type safe objects
  NavHost(navController, startDestination = Home) {
      composable<Home> {
          HomeScreen(onNavigateToProfile = { id ->
              navController.navigate(Profile(id))
          })
      }
      composable<Profile> { backStackEntry ->
          val profile: Profile = backStackEntry.toRoute()
          ProfileScreen(profile)
      }
  }

Weitere Informationen finden Sie im Blogpost Navigation Compose meet Type Safety.

Neue Funktionen

  • Das navigation-fragment-compose-Artefakt bietet jetzt eine LocalFragment-Komposition, die für zusammensetzbare Methoden innerhalb eines ComposableFragment lokal ist. (If35e5)
  • NavType bietet jetzt integrierte Unterstützung für Listen vom Typ „Int“, „String“, „Boolean“, „Float“ und „Long“. (I4b6dd, Ia914c, b/188693139)

Version 2.8.0-alpha07

17. April 2024

androidx.navigation:navigation-*:2.8.0-alpha07 wird veröffentlicht. Version 2.8.0-alpha07 enthält diese Commits.

Neue Funktionen

  • Fügt ein neues navigation-fragment-compose-Artefakt hinzu, das eine ComposableNavHostFragment-Alternative zu NavHostFragment enthält. Damit können Sie Ihren Navigations-XML-Dateien composable-Ziele hinzufügen. Jedes composable-Ziel muss als @Composable-Methode auf oberster Ebene ohne Argumente ausgedrückt werden, deren vollqualifizierter Name als android:name-Attribut für jedes Ziel verwendet wird. Wenn Sie zu einem dieser Ziele navigieren, wird ein enthaltendes Fragment erstellt, um die zusammensetzbaren Inhalte anzuzeigen. (I0ef2e, b/265480755)

    // In HomeScreen.kt
    @Composable
    fun HomeScreen() {
      // Your Composable content here
    }
    
    // In your navigation.xml
    <composable
      android:id="@+id/home_screen"
      android:name="com.example.HomeScreenKt\$HomeScreen" />
    

API-Änderungen

  • Die Unterstützung für Safe Args in Navigation Compose wird mit einem Ansatz auf Basis von Kotlin-Serialisierung fortgesetzt. Diese APIs sind noch nicht fertig und mit der Anmerkung ExperimentalSafeArgsApi gekennzeichnet. Diese Anmerkung wird entfernt, wenn die gesamte API-Oberfläche in einer zukünftigen Version fertiggestellt ist. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)

Version 2.8.0-alpha06

3. April 2024

androidx.navigation:navigation-*:2.8.0-alpha06 wird veröffentlicht. Version 2.8.0-alpha06 enthält diese Commits.

API-Änderungen

Fehlerkorrekturen

  • In NavHost wird jetzt Alignment.TopStart als Standardargument für „contentAlignment“ verwendet. Dadurch wird das Verhalten an die Standardeinstellung für AnimatedContent angepasst und einige Fälle eines unerwarteten Übergangs von der Mitte aus behoben. (I09e72, b/330111602)
  • Wenn Sie die Vorhersage-Geste „Zurück“ verwenden, während Sie Navigation Compose nutzen, wird die benutzerdefinierte Übergangsanimation jetzt korrekt abgeschlossen, anstatt sofort beendet zu werden.NavHost (I99017, b/327292110)

Version 2.8.0-alpha05

20. März 2024

androidx.navigation:navigation-*:2.8.0-alpha05 wird veröffentlicht. Version 2.8.0-alpha05 enthält diese Commits.

Neue Funktionen

  • Sie können jetzt Argumente direkt an NavGraphs startDestination in der startDestination-Route übergeben, ohne auf defaultValue angewiesen zu sein. Das gilt auch für verschachtelte NavGraph startDestinations. (I0e0b5, b/109505019, b/188693139)

API-Änderungen

  • Es wurde eine neue abstrakte Klasse CollectionNavType<T> hinzugefügt, eine Unterklasse von NavType<T> für sammlungsbasierte Argumente wie Listen, Arrays und Maps. (Ic6d63, b/188693139)
  • Alle Standard-NavType-Arrays (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType und StringArrayType) haben jetzt den Typ CollectionNavType (Idcf79, b/188693139).
  • NavType bietet jetzt eine neue offene valueEquals API, mit der ermittelt werden kann, ob zwei Werte desselben Typs gleich sind. (I6cb97, b/327229511)

Fehlerkorrekturen

  • Bei Abfrageparametern in Deeplinks sind jetzt Werte in Form von geschweiften Klammern um den Argumentnamen (z.B. {argName}) als gültige Werte für stringbasierte NavTypes zulässig. Damit wird ein Problem behoben, bei dem ein solcher Wert für alle Typen als ungültig oder als fehlender Wert betrachtet wurde. (I18302, b/327274038)
  • NavController-Funktionen, die Routen wie navigate oder popBackStack unterstützen, können jetzt Routen mit Argumenten des Typs „Array“ NavTypes richtig abgleichen. (Iea805, b/327229511)

Version 2.8.0-alpha04

6. März 2024

androidx.navigation:navigation-*:2.8.0-alpha04 wird veröffentlicht. Version 2.8.0-alpha04 enthält diese Commits.

Neue Funktionen

  • Sie können jetzt die SizeTranform für Ihre Übergänge in Navigation Compose angeben, indem Sie sie als Teil der Initialisierung für die Funktionen composable und/oder navigation definieren. (I91062, b/296912651)

Fehlerkorrekturen

  • Ein Problem wurde behoben, durch das NavHost in Compose Navigation den Übergang nicht richtig angezeigt hat, wenn „System Back“ ohne Geste verwendet wurde. (Iceeae, b/325998468)

Version 2.8.0-alpha03

21. Februar 2024

androidx.navigation:navigation-*:2.8.0-alpha03 wird veröffentlicht. Version 2.8.0-alpha03 enthält diese Commits.

API-Änderungen

  • NavBackStackEntry.savedStateHandle ist jetzt als @MainThread markiert, da darin Code verwendet wird, der ohnehin im Hauptthread ausgeführt werden muss. (Ibb988, b/299523245)

Fehlerkorrekturen

  • Ein Problem in Navigation wurde behoben, das dazu führte, dass NavGraph-ViewModels zu früh DESTROYED wurden, weil die ViewModel des zugehörigen Eintrags nicht Teil des gespeicherten Status war. (Ib6bb7, b/317581849)

Abhängigkeitsupdate

Version 2.8.0-alpha02

7. Februar 2024

androidx.navigation:navigation-*:2.8.0-alpha02 wird veröffentlicht. Version 2.8.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Navigation Compose unterstützt jetzt die vorhersagende In-App-Zurück-Funktion über die neuen SeekableTransitionState-APIs aus compose-animation. So können Sie mit der Zurück-Geste das vorherige Ziel mit Ihrer benutzerdefinierten Transition aufrufen, bevor Sie die Transaktion mit der Geste „Abgeschlossen“ bestätigen oder abbrechen. (I8b8e9)

Version 2.8.0-alpha01

24. Januar 2024

androidx.navigation:navigation-*:2.8.0-alpha01 wird veröffentlicht. Version 2.8.0-alpha01 enthält diese Commits.

Fehlerkorrekturen

  • Das Problem mit dem BackStackState-Leck wurde behoben. Wenn mehrere saveState-Aufrufe für ein Ziel erfolgen, werden mehrere Status gespeichert, aber nur der erste kann wiederhergestellt werden. (I598b0, b/309559751)
  • Ein Problem wurde behoben, bei dem Argumente, die keine Strings sind, nicht richtig angezeigt wurden, wenn die Titel von App-Leisten mit den NavigationUI-Helfern ausgefüllt wurden. (#636, b/316676794)

Abhängigkeitsupdate

  • Navigation Compose hängt jetzt von Compose 1.7.0-alpha01 ab. Damit wird ein Problem behoben, das eine unerwartete Skalierungsanimation verursachen konnte. (b/297258205)

Externe Beiträge

  • Vielen Dank an SimonMarquis, der das Anzeigeproblem für Nicht-String-Argumente bei der Verwendung der NavigationUI-Helfer zum Festlegen des Titels von App-Leisten behoben hat.

Version 2.7.7

Version 2.7.7

7. Februar 2024

androidx.navigation:navigation-*:2.7.7 wird veröffentlicht. Version 2.7.7 enthält diese Commits.

Fehlerkorrekturen

  • Backport von Navigation 2.8.0-alpha01: Es wurde ein BackStackState-Leck behoben, bei dem mehrere saveState()-Aufrufe für ein einzelnes NavBackStackEntry dazu führten, dass mehrere Zustände gespeichert wurden, aber nur der erste gespeicherte Zustand wiederhergestellt werden konnte. (I598b0, b/309559751)
  • Backport von Navigation 2.8.0-alpha01: Ein Problem wurde behoben, bei dem Nicht-String-Argumente nicht richtig angezeigt wurden, wenn die Titel von App-Leisten mit den NavigationUI-Helfern ausgefüllt wurden. (#636, b/316676794)

Externe Beiträge

  • Vielen Dank an SimonMarquis, der das Anzeigeproblem für Nicht-String-Argumente bei der Verwendung der NavigationUI-Helfer zum Festlegen des Titels von App-Leisten behoben hat.

Version 2.7.6

Version 2.7.6

13. Dezember 2023

androidx.navigation:navigation-*:2.7.6 wird veröffentlicht. Version 2.7.6 enthält diese Commits.

Fehlerkorrekturen

  • Die Funktion NavGraph equals() berücksichtigt jetzt korrekt die Knoten des anderen Diagramms anstelle nur des aufrufenden Diagramms. So wird dafür gesorgt, dass Diagramme mit Knoten mit unterschiedlichen IDs nicht mehr als gleich betrachtet werden (I401cb, b/311414915).

Version 2.7.5

Version 2.7.5

1. November 2023

androidx.navigation:navigation-*:2.7.5 wird veröffentlicht. Version 2.7.5 enthält diese Commits.

Leistungsverbesserungen

  • Die Leistung beim Vergleichen von zwei Grafiken wurde erheblich verbessert (sowohl in Bezug auf die Zeit als auch auf die Anzahl der Zuweisungen). Das bedeutet, dass Aufrufe wie setGraph, bei denen der neue Graph intern mit dem vorhandenen verglichen wird, viel schneller sind und weniger übersprungene Frames zur Folge haben. Vielen Dank an Michał Z für die gründliche Analyse, die zu dieser Verbesserung geführt hat. (I6ad62)
  • Mit NavHost wird das Startziel jetzt im ersten Kompositionsdurchlauf gerendert. Es muss nicht mehr auf den zweiten Durchlauf gewartet werden, um den aktualisierten Status zu lesen. (I439a7, b/304852206)

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem der Backstack geleert wurde, wenn Sie setGraph mit genau demselben Diagramm mehr als einmal aufgerufen haben, sofern im Diagramm ein Zielvorhaben mit einer Aktion vorhanden war, die zwei Zielvorhaben verknüpft hat. (Ieaed7)
  • Dialogfelder, die schnell nacheinander aufgerufen und geschlossen wurden, werden nicht mehr in der Liste der NavController.visibleEntries angezeigt. (I67586, b/287969970)
  • Wenn ein Eintrag entfernt wird und danach eine Konfigurationsänderung erfolgt, wird der ViewModel des Eintrags jetzt richtig gelöscht, wenn saveState „false“ ist. (Idf242, b/298164648)
  • Ein Problem wurde behoben, bei dem NavController denselben Deeplink mehrmals verarbeiten konnte, wenn der Backstack vor einer Konfigurationsänderung oder einem Aufruf von setGraph vollständig leer war, und zwar nur, wenn für den eingehenden Intent das Flag FLAG_ACTIVITY_NEW_TASK festgelegt war. (I73c7f)

Abhängigkeitsupdates

  • Die Navigation mit Fragmenten hängt jetzt von Fragment 1.6.2 ab. Damit wird ein Problem behoben, bei dem die ViewModel-Instanzen verschachtelter Fragmente beim Aufrufen von clearBackStack nicht gelöscht wurden.

Version 2.7.4

Version 2.7.4

4. Oktober 2023

androidx.navigation:navigation-*:2.7.4 wird veröffentlicht. Version 2.7.4 enthält diese Commits.

Neue Funktionen

  • Unterstützung für popUpTo hinzugefügt, um Routen mit Argumenten zu verwenden, damit zu einem bestimmten Eintrag zurückgekehrt werden kann, der genau diese Argumente verwendet. Dies entspricht der Unterstützung in popBackStack. (I731f4, b/299255572)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem das Unterbrechen einer Navigation mit einer anderen Navigation mit popUpTo zum Absturz von FragmentNavigator führte. (I3c848, b/301887045)
  • Ein Problem wurde behoben, bei dem die currentDestination durch das Zurückgehen im System nicht richtig aktualisiert wurde, um dem angezeigten Fragment zu entsprechen. (Id0d6c, b/289877514)
  • Der DialogFragment-Lebenszyklus wechselt jetzt ordnungsgemäß in den Status RESUMED, wenn das darüber befindliche Dialogfeld geschlossen wird. (I88f0d, b/301811387)

Version 2.7.3

Version 2.7.3

20. September 2023

androidx.navigation:navigation-*:2.7.3 wird veröffentlicht. Version 2.7.3 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem in der Navigation mit Fragmenten wurde behoben, das dazu geführt hat, dass die Liste visibleEntries falsche Einträge enthielt. (I5caa9, b/288520638)
  • Es wurde ein Problem behoben, das dazu geführt hat, dass das Ziel des schwebenden Fensters (z. B. Dialogs, Bottomsheets usw.) nie einen RESUMED-Lifecycle-Callback erhalten hat. (I3b866, b/287505132)

Version 2.7.2

Version 2.7.2

6. September 2023

androidx.navigation:navigation-*:2.7.2 wird veröffentlicht. Version 2.7.2 enthält diese Commits.

Fehlerkorrekturen

  • Die Navigation hängt jetzt von Lifecycle 2.6.2 ab. Dadurch wird eine Interaktion zwischen rememberSaveable und NavHost von Navigation Compose behoben, die dazu geführt hat, dass der rememberSaveable-Zustand von Zielen und alle ViewModel-eigenen SavedStateHandle-Instanzen nach dem Beenden und Neuerstellen des Prozesses nicht richtig wiederhergestellt wurden. (b/298059596, b/289436035)
  • Es wurde ein Problem behoben, bei dem mehrere Dialogfelder in Navigation Compose gleichzeitig angezeigt wurden und die teilweise verdeckten Dialogfelder (z.B. nicht das oberste Dialogfeld) sich im Lebenszyklusstatus CREATED anstatt im Status STARTED befanden. (aosp/2728520, b/289257213)
  • Ein Problem wurde behoben, bei dem beim gleichzeitigen Anzeigen mehrerer Dialogfelder in Navigation Compose das Schließen des obersten Dialogfelds dazu führte, dass das neue oberste Dialogfeld im Lebenszyklusstatus STARTED hängen blieb, anstatt korrekt zu RESUMED zu wechseln. (aosp/2629401, b/286371387)
  • Bei Navigation Safe Args wird die Aufgabe nicht mehr sofort instanziiert, wenn sie nicht tatsächlich ausgeführt wird. (I0e385, b/260322841)

Abhängigkeitsupdate

  • Navigation Compose hängt jetzt von Compose 1.5.1 ab.

Version 2.7.1

Version 2.7.1

23. August 2023

androidx.navigation:navigation-*:2.7.1 wird veröffentlicht. Version 2.7.1 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Problem in Navigation mit Compose behoben, bei dem beim Zugriff auf eine Lifecycle.State.DESTROYED ViewModel mit einer Scaffold ein Fehler auftreten konnte. (I1dc11, b/268422136)

Version 2.7.0

Version 2.7.0

9. August 2023

androidx.navigation:navigation-*:2.7.0 wird veröffentlicht. Version 2.7.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.6.0

Animationen von Accompanist

Da AnimatedContent jetzt stabil ist, konnten wir den Code aus Accompanist Navigation Animation wieder in Navigation Compose verschieben.

Das bedeutet, dass alle Funktionen zum Festlegen benutzerdefinierter Übergänge, die in AnimatedNavHost verfügbar waren, direkt in NavHost unterstützt werden.

Es werden keine weiteren Änderungen an Accompanist Navigation Animation vorgenommen. Wir werden die Bibliothek bald offiziell einstellen und eine Anleitung zur Migration zurück zu Navigation Compose bereitstellen. Diese Anleitung ist das Gegenteil der Migrationsanleitung. Wenn Sie bereits die aktuelle Accompanist-Alphaversion (0.31.2-alpha) verwenden, sind keine weiteren API-Änderungen erforderlich. (b/197140101)

Fehlerkorrekturen

  • „NavHost“ in Navigation Compose fängt jetzt System-Back-Aufrufe auch dann richtig ab, wenn die Aktivität beendet und wieder aufgenommen wurde. (Icb6de, b/279118447)

Abhängigkeitsupdates

  • Die Navigation hängt jetzt von Compose 1.5.0 ab, nicht mehr von 1.1.0.

Version 2.7.0-rc01

26. Juli 2023

androidx.navigation:navigation-*:2.7.0-rc01 wird veröffentlicht. Version 2.7.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem die Lambdas EnterTransition und ExitTransition, die als Teil von NavHost erstellt wurden, möglicherweise im Arbeitsspeicher verblieben sind, auch nachdem NavHost aus der Komposition entfernt wurde. (I893d0)

Bekannte Probleme

  • In Navigation 2.6.x gibt es ein Problem, das beim Navigieren mit „popUpTo“ einen IllegalArgumentException verursachen kann. Möglicherweise lässt sich diese Ausnahme vermeiden, indem Sie Ihr Diagramm umstrukturieren. Hier finden Sie entsprechende Hinweise. (b/287133013)

Version 2.7.0-beta02

28. Juni 2023

androidx.navigation:navigation-*:2.7.0-beta02 wird veröffentlicht. Version 2.7.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Navigation Compose hat jetzt die richtige Z-Reihenfolge für benutzerdefinierte Übergänge, die mit der Option popUpTo navigieren.(/Ib1c3a, b/285153947)

Version 2.7.0-beta01

7. Juni 2023

androidx.navigation:navigation-*:2.7.0-beta01 wird veröffentlicht. Version 2.7.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • NavHost in Navigation Compose fängt jetzt auch dann System-Back-Aufrufe ab, wenn Activity STOPPED und RESUMED wurde. (Icb6de, b/279118447)

Version 2.7.0-alpha01

24. Mai 2023

androidx.navigation:navigation-*:2.7.0-alpha01 wird veröffentlicht. Version 2.7.0-alpha01 enthält diese Commits.

Animationen von Accompanist

Da AnimatedContent jetzt stabil ist, konnten wir den Code aus Accompanist Navigation Animation wieder in Navigation Compose verschieben.

Das bedeutet, dass alle Funktionen zum Festlegen benutzerdefinierter Übergänge, die in AnimatedNavHost verfügbar waren, direkt in NavHost unterstützt werden.

Es werden keine weiteren Änderungen an Accompanist Navigation Animation vorgenommen. Wir werden die Bibliothek bald offiziell einstellen und eine Anleitung zur Migration zurück zu Navigation Compose bereitstellen. Diese Anleitung ist das Gegenteil der Migrationsanleitung. Wenn Sie bereits die aktuelle Accompanist-Alphaversion (0.31.2-alpha) verwenden, sind keine weiteren API-Änderungen erforderlich. (b/197140101)

Fehlerkorrekturen

  • Navigation 2.6.0-rc02: Ein Problem mit der Navigation in Fragmenten wurde behoben. Wenn mit popUpTo navigiert und ein Fragment aus dem Backstack entfernt wurde, ohne seine Ansicht neu zu erstellen, funktionierte die System-Zurück-Schaltfläche nicht mehr. (Ieb8d4, b/281726455)

Abhängigkeitsupdates

  • Die Navigation hängt jetzt von Compose 1.5.0-beta01 ab.

Version 2.6.0

Version 2.6.0

7. Juni 2023

androidx.navigation:navigation-*:2.6.0 wird veröffentlicht. Version 2.6.0 enthält diese Commits.

Wichtige Änderungen an der Navigation seit Version 2.5.0

  • Die arguments von NavBackStackEntry und die an ein OnDestinationChangedListener übergebenen arguments sind jetzt nur noch eine Kopie der unveränderlichen Argumente, die beim Aufrufen des Ziels erstellt wurden. Das bedeutet, dass Änderungen an diesen Bundles nicht bei nachfolgenden Zugriffen auf die arguments- oder andere OnDestinationChangedListener-Instanzen berücksichtigt werden.
  • NavDeepLink unterstützt jetzt Standardwerte für Arrays. Dadurch werden wiederholte Abfrageparameter unterstützt, die dem Arraytyp des Arguments zugeordnet werden. NavType enthält jetzt auch eine Standardmethode, die überschrieben werden kann, um zwei geparste Werte zu kombinieren.
  • Benutzerdefinierte Unterklassen von NavType können jetzt serializeAsValue überschreiben, um einen Wert in einen String zu serialisieren. So können sowohl die Serialisierung als auch die Deserialisierung (über parseValue) vollständig in der Klasse NavType gekapselt werden. StringType überschreibt diese Methode jetzt, um Uri.encode für den angegebenen String aufzurufen.

Wichtige Änderungen an Navigation Compose seit Version 2.5.0

  • Wenn Sie eine Composable-Funktion mit NavHost in der Vorschau ansehen, wird jetzt standardmäßig der startDestination des NavGraph angezeigt.
  • NavController.popBackStack(route), NavController.getBackStackEntry(route) und NavController.clearBackStack(route) unterstützen jetzt Routen mit teilweise oder vollständig ausgefüllten Argumenten. Die Argumente müssen genau mit den Argumenten des Eintrags übereinstimmen.
  • Wenn Sie versuchen, ein leeres NavDeepLink mit dem navDeepLink-Kotlin-DSL zu erstellen, wird jetzt eine Lint-Warnung angezeigt, die darauf hinweist, dass ein Deeplink eine URI, eine Aktion und/oder einen Mime-Typ benötigt, um gültig zu sein.

Wichtige Änderungen an der Navigation mit Fragmenten seit Version 2.5.0

  • NavHostFragment fängt die System-Zurück-Schaltfläche nicht mehr ab. So kann das zugrunde liegende FragmentManager die System-Zurück-Funktion verarbeiten. So kann Fragment 1.7.0-alpha01 und höher eine In-App-Animation für die vorhersagende Zurück-Geste auf Android U-Geräten bereitstellen.
  • Wenn Sie die Navigation mit Fragmenten verwenden und versuchen, manuell ein FragmentTransaction auszuführen, das ein Fragment zum Backstack von FragmentManager hinzufügt, wird jetzt eine IllegalArgumentException ausgelöst. Sie sollten Fragmente immer über die navigate() API hinzufügen.
  • Wenn Sie den genauen String ${applicationId} als Platzhalter in den Attributen app:data und app:dataPattern des Aktivitätselements einer Navigations-XML-Datei verwenden, wird der Platzhalter beim Inflating automatisch mit dem packageName des Kontexts gefüllt.
  • Das FragmentNavigator verwendet jetzt die Übergangs-APIs, wenn NavBackStackEntries aufgerufen und wieder geschlossen werden. Das bedeutet, dass NavBackStackEntry Lifecycle jetzt wartet, bis die Ein- und Ausblendungseffekte des Fragments abgeschlossen sind, bevor die endgültige Lifecycle.State verschoben wird.
  • Das DialogFragmentNavigator verwendet jetzt die Übergangs-APIs, wenn NavBackStackEntries aufgerufen und wieder geschlossen werden. Das bedeutet, dass die NavBackStackEntry Lifecycle jetzt darauf wartet, dass die DialogFragment Lifecycle zu DESTROYED wechselt, bevor sie selbst zu DESTROYED wechselt.
  • Mit NavHostFragment können Sie jetzt die NavController abrufen, sobald die NavHostFragment an die FragmentManager angehängt wird, und nicht erst nach onCreate().
  • Die Unterstützung von Navigations-Apps für dynamische Funktionsmodule hängt jetzt von der detaillierten Play Feature Delivery Library ab.
  • Navigation Safe Args hängt jetzt vom Android-Gradle-Plug-in in Version 7.3.0 ab. Das bedeutet, dass sie jetzt nur noch mit Versionen ab 7.3.0 kompatibel ist.

Wichtige Änderungen an NavigationUI seit Version 2.5.0

  • Wenn Sie die ID eines Navigationsgraphen an AppBarConfiguration übergeben (z. B. über ein Menu), wird jetzt nur noch das Startziel dieses Navigationsgraphen als Ziel der obersten Ebene betrachtet. Bisher wurde fälschlicherweise jedes Ziel im Graphen als Ziel der obersten Ebene markiert.NavigationUI Das Verhalten beim Übergeben der ID eines einzelnen Ziels bleibt unverändert. Dieselbe Funktion ist über die neue isTopLevelDestination-Funktion in AppBarConfiguration auch für Ihren eigenen Code verfügbar.
  • Bei den setupWithNavController-Integrationen in NavigationUI für die Arbeit mit der oberen App-Leiste werden jetzt R.string-Werte für ReferenceType-Argumente, die in Ihrem android:label gefunden werden, in ihre String-Werte geparst, anstatt die automatisch generierte Ressourcen-Ganzzahl auszugeben.
  • NavigationUI stellt jetzt Protokolle bereit, wenn die Navigation über eine ausgewählte MenuItem fehlschlägt.

Version 2.6.0-rc02

24. Mai 2023

androidx.navigation:navigation-*:2.6.0-rc02 wird veröffentlicht. Version 2.6.0-rc02 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem mit der Navigation in Fragmenten wurde behoben. Wenn mit popUpTo navigiert und ein Fragment aus dem Backstack entfernt wurde, ohne seine Ansicht neu zu erstellen, funktionierte die System-Zurück-Schaltfläche nicht mehr. (Ieb8d4, b/281726455)

Version 2.6.0-rc01

10. Mai 2023

androidx.navigation:navigation-*:2.6.0-rc01 wird veröffentlicht. Version 2.6.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem in der Navigation mit Fragmenten wurde behoben. Wenn ein Fragment über „navigate“ mit popUpTo im onResume()-Lifecycle-Callback entfernt wurde, wurde ein IllegalStateException ausgelöst. (I21884, b/279644470)

Version 2.6.0-beta01

19. April 2023

androidx.navigation:navigation-*:2.6.0-beta01 wird veröffentlicht. Version 2.6.0-beta01 enthält diese Commits.

Neue Funktionen

  • NavBackStackEntry bietet jetzt eine benutzerdefinierte toString-Implementierung. (Iff00b)

Fehlerkorrekturen

  • Wenn Sie die Navigation mit Fragmenten verwenden und versuchen, manuell ein FragmentTransaction auszuführen, das ein Fragment zum Backstack von FragmentManager hinzufügt, wird jetzt eine IllegalArgumentException ausgelöst. Sie sollten Fragmente immer über die navigate() API hinzufügen. (I6d38e)
  • Wenn in demselben Frame ein navigate-Vorgang, der einen Eintrag hinzufügt, und ein popBackStack-Vorgang, der ihn entfernt, vorhanden sind, wird der resultierende oberste Eintrag im Backstack jetzt immer an die RESUMED Lifecycle.State zurückgegeben. (Id8067, b/276495952)

Version 2.6.0-alpha09

5. April 2023

androidx.navigation:navigation-*:2.6.0-alpha09 wird veröffentlicht. Version 2.6.0-alpha09 enthält diese Commits.

Fehlerkorrekturen

  • Es wurden Korrekturen an den Prüfungen für ungültige Routen vorgenommen. Wenn ein NavDestination nicht nullable NavArgument enthält, muss die Route dieses Ziels Platzhalter für Argumente mit demselben Namen wie das nicht nullable NavArgument enthalten. (Ic62bf, b/274697949)
  • Deeplink-Navigationen, die auf Action/MimeType basieren, schlagen jetzt fehl, wenn für den Navigationsvorgang ein nicht nullable NavArgument fehlt, das für die NavDestination erforderlich ist, mit der Action/MimeType übereinstimmt. (Ibfa17, b/271777424)
  • Wenn NavController ein Diagramm mit derselben Route und denselben Zielen wie das vorherige Diagramm festlegt, werden die aktuellen Diagrammknoten und die Ziele des Backstacks jetzt ordnungsgemäß durch neue Instanzen ersetzt. Dadurch wird ein Absturz behoben, der beim Verwenden von onLaunchSingleTop ohne Speichern des Status in Navigation Compose auftritt. Außerdem wird ein Fehler behoben, bei dem beim Navigieren zu Zielen, die dem Stammgraphen zugeordnet sind, ein falscher Backstack erstellt wurde. (I5bc58, b/275258161, b/275407804)

Version 2.6.0-alpha08

22. März 2023

androidx.navigation:navigation-*:2.6.0-alpha08 wird veröffentlicht. Version 2.6.0-alpha08 enthält diese Commits.

Neue Funktionen

  • Mit NavHostFragment können Sie jetzt die NavController abrufen, sobald die NavHostFragment an die FragmentManager angehängt wird, und nicht erst nach onCreate(). (Ic6382, b/220186282)

Fehlerkorrekturen

  • Ein NullPointerException wurde behoben, das beim Entfernen eines verschachtelten Diagramms mit einem Argument, das nicht null sein darf, aufgetreten ist. (6b3581, b/249988437)
  • Wenn Sie nach einer Navigation mit popUpTo die System-Zurück-Funktion verwenden, wird der Status von NavController auf den richtigen Eintrag gesetzt. (I3a8ec, b/270447657)
  • Einträge werden jetzt korrekt aus dem Backstack entfernt, wenn der Backstack über die System-Zurück-Taste oder popBackStack() entfernt wird, unabhängig davon, ob für das Fragment Effekte verwendet werden.FragmentNavigator (I81bdf)
  • Das Hinzufügen von Fragmenten zum FragmentNavigator-FragmentManager ohne Verwendung der Navigation führt nicht mehr zu einem Absturz. (b17204, b/274167493)

Abhängigkeitsupdates

Version 2.6.0-alpha07

8. März 2023

androidx.navigation:navigation-*:2.6.0-alpha07 wird veröffentlicht. Version 2.6.0-alpha07 enthält diese Commits.

Fehlerkorrekturen

  • Die API-Varianten getBackStackEntry, popBackStack und clearBackStack, die Routen verwenden, akzeptieren jetzt Routenmuster mit Argumenten und Abfrageparametern, die Nullwerte zulassen (I22294, b/269302500).
  • Ein Problem wurde behoben, bei dem durch Aufrufen von clearBackStack() über NavController der gespeicherte Status im Fragmentmanager, der mit dem gelöschten Backstack verknüpft ist, nicht gelöscht wurde. (Ic1cce, b/271190202)
  • Ein Regressionsfehler in Version 2.6.0-alpha06 wurde behoben, der dazu führte, dass bei der Verwendung der System-Zurück-Geste zwischen Tabs das falsche MenuItem im BottomNavigationView hervorgehoben wurde. (I634f6, b/270447657)
  • Ein Regressionsfehler in Version 2.6.0-alpha06 wurde behoben, der dazu führte, dass NavBackStackEntrys bei Verwendung von Animations nicht in den Status „RESUMED“ versetzt wurden. (Ib3589, b/269646882)

Version 2.6.0-alpha06

22. Februar 2023

androidx.navigation:navigation-*:2.6.0-alpha06 wird veröffentlicht. Version 2.6.0-alpha06 enthält diese Commits.

Neue Funktionen

  • Wenn Sie eine Composable-Funktion mit NavHost in der Vorschau ansehen, wird jetzt standardmäßig der startDestination des NavGraph angezeigt. (I2b89f)

API-Änderungen

  • Alle NavController-navigate-Überladungen sind jetzt mit @MainThread annotiert, damit sie im Hauptthread aufgerufen werden. (I2c0b0, b/263427111)

Fehlerkorrekturen

  • Ein Absturz beim Navigieren mit der dynamischen Fragmentnavigation wurde behoben. (I3ee29, b/268360479)
  • Ein Fehler wurde behoben, durch den die untere Leiste beim Navigieren zu einem anderen Fragment über die System-Zurück-Schaltfläche nicht auf das richtige ausgewählte Element aktualisiert wurde (If559f, b/269044426).

Bekannte Probleme

  • Wenn Sie die Navigation mit Fragmenten verwenden, erreicht der Lebenszyklus von NavBackStackEntry nicht RESUMED, wenn Sie Animation-APIs verwenden. (b/269646882)
  • Wenn Sie die Navigation mit Fragmenten und BottomNavigation verwenden und versuchen, einen Backstack mit mehreren Einträgen wiederherzustellen, wird BottomMenuItem nicht richtig aktualisiert. (b/270447657)
  • Wenn Sie die Navigation mit Fragmenten verwenden, wird nach dem Wiederherstellen des Status nicht DESTROYED für NavBackStackEntry Lifecycle aufgerufen, wenn das zugehörige Fragment DESTROYED ist . (b/270610768)

Version 2.6.0-alpha05

8. Februar 2023

androidx.navigation:navigation-*:2.6.0-alpha05 wird veröffentlicht. Version 2.6.0-alpha05 enthält diese Commits.

Neue Funktionen

  • NavController.popBackStack(route), NavController.getBackStackEntry(route) und NavController.clearBackStack(route) unterstützen jetzt Routen mit teilweise oder vollständig ausgefüllten Argumenten. Die Argumente müssen genau mit den Argumenten des Eintrags übereinstimmen. (Iebd28, Ic678c, I3b37b, b/257514373)
  • Das FragmentNavigator verwendet jetzt die Übergangs-APIs, wenn NavBackStackEntries aufgerufen und wieder geschlossen werden. Das bedeutet, dass NavBackStackEntry Lifecycle jetzt wartet, bis die Ein- und Ausblendungseffekte des Fragments abgeschlossen sind, bevor die endgültige Lifecycle.State verschoben wird. (I3cb19, b/238686802)
  • Das DialogFragmentNavigator verwendet jetzt die Übergangs-APIs, wenn NavBackStackEntries aufgerufen und wieder geschlossen werden. Das bedeutet, dass die NavBackStackEntry Lifecycle jetzt darauf wartet, dass die DialogFragment Lifecycle zu DESTROYED wechselt, bevor sie selbst zu DESTROYED wechselt. (I53ee5, b/261213893)

API-Änderungen

  • NavigatorState bietet jetzt die prepareForTransition API, mit der Navigators NavBackStackEntries in Lifecycle.States verschieben können. (I42c21, b/238686802)
  • Sie können jetzt über eine backstack-Property auf den Backstack zugreifen, der mit einem NavGraphNavigator oder einem ComposeNavigator verknüpft ist. ComposeNavigator stellt jetzt auch den onTransitionComplete()-Callback zur Verfügung, um ein NavBackStackEntry, das einen Navigations- oder popBackStack-Vorgang ausgeführt hat, als abgeschlossen zu markieren. (I02062, I718db, b/257519195)

Fehlerkorrekturen

  • Der Navigator-Status wird jetzt nicht mehr ausgeführt, wenn die push/popWithTransition-APIs verwendet werden und der Eintrag bereits verarbeitet wird. (Iadbfa, b/261213893)
  • Wenn Sie launchSingleTop mit einem verschachtelten NavGraph verwenden, werden alle Ziele vom ursprünglichen Ziel bis zum startDestination nur ordnungsgemäß oben im Backstack hinzugefügt. (Id4bea, b/253256629)
  • Die Navigation ersetzt jetzt die DialogFragment-Instanz korrekt, wenn mit dem Flag launchSingleTop auf „true“ gesetzt wird. (I45b5a, b/149572817)
  • Navigation SafeArgs führt nicht mehr zu einem Kompilierungsfehler, wenn Argumente mit genau 19 Zeichen verwendet werden. (Id60bc, b/257110095)

Version 2.6.0-alpha04

9. November 2022

androidx.navigation:navigation-*:2.6.0-alpha04 wird veröffentlicht. Version 2.6.0-alpha04 enthält diese Commits.

Neue Funktionen

  • Benutzerdefinierte Unterklassen von NavType können jetzt serializeAsValue überschreiben, um einen Wert in einen String zu serialisieren. So können sowohl die Serialisierung als auch die Deserialisierung (über parseValue) vollständig in der Klasse NavType gekapselt werden. StringType überschreibt diese Methode jetzt, um Uri.encode für den angegebenen String aufzurufen. (Ie5213, b/247637434)
  • NavigationUI stellt jetzt Protokolle bereit, wenn die Navigation über eine ausgewählte MenuItem fehlschlägt. (I2af5a, b/247730357)

Fehlerkorrekturen

  • Navigations-Deeplinks werden jetzt verzögert und nicht bei der Initialisierung des Diagramms geparst. Das kann die App-Leistung beim Start verbessern. (Iab0ab)
  • Ein Absturz wurde behoben, der durch das Navigieren nach oben nach dem Deeplinking zu einem Ziel mit Null-Standardargumenten verursacht wurde. (I51c24, b/243183636)

Abhängigkeitsupdate

  • Die Unterstützung von Navigations-Apps für dynamische Funktionsmodule hängt jetzt von der detaillierten Play Feature Delivery Library ab. (Ib4ddc)
  • Navigation Safe Args hängt jetzt vom Android-Gradle-Plug-in in Version 7.3.0 ab. Das bedeutet, dass sie jetzt nur noch mit Versionen ab 7.3.0 kompatibel ist. (I47e49)

Version 2.6.0-alpha03

24. Oktober 2022

androidx.navigation:navigation-*:2.6.0-alpha03 wird veröffentlicht. Version 2.6.0-alpha03 enthält diese Commits.

Fehlerkorrekturen

  • Ab Navigation 2.5.3: NavHost wird nicht mehr zu einem NoSuchElementException führen, wenn kein Ziel für die Komposition von Crossfade verfügbar ist. Die Komposition wird jetzt einfach übersprungen. (Ieb46e, b/253299416)
  • Navigation 2.5.3: Ein Problem wurde behoben, durch das der gespeicherte Compose-Status (z.B. Verwendungen von rememberSaveable) nicht vergessen und entfernt wurde, wenn ein Ziel aus dem Backstack entfernt wurde. (I64949)

Abhängigkeitsupdates

Version 2.6.0-alpha02

5. Oktober 2022

androidx.navigation:navigation-*:2.6.0-alpha02 wird veröffentlicht. Version 2.6.0-alpha02 enthält diese Commits.

Geändertes Verhalten

  • Wenn Sie die ID eines Navigationsgraphen an AppBarConfiguration übergeben (z. B. über ein Menu), wird jetzt nur noch das Startziel dieses Navigationsgraphen als Ziel der obersten Ebene betrachtet. Bisher wurde fälschlicherweise jedes Ziel im Graphen als Ziel der obersten Ebene markiert.NavigationUI Das Verhalten beim Übergeben der ID eines einzelnen Ziels bleibt unverändert. Dieselbe Funktion ist über die neue isTopLevelDestination-Funktion in AppBarConfiguration auch für Ihren eigenen Code verfügbar. (Ie936e, b/238496771)

Fehlerkorrekturen

  • Die Komponente navigation:navigation-fragment hängt jetzt von der Fragment-Version 1.5.2 ab. (I00ba4)
  • Das ausgewählte Menüelement wird nicht mehr aktualisiert, wenn Sie zu einem FloatingWindow-Ziel wie einem Dialogfeld navigieren. (I4cde8, b/240308330)

Version 2.6.0-alpha01

7. September 2022

androidx.navigation:navigation-*:2.6.0-alpha01 wird veröffentlicht. Version 2.6.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Bei den setupWithNavController-Integrationen in NavigationUI für die Arbeit mit der oberen App-Leiste werden jetzt R.string-Werte für ReferenceType-Argumente, die in Ihrem android:label gefunden werden, in ihre String-Werte geparst, anstatt die automatisch generierte Ressourcen-Ganzzahl auszugeben. (I5f803, b/167959935)
  • NavDeepLink unterstützt jetzt Standardwerte für Arrays. Dadurch werden wiederholte Abfrageparameter unterstützt, die dem Arraytyp des Arguments zugeordnet werden. NavType enthält jetzt auch eine Standardmethode, die überschrieben werden kann, um zwei geparste Werte zu kombinieren. (Id68c3, b/209977108)
  • Wenn Sie den genauen String ${applicationId} als Platzhalter in den Attributen app:data und app:dataPattern des Aktivitätselements einer Navigations-XML-Datei verwenden, wird der Platzhalter beim Inflating automatisch mit dem packageName des Kontexts gefüllt. (Iaabde, b/234223561)
  • Wenn Sie versuchen, ein leeres NavDeepLink mit dem navDeepLink-Kotlin-DSL zu erstellen, wird jetzt eine Lint-Warnung angezeigt, die darauf hinweist, dass ein Deeplink eine URI, eine Aktion und/oder einen Mime-Typ benötigt, um gültig zu sein. (I08d2f, b/154038883)

API-Änderungen

  • Die neue Erweiterungsfunktion NavDestination wurde hinzugefügt, um dynamische Labels mit Argumenten im Format android:label="{arg}" in einen String zu parsen. Unterstützt ReferenceType-Argumente, indem R.string-Werte in ihre String-Werte geparst werden. (I07d89, b/236269380)

Geändertes Verhalten

  • arguments von NavBackStackEntry und das an ein OnDestinationChangedListener übergebene arguments sind jetzt nur noch eine Kopie der unveränderlichen Argumente, die beim Navigieren zum Ziel erstellt wurden. Das bedeutet, dass Änderungen an diesen Bundles nicht bei nachfolgenden Zugriffen auf die arguments- oder andere OnDestinationChangedListener-Instanzen berücksichtigt werden. (I676f5)

Fehlerkorrekturen

  • Navigation 2.5.2: Bei der dynamischen Navigation wird jetzt versucht, Aktivitätsziele aus anderen Modulen zu installieren, bevor zu ihnen navigiert wird. (Ia2c16, b/240292838)
  • Navigation 2.5.2: Die Navigation ersetzt jetzt die Fragment-Instanz korrekt, wenn zur selben Ziel-ID navigiert wird und das Flag launchSingleTop auf „true“ gesetzt ist. (I5a2f1, b/237374580)
  • Navigation 2.5.2: Der Fehler IllegalStateException wurde behoben, der beim Navigieren zu einem doppelt verschachtelten Diagramm aufgetreten ist, das ein übergeordnetes Element mit einem neuen Startziel hat, das im Pop-up angezeigt wird. (I9f7cb, b/243778589)

Version 2.5

Version 2.5.3

24. Oktober 2022

androidx.navigation:navigation-*:2.5.3 wird veröffentlicht. Version 2.5.3 enthält diese Commits.

Fehlerkorrekturen

  • NavHost führt nicht mehr zu einem NoSuchElementException, wenn kein Ziel für die Erstellung des Crossfade verfügbar ist. Die Komposition wird jetzt einfach übersprungen. (Ieb46e, b/253299416)
  • Ein Problem wurde behoben, bei dem der gespeicherte Compose-Status (z.B. Verwendungen von rememberSaveable) nicht vergessen und entfernt wurde, wenn ein Ziel aus dem Backstack entfernt wurde. (I64949)

Version 2.5.2

7. September 2022

androidx.navigation:navigation-*:2.5.2 wird veröffentlicht. Version 2.5.2 enthält diese Commits.

Fehlerkorrekturen

  • Bei der dynamischen Navigation wird jetzt versucht, Aktivitätsziele aus anderen Modulen zu installieren, bevor zu ihnen navigiert wird. (Ia2c16, b/240292838)
  • Bei der Navigation wird die Fragment-Instanz jetzt richtig ersetzt, wenn zur selben Zieladresse navigiert und das Flag launchSingleTop auf „true“ gesetzt wird. (I5a2f1, b/237374580)
  • Der Fehler IllegalStateException wurde behoben, der beim Navigieren zu einem doppelt verschachtelten Diagramm auftrat, das ein übergeordnetes Element mit einem neuen Startziel teilt. (I9f7cb, b/243778589)

Abhängigkeitsupdate

Version 2.5.1

27. Juli 2022

androidx.navigation:navigation-*:2.5.1 wird veröffentlicht. Version 2.5.1 enthält diese Commits.

Fehlerkorrekturen

  • Navigation Safe Args führt nicht mehr zu Deprecation-Warnungen in generierten Klassen, wenn benutzerdefinierte Argumenttypen verwendet werden, die in einem Bundle gespeichert sind. (Id86ed, b/237725966)

Abhängigkeitsupdates

Version 2.5.0

29. Juni 2022

androidx.navigation:navigation-*:2.5.0 wird veröffentlicht. Version 2.5.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.4.0

  • CreationExtras-Integration: Navigation kann jetzt über Lifecycle 2.5.0-CreationExtras ein zustandsloses ViewModelProvider.Factory bereitstellen.

Navigation SafeArgs

  • In Navigation Safe Args wurde die Android Gradle Plugin-Abhängigkeit auf 7.0.4 aktualisiert. Dadurch wird die Kompatibilität für AGP-Versionen vor 7.0 eingestellt.
  • Es wird jetzt unterstützt, das Attribut „namespace“ in build.gradle anstelle von „applicationId“ zu verwenden.

Weitere Änderungen

  • Die visibleEntries API ist nicht mehr experimentell und bietet eine Funktion zum Abrufen aller Einträge, deren Zielort gemäß der NavController derzeit sichtbar ist.

Version 2.5.0-rc02

15. Juni 2022

androidx.navigation:navigation-*:2.5.0-rc02 wird veröffentlicht. Version 2.5.0-rc02 enthält diese Commits.

Fehlerkorrekturen

  • Ein Absturz, der durch schnelles Wechseln zwischen unteren Zielen bei Verwendung von Navigation Compose NavHost verursacht wurde, wurde behoben. (I3979a, b/234054916)
  • Navigation SafeArgs stürzt nicht mehr ab, wenn ein applicationIdSuffix und ein Namespace ohne applicationId oder mit einem anderen applicationId verwendet werden. (I754b1, b/233119646)
  • NavArgument hat jetzt eine benutzerdefinierte toString()-Funktion, um die internen Werte des Arguments anzuzeigen. (I900a8)

Version 2.5.0-rc01

11. Mai 2022

androidx.navigation:navigation-*:2.5.0-rc01 wird veröffentlicht. Version 2.5.0-rc01 enthält diese Commits.

Neue Funktionen

  • Es wurde eine neue Lint-Regel hinzugefügt, die warnt, wenn <deeplink>-Elemente in Ihrer navigation.xml-Datei in <activity>-Elemente eingefügt werden.(Ic15a5, b/178403185)

Fehlerkorrekturen

  • Zusammensetzbare Bereiche in NavHost und DialogHost werden jetzt in der erwarteten Reihenfolge verworfen, d.h. innere zusammensetzbare Bereiche werden vor äußeren zusammensetzbaren Bereichen verworfen. (I157e6)
  • Navigation SafeArgs verwendet jetzt PathSensitivity.RELATIVE in ArgumentsGenerationTask, um die Verschiebbarkeit des Cache zu ermöglichen. Das bedeutet, dass der Cacheeintrag jetzt von einem CI-Build für einen lokalen Build wiederverwendet werden kann. (I5f67c, b/173420454)
  • Die Lint-Regel UnrememberedGetBackStackEntryDetector wurde aktualisiert, um sicherzustellen, dass beim remember-Aufruf, der den Aufruf von getBackStackEntry() umgibt, auch ein NavBackStackEntry-Objekt als Schlüssel übergeben wird.(Ib7081, b/227382831)

Version 2.5.0-beta01

20. April 2022

androidx.navigation:navigation-*:2.5.0-beta01 wird veröffentlicht. Version 2.5.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • DialogNavigator verwendet jetzt popWithTransition, wenn ein dismiss()-Aufruf ausgeführt wird. Damit wird ein Race-Bedingungsproblem behoben, das bei Verwendung von ViewModel innerhalb des Ziels dialog auftreten konnte und beim Schließen des Dialogfelds durch Drücken der System-Zurück-Taste oder durch Tippen außerhalb des Dialogfelds zum Beenden einen IllegalStateException verursachte. (Id7376, b/226552301)

Abhängigkeitsupdates

  • Die Navigation hängt jetzt vom Lifecycle 2.5.0-beta01 ab. Dadurch wird ein IllegalStateException behoben, wenn ein NavHost in einem nicht primären Tab der unteren Navigation in einem anderen NavHost verschachtelt wird, wenn mehrere Backstacks verwendet werden.

Version 2.5.0-alpha04

6. April 2022

androidx.navigation:navigation-*:2.5.0-alpha04 wird veröffentlicht. Version 2.5.0-alpha04 enthält diese Commits.

API-Änderungen

Fehlerkorrekturen

  • NavHost hängt jetzt von visibleEntries aus NavController ab, um zu bestimmen, welche Einträge zusammengestellt werden sollen. Das bedeutet, dass beim Verwenden von verschachtelten NavHosts das innere NavHost jetzt richtig animiert wird. (I4ba2b, b/225394514)
  • Die von NavController bereitgestellte visibleEntries StateFlow basiert jetzt auf dem maximalen Lebenszyklusstatus des Eintrags anstelle des aktuellen Lebenszyklusstatus. Das bedeutet, dass die Liste der sichtbaren Einträge gleich bleibt, auch wenn der Host-Lebenszyklus von navController unter STARTED liegt. (I9e2a8, b/225394514)
  • SavedStateViewFactory unterstützt jetzt die Verwendung von CreationExtras, auch wenn es mit einem SavedStateRegistryOwner initialisiert wurde. Wenn Extras angegeben werden, werden die initialisierten Argumente ignoriert. (I6c43b, b/224844583)
  • NavDeepLink kann jetzt URIs mit einem einzelnen Abfrageparameter ohne Wert parsen. (I0efe8, b/148905489)
  • Leere Strings gelten jetzt als gültige Argumente in Deeplinks. (I70a0d, b/217399862)
  • Navigation Safe Args stürzt nicht mehr ab, wenn Namespaces verwendet werden und kein AndroidManifest.xml vorhanden ist. (I17ccf, b/227229815)

Version 2.5.0-alpha03

23. Februar 2022

androidx.navigation:navigation-*:2.5.0-alpha03 wird veröffentlicht. Version 2.5.0-alpha03 enthält diese Commits.

API-Änderungen

  • Sie können jetzt CreationExtras an by navGraphViewModels übergeben, um ein ViewModel zu erstellen. (I29217, b/217618359)

Fehlerkorrekturen

  • NavDeepLinks unterstützt jetzt codierte Zeilenumbruchzeichen, die in Routen-/Deeplink-URIs eingebettet sind. (I513d1, b/217815060)
  • CreationExtras funktioniert jetzt korrekt, wenn es mit NavBackStackEntries verwendet wird, um ViewModels zu erstellen. (I69161, b/217617710)
  • Navigation Safe Args unterstützt jetzt die Verwendung des in build.gradle definierten Namespace anstelle des Pakets im AndroidManifest. (I659ef, b/217414933)

Version 2.5.0-alpha02

9. Februar 2022

androidx.navigation:navigation-*:2.5.0-alpha02 wird veröffentlicht. Version 2.5.0-alpha02 enthält diese Commits.

Fehlerkorrekturen

  • Über Navigation 2.4.1: Mit NavHostFragment wird jetzt OnBackPressedDispatcher richtig festgelegt, wenn View Binding mit verschachtelten Diagrammen verwendet wird. (Ifbb51, b/214577959)
  • Über die Navigation 2.4.1: NavGraph Wenn Sie über mehrere verschachtelte NavGraphs Deep-Linking verwenden, enthält der Backstack jetzt auch Zwischenziele. (I504c0, b/214383060)

Version 2.5.0-alpha01

26. Januar 2022

androidx.navigation:navigation-*:2.5.0-alpha01 wird veröffentlicht. Version 2.5.0-alpha01 enthält diese Commits.

Neue Funktionen

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem der Zugriff auf ein ViewModel, das über by navGraphViewModels() aus dem onCreate() eines Fragments erstellt wurde, mit einem IllegalStateException fehlschlug. (I8a14d)
  • NavDeepLinks werden nicht mehr unnötig zweimal decodiert. Das bedeutet, dass die richtigen Argumente jetzt an Ihr endgültiges Ziel übergeben werden. (I31b0a, b/210711399)

Safe Args

  • Safe Args hängt jetzt vom Android-Gradle-Plug-in in Version 7.0.4 ab. Das bedeutet, dass Navigation Safe Args nicht mehr mit Android Studio-Versionen vor 7.0 kompatibel ist, aber jetzt mit Android Gradle-Plug-in 7.1.0 und höher. (I41c88, b/213086135, b/207670704)

Version 2.4.2

Version 2.4.2

6. April 2022

androidx.navigation:navigation-*:2.4.2 wird veröffentlicht. Version 2.4.2 enthält diese Commits.

Fehlerkorrekturen

Version 2.4.1

Version 2.4.1

9. Februar 2022

androidx.navigation:navigation-*:2.4.1 wird veröffentlicht. Version 2.4.1 enthält diese Commits.

Fehlerkorrekturen

  • Das NavHostFragment legt jetzt das OnBackPressedDispatcher bei Verwendung von View Binding mit verschachtelten Diagrammen richtig fest. (Ifbb51, b/214577959)
  • Beim Deeplinking über mehrere verschachtelte NavGraphs enthält der Backstack jetzt Zwischenziele. (I504c0, b/214383060)
  • Backport von Navigation 2.5.0-alpha01: Ein Problem wurde behoben, bei dem der Zugriff auf ein ViewModel, das über by navGraphViewModels() erstellt wurde, über die onCreate() eines Fragments mit einem IllegalStateException fehlgeschlagen ist. (I8a14d)
  • Backport von Navigation 2.5.0-alpha01: NavDeepLinks werden nicht mehr unnötig zweimal decodiert. Die korrekt decodierten NavDeepLink werden jetzt an das endgültige Ziel übergeben. (I31b0a, b/210711399)
  • Backport von Navigation 2.5.0-alpha01: Safe Args hängt jetzt vom Android-Gradle-Plug-in in Version 7.0.4 ab. Das bedeutet, dass Navigation Safe Args nicht mehr mit Android Studio-Versionen vor 7.0 kompatibel ist, aber jetzt mit Android Gradle-Plug-in 7.1.0 und höher. (I41c88, b/213086135, b/207670704)

Version 2.4.0

Version 2.4.0

26. Januar 2022

androidx.navigation:navigation-*:2.4.0 wird veröffentlicht. Version 2.4.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.3.0

  • Alle Navigationsartefakte wurden in Kotlin neu geschrieben. Dadurch wurde die Nullable-Eigenschaft von Klassen mit Generics (z. B. NavType-Unterklassen) verbessert. Alle Kotlin-Erweiterungsfunktionen, die früher Teil der -ktx-Artefakte waren, wurden in die entsprechenden Hauptartefakte verschoben. Die -ktx-Artefakte werden weiterhin veröffentlicht, sind aber leer.
  • Das navigation-fragment-Artefakt enthält jetzt eine vorgefertigte Implementierung eines zweispaltigen Layouts über die neue AbstractListDetailFragment. In diesem Fragment wird ein SlidingPaneLayout verwendet, um ein Listenbereich (der von Ihrer Unterklasse bereitgestellt wird) und ein Detailbereich zu verwalten. Für den Detailbereich wird ein NavHostFragment verwendet, wie in unserer Beispielimplementierung zu sehen ist.
  • Die Methode currentBackStackEntryAsFlow() für NavController stellt einen Flow bereit, der immer dann ausgegeben wird, wenn sich der aktuelle NavBackStackEntry ändert. Dieser Ablauf kann als Alternative zur manuellen Verwaltung einer OnDestinationChangedListener verwendet werden.
  • NavController bietet jetzt die Möglichkeit, über die experimentelle Eigenschaft visibleEntries eine Liste aller sichtbaren NavBackStackEntry-Instanzen als StateFlow abzurufen.
  • Es ist jetzt möglich, die NavType-Klasse zu erweitern, um benutzerdefinierte NavTypes zu erstellen. Benutzerdefinierte Typen werden nur unterstützt, wenn Sie das Navigationsdiagramm programmatisch erstellen, z. B. über die Kotlin-DSL für Navigationsdiagramme.
  • Für die Navigation sind jetzt die APIs findStartDestination() und getHierarchy() verfügbar, mit denen sich eine benutzerdefinierte NavigationUI implementieren lässt. findStartDestination() ist eine Erweiterungsfunktion für NavGraph, mit der das tatsächliche Startziel ermittelt wird, das angezeigt wird, wenn Sie zum Diagramm navigieren. Das gilt auch dann, wenn startDestination selbst ein verschachteltes NavGraph ist. getHierarchy() ist eine Funktion für NavDestination, mit der geprüft werden kann, ob sich ein bestimmtes Ziel in der Hierarchie eines anderen befindet.

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • NavigationUI-Methoden, die ein BottomNavigationView verwendet haben, wurden aktualisiert, sodass stattdessen die in Material 1.4.0 eingeführte Superklasse NavigationBarView verwendet wird. So können diese Methoden mit dem NavigationRailView verwendet werden.

  • Wenn Sie ein <action>-Element über XML instanziieren, können für Animationsattribute Attribute verwendet werden, die mit der app:enterAnim="?attr/transitionEnter"-Syntax aus Ihrem Theme abgerufen werden.

  • Safe Args generiert jetzt eine fromSavedStateHandle()-Methode für jede NavArgs-Klasse. (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    

Navigationsrouten und die Kotlin-DSL

In früheren Versionen von Navigation hatte jedes Ziel eine konstante Ganzzahl-ID, die es eindeutig von seinen gleichgeordneten Zielen unterschied und es Ihnen ermöglichte, entweder direkt oder über eine Aktion zu diesem Ziel zu navigate(). Das ist weiterhin gültig und nützlich, insbesondere wenn Sie Ihren Navigationsgraphen in XML definieren und automatisch generierte R.id-Konstanten oder Safe Args verwenden können, die diese Konstanten verwenden, um Code zur Build-Zeit zu generieren. Dieses System eindeutiger Ganzzahlen erfasste jedoch nicht die semantische Bedeutung und Ausdruckskraft, die erforderlich sind, um vollständig dynamische Graphen zu unterstützen, die programmatisch zur Laufzeit über die Navigation Kotlin DSL erstellt werden.

In dieser Version wird eine neue Option eingeführt, mit der ein Ziel in einem Navigationsdiagramm anhand seines Pfads eindeutig identifiziert werden kann. Eine Route ist ein String, das den eindeutigen Pfad zu einem Ziel definiert. Alle Kotlin DSL-Methoden, die eine Ziel-ID verwendet haben, sind jetzt veraltet und wurden durch eine entsprechende API ersetzt, die eine Route verwendet.

Jede Route sollte als „Pfad“-Teil eines Uri behandelt werden, das das Ziel definiert, z.B. home, profile/{userId}, profile/{userId}/friends usw.: Wenn die Identität eines Ziels mit einem bestimmten Inhalt verknüpft ist, sollten diese dynamischen Argumente Teil der Route sein und denselben Regeln wie implizite Deeplinks folgen.

Alle NavController-APIs, für die bisher nur eine ID erforderlich war, haben jetzt eine Überladung, für die eine Route String erforderlich ist. Dazu gehören navigate(), popBackStack(), popUpTo() und getBackStackEntry().

Das hat einige Auswirkungen auf die API:

  • Die Kotlin-Eigenschaft popUpTo in der Kotlin-DSL wurde zugunsten von popUpToId eingestellt.
  • Die getStartDestination() API wurde zugunsten von getStartDestinationId() eingestellt.

Im Gegensatz zur Navigation nach ID folgt die Navigation nach Route denselben Regeln wie implizite Deeplinks. Sie können also direkt zu jedem Ziel in einem beliebigen verschachtelten Diagramm navigieren. Dadurch sind diese Routen in Projekten mit mehreren Modulen nutzbar, ohne dass Sie jedem Ziel explizit einen extern sichtbaren Deeplink hinzufügen müssen.

Navigation Compose

Das navigation-compose-Artefakt bietet die Integration zwischen der Navigationskomponente und Jetpack Compose. Dabei werden @Composable-Funktionen als Ziele in Ihrer Anwendung verwendet.

Diese Version bietet:

  • Ein NavHost-Composable, mit dem Sie Ihren Navigationsgraphen über eine Kotlin-DSL erstellen können. Dabei werden composable- und dialog-Ziele sowie optionale Navigators wie die aus Accompanist Navigation Material unterstützt.
  • Obligatorische Unterstützung für das Überblenden zwischen Zielen. Mit Accompanist Navigation Animation können Sie die Ein- und Ausblendeübergänge mithilfe experimenteller Compose-APIs steuern.
  • Festlegen des Bereichs eines Lifecycle für jedes zusammensetzbare Ziel. Jedes Ziel erreicht den Status RESUMED nur, wenn alle eingehenden Übergänge abgeschlossen sind, und wechselt sofort zu STARTED, wenn ausgehende Übergänge beginnen. So können Sie alle IllegalStateException- und Multitouch-Probleme vermeiden, indem Sie einen navigate-Aufruf nur auslösen, wenn Lifecycle RESUMED ist.
  • Bereich von ViewModel (über die viewModel() API von Lifecycle ViewModel Compose 2.4.0 oder hiltViewModel() von Hilt Navigation Compose 1.0.0) auf Ziel-Ebene. Dadurch wird ein Bereich bereitgestellt, der Konfigurationsänderungen und den Backstack überdauert (wenn Ihr zusammensetzbarer Inhalt ansonsten verworfen wird). Außerdem wird ein Signal im onCleared() des ViewModels bereitgestellt, das das endgültige Verwerfen und Bereinigen des mit diesem NavBackStackEntry verknüpften Status angibt.
  • Der rememberSaveable-Zustand wird auf Ziel-Ebene festgelegt. So wird sichergestellt, dass der gesamte zusammensetzbare Zustand automatisch gespeichert und wiederhergestellt wird, wenn Sie zu einem Ziel zurückkehren.
  • Vollständige Unterstützung für das Speichern und Wiederherstellen des Status von NavController und des Status des Ziels nach dem Beenden und erneuten Erstellen des Prozesses.
  • Automatische Integration mit der System-Schaltfläche „Zurück“.
  • Unterstützung für das Übergeben von Argumenten, das Anhängen von Deeplinks an Ziele und das Zurückgeben eines Ergebnisses an vorherige Ziele.

  • Erstellen Sie bestimmte Hilfsfunktionen in rememberNavController() und currentBackStackEntryAsState(), um hoisting state zu ermöglichen und NavController mit Composables außerhalb von NavHost (z. B. einer unteren Navigationsleiste) zu verbinden.

val navController = rememberNavController()
Scaffold { innerPadding ->
    NavHost(navController, "home", Modifier.padding(innerPadding)) {
        composable("home") {
            // This content fills the area provided to the NavHost
            HomeScreen()
        }
        dialog("detail_dialog") {
            // This content will be automatically added to a Dialog() composable
            // and appear above the HomeScreen or other composable destinations
            DetailDialogContent()
        }
    }
}

Weitere Informationen finden Sie im Compose-Navigationsleitfaden.

Mehrere Backstacks

Der NavController ist für die Verwaltung des Backstacks von Zielen verantwortlich. Er fügt dem Backstack Ziele hinzu, wenn Sie navigate(), und entfernt sie, wenn Sie popBackStack() aufrufen oder die System-Schaltfläche „Zurück“ auslösen. Die vorhandene Klasse NavOptions und die Einbindung in <action>-Elemente im XML-Navigationsdiagramm wurden erweitert, um das Speichern und Wiederherstellen des Backstacks zu unterstützen.

Im Rahmen dieser Änderung werden die NavigationUI-Methoden von onNavDestinationSelected(), BottomNavigationView.setupWithNavController() und NavigationView.setupWithNavController() jetzt automatisch gespeichert und der Status von Pop-Zielen wird wiederhergestellt. So wird die Unterstützung mehrerer Backstacks ohne Codeänderungen ermöglicht. Wenn Sie die Navigation mit Fragmenten verwenden, ist dies die empfohlene Methode für die Integration mit mehreren Backstacks.

Die zugrunde liegenden APIs zum Speichern und Wiederherstellen des Status werden über verschiedene Oberflächen bereitgestellt:

  • Im Navigations-XML-Code kann das Element <action> jetzt die booleschen Attribute app:popUpToSaveState und app:restoreState verwenden, um den Status aller Ziele zu speichern, die über app:popUpTo entfernt wurden, und den Status wiederherzustellen, der dem als app:destination übergebenen Ziel zugeordnet ist:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • In der navOptions Kotlin DSL können Sie die boolesche Property restoreState und die boolesche Property saveState im popUpTo-Builder hinzufügen:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • Wenn Sie ein NavOptions-Objekt manuell über die NavOptions.Builder erstellen, können Sie die setRestoreState() und die neue Überladung für setPopUpTo() verwenden, die einen zusätzlichen saveState-Parameter akzeptiert.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • Programmatische Aufrufe von popBackStack() können jetzt einen zusätzlichen saveState-Parameter enthalten.

  • Mit der Methode clearBackStack() können Sie alle mit popBackStack() oder popUpToSaveState gespeicherten Status löschen.

In allen Fällen wird der Status jeder NavBackStackEntry durch NavController gespeichert und wiederhergestellt, einschließlich aller ViewModel-Instanzen mit Navigationszielbereich. Die Navigator-APIs wurden aktualisiert, damit jeder Navigator seinen eigenen Status speichern und wiederherstellen kann.

Geändertes Verhalten

  • NavDeepLinkBuilder fügt jetzt PendingIntent.FLAG_IMMUTABLE zu den PendingIntent hinzu, die von createPendingIntent() zurückgegeben werden. So wird dafür gesorgt, dass diese API wie erwartet funktioniert, wenn sie auf Android 12 ausgerichtet ist.
  • Die Navigation hängt jetzt vom Lifecycle 2.3.1 ab und markiert jetzt setGraph(), popBackStack(), navigateUp() und navigate(), die Methoden, die NavBackStackEntry Lifecycle aktualisieren, als @MainThread. Dadurch wird die Navigation an die im Lifecycle 2.3.0 eingeführte Erzwingung des Hauptthreads angepasst.
  • Bei Deeplinks wird jetzt geprüft, ob alle erforderlichen Argumente (ohne Standardwerte) in Uri vorhanden sind.
  • NavDeepLink Beim Parsen von Argumenten werden Rauten jetzt wie Fragezeichen als Trennzeichen zwischen Pfadsegmenten behandelt. So wird verhindert, dass sich ein Argument über die Raute erstreckt.
  • Beim Generieren von Aktionen werden in Kotlin-Code, der aus Safe Args generiert wird, Argumente ohne Standardwerte jetzt vor Argumenten mit Standardwerten als Parameter platziert.
  • Beim Generieren von Argumenten werden Parameter ohne Standardwerte jetzt vor Parametern mit Standardwerten platziert.
  • Safe-Args hängt jetzt vom Android-Gradle-Plug-in 4.2.0 ab. Sie sollten also keine Warnung mehr erhalten, dass applicationIdTextResource verwendet wird.

Bekannte Probleme

  • Behoben in Navigation 2.5.0-alpha01: Der Zugriff auf ein über by navGraphViewModels() erstelltes ViewModel über die onCreate() eines Fragments schlägt mit einem IllegalStateException fehl. (b/213504272)
  • Behoben in Navigation 2.5.0-alpha01: Safe Args 2.4.0 ist nicht mit dem Android-Gradle-Plug-in 7.1.0 und höher kompatibel. (b/213086135)
  • Beim Deeplinking mit mehreren verschachtelten Navigationsgraphen wird der vollständige Backstack nicht richtig erstellt. (b/214383060)

Version 2.4.0-rc01

15. Dezember 2021

androidx.navigation:navigation-*:2.4.0-rc01 wird veröffentlicht. Version 2.4.0-rc01 enthält diese Commits.

Geändertes Verhalten

  • Bei der Verarbeitung von NavDeepLink-Argumenten werden Rauten jetzt wie Fragezeichen als Trennzeichen zwischen Argumenten behandelt. (I21309, b/180042703)

Fehlerkorrekturen

  • Bei Deeplinks werden Argumente mit Werten, die mit dem Namen des Platzhalters übereinstimmen, nicht mehr ignoriert. (If8017, b/207389470)
  • NavController stürzt nicht mehr ab, wenn ein verschachteltes Ziel mit Übergängen nach dem Wiederherstellen von NavController entfernt wird. (I0f7c9, b/205021623)
  • Die Fehlermeldung bei Verwendung eines ungültigen startDestination wird jetzt standardmäßig auf die Route des Startziels festgelegt, sofern eine verfügbar ist. (I86b9d, b/208041894)

Fehlerkorrekturen für Navigation Compose

  • Ein möglicher Absturz, der durch schnelles Wechseln zwischen dem Startziel und einem anderen Ziel über die Elemente des unteren Navigationsmenüs verursacht wurde, wurde behoben. (Ic8976, b/208887901)
  • Dialogziele werden nach Konfigurationsänderungen oder Prozessbeendigung jetzt korrekt oben auf dem Bildschirm wiederhergestellt. (I4c0dc, b/207386169)
  • Das Problem wurde behoben, dass der Versuch, ein ViewModel aus dem NavBackStackEntry eines Dialogfelds abzurufen, fehlschlug, wenn das Dialogfeld geschlossen wurde. (I6b96d, b/206465487)
  • Ein Problem wurde behoben, das bei der Verwendung von activity-Zielen mit NavHost von Navigation Compose zu unendlichen Neuzusammenstellungen geführt hat. (I8f64c)
  • Es wurde ein Speicherleck in Navigation Compose behoben, bei dem nach einer Konfigurationsänderung oder einem Prozessende eine Referenz auf die alte Aktivität beibehalten wurde. (I4efcb, b/204905432)

Fehlerkorrekturen für Safe Args

  • SafeArgs stürzt nicht mehr ab, wenn versucht wird, benutzerdefinierte Parcelable-Arrays nach dem Beenden des Prozesses wiederherzustellen. (I618e8, b/207315994)
  • Ein Fehler in Safe Args wurde behoben, der verhinderte, dass boolesche Arrays einen null-Wert haben. (I8c396, b/174787525)

Version 2.4.0-beta02

3. November 2021

androidx.navigation:navigation-*:2.4.0-beta02 wird veröffentlicht. Version 2.4.0-beta02 enthält diese Commits.

API-Änderungen

  • Beim Verarbeiten von expliziten und impliziten Deeplinks wird jetzt automatisch das Flag saveState hinzugefügt, wenn zu einem anderen Diagramm navigiert wird. So wird dafür gesorgt, dass Code wie NavigationUI.setupWithNavController und Code, der mehrere Backstacks verwendet, wie erwartet funktioniert. (Ic8807)

Geändertes Verhalten

  • Deeplink-Muster werden jetzt verzögert in NavDeepLink kompiliert, anstatt während der Inflation. Dadurch sollte sich die Inflationszeit von Navigationsdiagrammen mit Deeplinks verkürzen. (b8d257, b/184149935)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem NavBackStackEntries nach dem Wechsel zu Lifecycle.State.STARTED in Lifecycle.State.CREATED verschoben wurden, wenn NavHost direkt zum setContent() der Aktivität hinzugefügt wurde. (Ia5ac1, b/203536683)
  • Es wurde ein Race Condition-Problem behoben, bei dem das Entfernen eines DialogFragment-Ziels aus dem Backstack, bevor das Dialogfeld tatsächlich angezeigt wurde, nicht dazu führte, dass das Dialogfeld geschlossen wurde. Dies führte zu einem Absturz, wenn das fehlerhafte Dialogfeld manuell vom Nutzer geschlossen wurde. (I687e5)
  • Es wurde ein Problem behoben, bei dem die onNavDestinationSelected API auf NavigationUI true zurückgegeben hat, auch wenn Sie nicht tatsächlich navigate() zu diesem Navigationsdiagramm waren. Dabei wird jetzt dieselbe Logik verwendet, die intern von setupWithNavController genutzt wird, um nur das MenuItem auszuwählen, das mit dem aktuellen Ziel verknüpft ist. Dazu wird das hierarchy des Ziels verwendet. (I2b053)

Version 2.4.0-beta01

27. Oktober 2021

androidx.navigation:navigation-*:2.4.0-beta01 wird veröffentlicht. Version 2.4.0-beta01 enthält diese Commits.

Neue Funktionen

  • Sie können jetzt by navGraphViewModel mit einer Route anstelle einer ID verwenden, um die Verwendung der Navigation Kotlin DSL mit Fragmenten besser zu unterstützen. (I901e3, b/201446416)

API-Änderungen

  • Die visibleEntries API befindet sich jetzt in der Testphase. (I93f6f)

Fehlerkorrekturen

  • ViewModels werden nicht mehr zerstört, wenn Übergänge durch Hin- und Herwechseln zwischen denselben Bildschirmen unterbrochen werden (Id52d8, b/200817333).
  • Für nullable NavDeepLink-Argumente ist kein Standardwert mehr erforderlich, wenn Deeplinks zu NavDestinations hinzugefügt werden. (I5aad4, b/201320030)
  • NavBackStackEntries mit unterschiedlichen Lifecycles werden nicht mehr als gleich betrachtet. Das bedeutet, dass NavHost alle Ziele richtig neu zusammensetzt, wenn die Navigation mit singleTop erfolgt und wenn Elemente des unteren Menüs neu ausgewählt werden. (I1b351, b/196997433)
  • Ein Problem mit AbstractListDetailFragment wurde behoben, das dazu geführt hat, dass die Attribute layout_width und layout_weight im Listenbereich, der von onCreateListPaneView() zurückgegeben wurde, falsch verarbeitet oder ignoriert wurden. (f5fbf3)
  • Der visuelle Status von Dialogzielen wird jetzt korrekt mit dem Status von DialogFragmentNavigator synchronisiert. Das bedeutet, dass durch den manuellen Aufruf der asynchronen dismiss() API für DialogFragment jetzt alle Dialogziele über dem jetzt geschlossenen Dialogfeld ordnungsgemäß gelöscht werden. Dies hat keine Auswirkungen auf Fälle, in denen Sie popUpTo oder popBackStack() verwenden, um den Dialog zu schließen. (I77ba2)
  • AbstractAppBarOnDestinationChangedListener bietet jetzt deutlichere Fehlermeldungen für onDestinationChanged(). (Ie742d)

Version 2.4.0-alpha10

29. September 2021

androidx.navigation:navigation-*:2.4.0-alpha10 wird veröffentlicht. Version 2.4.0-alpha10 enthält diese Commits.

Neue Funktionen

  • NavController bietet jetzt die Möglichkeit, über den visibleEntries StateFlow (Ia964e) eine Liste aller sichtbaren NavBackStackEntry-Instanzen abzurufen.
  • rememberNavController() akzeptiert jetzt eine optionale Gruppe von Navigator-Instanzen, die dem zurückgegebenen NavController hinzugefügt werden, um optionale Navigatoren wie die aus Accompanist Navigation Material besser zu unterstützen. (I4619e)

Fehlerkorrekturen

  • Die dynamische Navigation stürzt nicht mehr ab, wenn die Aktivität neu erstellt wird. (Ifa6a3, b/197942869)
  • Ein Problem mit der System-Schaltfläche „Zurück“ wurde behoben, das nur auftritt, wenn zu einem zusammensetzbaren Ziel zurückgekehrt wird, das ein NavHost enthält. (3ed148, b/195668143)
  • SafeArgs generiert jetzt die Argumente für fromBundle() und fromSavedStateHandle() in der richtigen Parameterreihenfolge. (I824a8, b/200059831)

Version 2.4.0-alpha09

15. September 2021

androidx.navigation:navigation-*:2.4.0-alpha09 wird veröffentlicht. Version 2.4.0-alpha09 enthält diese Commits.

Neue Funktionen

  • Sie können jetzt die Methode clearBackStack() verwenden, um alle mit popBackStack() oder popUpToSaveState gespeicherten Status zu löschen. (I80a0f)
  • Sie können jetzt eine Liste von Argumenten und/oder Deeplinks an den Builder Ihres verschachtelten Navigationsgraphen übergeben. Diese werden dann automatisch dem resultierenden Graphen hinzugefügt. (I8a470, b/182545357)

API-Änderungen

  • Die Kotlin DSL-Funktion navArgument ist jetzt Teil von navigation-common statt navigation-compose. Dazu müssen Sie die Importe aktualisieren, um diese Funktion weiterhin nutzen zu können. (I1d095)

Geändertes Verhalten

  • Beim Generieren von Argumenten werden Parameter ohne Standardwerte jetzt vor Parametern mit Standardwerten platziert. (I89709, b/198493585)

Fehlerkorrekturen

  • Wenn Sie Navigation Compose verwenden, sind NavGraphs erst dann DESTROYED, wenn alle untergeordneten Elemente DESTROYED sind. (I86552, b/198741720)
  • Für Argumente vom Typ „Nullable NavDeepLink“ ist kein Standardwert mehr erforderlich. (Ia14ef, b/198689811)
  • Wenn Sie setGraph() mit einem neuen Diagramm aufrufen, werden jetzt auch alle gespeicherten Backstacks gelöscht. Bisher wurde nur der Backstack entfernt. (I97f96)
  • Ein Problem wurde behoben, bei dem OnDestinationChangedListener-Instanzen und die currentBackStackEntryFlow bei Verwendung von launchSingleTop nicht benachrichtigt wurden. (Iaaebc)

Abhängigkeitsupdates

Version 2.4.0-alpha08

1. September 2021

androidx.navigation:navigation-*:2.4.0-alpha08 wird veröffentlicht. Version 2.4.0-alpha08 enthält diese Commits.

Neue Funktionen

  • Es ist jetzt möglich, die NavType-Klasse zu erweitern, um benutzerdefinierte NavTypes zu erstellen. Benutzerdefinierte Typen werden nur unterstützt, wenn Sie das Navigationsdiagramm programmatisch erstellen, z. B. über die Kotlin-DSL für Navigationsdiagramme. (I78440, b/196871885)

Geändertes Verhalten

  • Beim Generieren von Aktionen werden in Kotlin-Code, der aus Safe Args generiert wird, Argumente ohne Standardwerte jetzt vor Argumenten mit Standardwerten als Parameter platziert. (Idb697, b/188855904)
  • Bei Deeplinks wird jetzt geprüft, ob alle erforderlichen Argumente (ohne Standardwerte) in Uri vorhanden sind. (#204, b/185527157)

Fehlerkorrekturen

  • Die Verwendung von getBackStackEntry und previousBackStackEntry in composable() in Verbindung mit remember() führt nicht mehr zu einer Ausnahme, wenn sich kein Ziel auf dem Backstack befindet. (I75138, b/194313238)
  • Navigation Compose wird jetzt richtig neu zusammengestellt, wenn Backstack-Argumente geändert und launchSingleTop=true verwendet wird. (Iebd69, b/186392337)
  • Beim Aufrufen von setGraph mit einem Diagramm mit 13 oder 29 Zielen wird kein ArrayIndexOutOfBoundsException mehr zurückgegeben. (I1a9f1, b/195171984)
  • Der SafeArgs-Java-Generator sollte beim Generieren von Args-Klassen keine Lint-Warnungen mehr verursachen. (I1a666, b/185843837)

Externe Beiträge

  • Vielen Dank an ospixd, dass du dafür gesorgt hast, dass bei der Überprüfung von Deeplinks alle erforderlichen Argumente (ohne Standardwerte) in Uri vorhanden sind. (#204, b/185527157)

Version 2.4.0-alpha07

18. August 2021

androidx.navigation:navigation-*:2.4.0-alpha07 wird veröffentlicht. Version 2.4.0-alpha07 enthält diese Commits.

Fehlerkorrekturen

  • Der Status wird in Navigation Compose jetzt nach Konfigurationsänderungen und beim Ändern von Diagrammen mit der Funktion für mehrere Backstacks richtig gespeichert. (If5a3d, b/195141957)
  • Wenn Sie bei der Verwendung von Navigation Compose mit mehreren Backstacks denselben Tab noch einmal auswählen, wird nicht mehr ein leerer Bildschirm angezeigt. (I860dc, b/194925622)
  • NavHost berücksichtigt jetzt Änderungen am Lifecycle.State von NavBackStackEntry. Das bedeutet, dass die Verwendung von NavHost in einem Fragment jetzt richtig neu zusammengesetzt wird, wenn sich der Lebenszyklus ändert, anstatt zu einem leeren Bildschirm zu führen. (I4eb85, b/195864489)
  • Ein Problem wurde behoben, durch das das Schließen eines DialogFragment den NavController-Status nach dem Neuerstellen Ihrer Aktivität (z.B. nach einer Konfigurationsänderung) nicht korrekt aktualisiert hat. (Icd72b)
  • Ein Problem wurde behoben, bei dem durch das Schließen eines Dialogzielfensters die Verarbeitung der System-Zurück-Schaltfläche des NavController nicht aktualisiert wurde. Dadurch konnte es passieren, dass der NavController die Zurück-Schaltfläche abgefangen hat, obwohl kein Backstack zum Schließen vorhanden war. (If3b34)
  • Mit Safe Args wird jetzt automatisch eine toSavedStateHandle-Methode für Argumente generiert, mit der Sie Ihren ViewModel-Code testen können. (If1e2d, b/193353880)

Version 2.4.0-alpha06

4. August 2021

androidx.navigation:navigation-*:2.4.0-alpha06 wird veröffentlicht. Version 2.4.0-alpha06 enthält diese Commits.

API-Änderungen

  • Die Methoden requireSlidingPaneLayout() und requireDetailPaneNavHostFragment() für AbstractListDetailFragment wurden in getSlidingPaneLayout() bzw. getDetailPaneNavHostFragment() umbenannt. (I34a08)

Geändertes Verhalten

  • Bei der Navigation mit Animationen (z. B. Crossfade) wird die Lifecycle des neuen Ziels erst dann erreicht, wenn die Animation abgeschlossen ist.RESUMED (If0543, b/172112072, b/194301889)
  • Mit NavHost von Navigation Compose wird der Graph jetzt als Teil der ersten Komposition festgelegt. (Ieb7be)

Fehlerkorrekturen

  • Wenn das letzte Ziel eines Navigationsdiagramms entfernt wird, wird keine ClassCastException mehr ausgelöst. (If0543, b/172112072, b/194301889)
  • Ein NullPointerException wurde behoben, das beim Hinzufügen eines Deeplinks ohne Uri und beim Navigieren über eine Route oder einen Deeplink auftrat. (938a0c, b/193805425)
  • Ein Problem in Navigation Compose wurde behoben, bei dem ein per Deeplink verknüpfter NavBackStackEntry den Status RESUMED nicht erreichte. (I192c5)
  • Ein Problem wurde behoben, bei dem durch das Schließen eines Dialogzielfelds die Verarbeitung der System-Zurück-Schaltfläche des NavController nicht aktualisiert wurde. Dadurch konnte es passieren, dass der NavController die Zurück-Schaltfläche abgefangen hat, obwohl kein Backstack zum Schließen vorhanden war. (aosp/1782668)

Version 2.4.0-alpha05

21. Juli 2021

androidx.navigation:navigation-*:2.4.0-alpha05 wird veröffentlicht. Version 2.4.0-alpha05 enthält diese Commits.

Geändertes Verhalten

  • Für NavHost in Navigation Compose werden jetzt immer Crossfades verwendet, wenn zwischen Zielen navigiert wird. (I07049, b/172112072)
  • Sie können jetzt Änderungen am Diagramm eines NavHost vornehmen. Graphen mit demselben „startDestination“- und „destination“-Attribut werden als gleich betrachtet und löschen den NavController-Backstack nicht. (I0b8db, b/175392262)

Fehlerkorrekturen

  • Ein NoSuchElementException wurde behoben, wenn popBackStack() aus einem LifecycleObserver aufgerufen wurde, das an ein NavBackStackEntry angehängt ist. Der Fehler wurde durch reentrant-Aktualisierungen des NavController-Status verursacht. (I64621)
  • AbstractListDetailFragment kann jetzt vollständig aus Ihrem APK entfernt werden, wenn SlidingPaneLayout nicht verwendet wird.AbstractListDetailFragment (I611ad)
  • NavGraph und NavDestination überschreiben jetzt die Methode „equals“, sodass zwei Objekte mit denselben Werten als gleich betrachtet werden. (I166eb, b/175392262)

Version 2.4.0-alpha04

1. Juli 2021

androidx.navigation:navigation-*:2.4.0-alpha04 wird veröffentlicht. Version 2.4.0-alpha04 enthält diese Commits.

Neue Funktionen

  • Das navigation-fragment-Artefakt enthält jetzt eine vorgefertigte Implementierung eines zweispaltigen Layouts über die neue AbstractListDetailFragment. In diesem Fragment wird ein SlidingPaneLayout verwendet, um ein Listenbereich (der von Ihrer Unterklasse bereitgestellt wird) und ein Detailbereich zu verwalten. Für den Detailbereich wird ein NavHostFragment verwendet, wie in unserer Beispielimplementierung zu sehen ist. (Iac4be, b/191276636)
  • Das NavHost des navigation-compose-Artefakts unterstützt jetzt neben composable-Zielen auch dialog-Ziele. Diese Dialogziele werden jeweils in einem Composable Dialog angezeigt, das über dem aktuellen composable-Ziel schwebt. (I011d0)
val navController = rememberNavController()
    Scaffold { innerPadding ->
        NavHost(navController, "home", Modifier.padding(innerPadding)) {
            composable("home") {
                // This content fills the area provided to the NavHost
                HomeScreen()
            }
            dialog("detail_dialog") {
                // This content will be automatically added to a Dialog() composable
                // and appear above the HomeScreen or other composable destinations
                DetailDialogContent()
            }
        }
    }

API-Änderungen

  • Die Funktion add in NavigatorState wurde in push umbenannt. Alle aktuellen Aufrufe von add() müssen in push() geändert werden. (Ie89fc, b/172112072)
  • Benutzerdefinierte Navigator-Instanzen können jetzt die APIs pushWithTransaction und popWithTransition auf NavigatorState verwenden, um ein Ziel asynchron zu pushen oder zu entfernen. Diese APIs werden noch nicht von den enthaltenen Navigatoren verwendet. (Ic4d7c, b/172112072)

Geändertes Verhalten

  • NavDeepLinkBuilder fügt jetzt PendingIntent.FLAG_IMMUTABLE zu den PendingIntent hinzu, die von createPendingIntent() zurückgegeben werden. So wird dafür gesorgt, dass diese API wie erwartet funktioniert, wenn sie auf Android 12 ausgerichtet ist. (If8c52)

Fehlerkorrekturen

  • Ein Problem mit <include-dynamic> wurde behoben. Dabei wurden Argumente, die an das Diagramm übergeben wurden, nicht korrekt an das dynamisch eingebundene Diagramm übergeben. (I3e115)
  • Es wurde ein NullPointerException behoben, der beim Navigieren zu einem Ziel mit dem Argument string[] mit dem Standardwert @null auftrat. (I1fbe8)
  • ProGuard-Regeln für @Navigator.Name hinzufügen, um Probleme bei der Verwendung von R8 3.1 im vollständigen Modus zu beheben. (I2add9, b/191654433)
  • SafeArgs schlägt nicht mehr fehl, wenn Sie Ihre App mit Kotlin-Versionen vor 1.5.0 erstellen. (Icd1ff, b/190739257)

Version 2.4.0-alpha03

16. Juni 2021

androidx.navigation:navigation-*:2.4.0-alpha03 wird veröffentlicht. Version 2.4.0-alpha03 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem zwei navigate()-Aufrufe erforderlich waren, um zu einem eingebundenen dynamischen Diagramm zu navigieren. (I7785c, b/188859835)
  • Es wurde ein Regressionsfehler behoben, der in Navigation 2.4.0-alpha01 eingeführt wurde. Dabei wurde das Symbol „Nach oben“ (setupActionBarWithNavController()) nicht richtig entfernt, wenn Sie sich auf einem Ziel der obersten Ebene befanden. (I5d443, b/189868637)
  • Ein IllegalStateException wurde behoben, wenn popBackStack() aufgerufen wurde, nachdem der Root-Graph des NavController zuvor entfernt wurde. (I2a330, b/190265699)
  • ProGuard-Regeln für by navArgs() werden jetzt richtig angewendet, wenn navigation-common oder Artefakte verwendet werden, die davon abhängen. (I68800, b/190082521)
  • Ein OnDestinationChangedListener, das navigate() beim ersten Empfang eines Callbacks aufruft, erhält jetzt ordnungsgemäß einen zweiten Callback mit dem Ziel, zu dem es navigiert ist. (Ie5f9e, b/190228815)
  • Safe Args stürzt nicht mehr ab, wenn es mit dynamischen Funktionsmodulen und AGP 7.0+ verwendet wird. (I69518, b/189966576)

Bekanntes Problem

  • Safe Args schlägt mit einem Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’-Fehler fehl, wenn Gradle 6.7.0 verwendet wird, da eine Abhängigkeit von einer älteren Version von Kotlin besteht. Dieses Problem lässt sich umgehen, indem Sie auf Gradle 7.0 aktualisieren. (b/190739257)

Version 2.4.0-alpha02

2. Juni 2021

androidx.navigation:navigation-*:2.4.0-alpha02 wird veröffentlicht. Version 2.4.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Routen werden jetzt für Activity-, Fragment- und Dialog-Ziele sowie in der gesamten DynamicNavigation Kotlin-DSL unterstützt. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • NavigationUI hat vorübergehend experimentelle APIs hinzugefügt, mit denen Sie das Speichern Ihres Status deaktivieren können. Das Speichern des Status ist zwar das korrekte Verhalten, aber es gibt immer noch Verwendungen von eingestellten Bibliotheken (z. B. beibehaltene Fragmente), die beim Speichern des Status nicht unterstützt werden können. So haben Apps die Möglichkeit, langsam von nicht unterstützten APIs zu migrieren. (Idf93c)
  • Für die Navigation sind jetzt die APIs findDestination() und getHierarchy() verfügbar, mit denen sich eine benutzerdefinierte NavigationUI implementieren lässt. findDestination() ist eine Erweiterungsfunktion für NavGraph, mit der ein Ziel im Diagramm gefunden wird. getHierarchy() ist eine Funktion für NavDestination, mit der geprüft werden kann, ob ein bestimmtes Ziel in der Hierarchie eines anderen liegt.(I2932f, b/188183365)

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • NavigationUI-Methoden, die ein BottomNavigationView verwendet haben, wurden aktualisiert, sodass stattdessen die in Material 1.4.0 eingeführte Superklasse NavigationBarView verwendet wird. So können diese Methoden mit dem NavigationRailView verwendet werden. (Ib0b36, b/182938895)

  • Wenn ein <action>-Element über XML instanziiert wird, können für Animationsattribute Attribute verwendet werden, die mit der app:enterAnim="?attr/transitionEnter"-Syntax aus Ihrem Theme abgerufen werden. (I07bc1, b/178291654)

API-Änderungen

Fehlerkorrekturen

  • DialogFragmentNavigator verwendet jetzt die NavigatorState.pop() API, um NavController darüber zu informieren, wenn ein Dialogfeld durch Drücken der System-Zurück-Schaltfläche oder durch Klicken außerhalb des Dialogfelds geschlossen wird. So wird dafür gesorgt, dass der NavController-Status immer mit dem Status des Navigators synchronisiert ist. (I2ead9)
  • Die Navigation gibt nicht mehr ConcurrentModificationException zurück, wenn die Liste der OnDestinationChangedListeners mit einem onDestinationChanged-Callback bearbeitet wird. (Ib1707, b/188860458)

  • Safe Args stürzt nicht mehr ab, wenn versucht wird, Richtungseigenschaften in Kotlin zu generieren. (Id2416, b/188564435)

  • Die Methode „setId“ für „NavDestination“ ist jetzt korrekt mit @IdRes annotiert, sodass nur Ressourcen-IDs akzeptiert werden. (I69b80)

  • Der int-Parameter von findNode ist jetzt resId anstelle von resid. (I7711d)

Abhängigkeitsupdate

  • Safe-Args hängt jetzt vom Android-Gradle-Plug-in 4.2.0 ab. Sie sollten also keine Warnung mehr erhalten, dass applicationIdTextResource verwendet wird. (I6d67b, b/172824579)

Version 2.4.0-alpha01

18. Mai 2021

androidx.navigation:navigation-*:2.4.0-alpha01 wird veröffentlicht. Version 2.4.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Die Methode currentBackStackEntryAsFlow() für NavController stellt einen Flow bereit, der immer dann ausgegeben wird, wenn sich der aktuelle NavBackStackEntry ändert. Dieser Ablauf kann als Alternative zur manuellen Verwaltung einer OnDestinationChangedListener verwendet werden. (I19c4a, #89, b/163947280)

Mehrere Backstacks

Der NavController ist für die Verwaltung des Backstacks von Zielen verantwortlich. Er fügt dem Backstack Ziele hinzu, wenn Sie navigate(), und entfernt sie, wenn Sie popBackStack() aufrufen oder die System-Schaltfläche „Zurück“ auslösen. Die vorhandene Klasse NavOptions und die Einbindung in <action>-Einträge im XML-Navigationsdiagramm wurden erweitert, um das Speichern und Wiederherstellen des Backstacks zu unterstützen. (b/80029773)

Im Rahmen dieser Änderung werden die NavigationUI-Methoden von onNavDestinationSelected(), BottomNavigationView.setupWithNavController() und NavigationView.setupWithNavController() jetzt automatisch gespeichert und der Status von Pop-Zielen wird wiederhergestellt. So wird die Unterstützung mehrerer Backstacks ohne Codeänderungen ermöglicht. Wenn Sie die Navigation mit Fragmenten verwenden, ist dies die empfohlene Methode für die Integration mit mehreren Backstacks. (Ie07ca)

Die zugrunde liegenden APIs zum Speichern und Wiederherstellen des Status werden über verschiedene Oberflächen bereitgestellt:

  • Im Navigations-XML-Code kann das Element <action> jetzt die booleschen Attribute app:popUpToSaveState und app:restoreState verwenden, um den Status aller Ziele zu speichern, die über app:popUpTo entfernt wurden, und den Status wiederherzustellen, der dem als app:destination übergebenen Ziel zugeordnet ist:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • In der navOptions Kotlin DSL können Sie die boolesche Property restoreState und die boolesche Property saveState im popUpTo-Builder hinzufügen:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • Wenn Sie ein NavOptions-Objekt manuell über die NavOptions.Builder erstellen, können Sie die setRestoreState() und die neue Überladung für setPopUpTo() verwenden, die einen zusätzlichen saveState-Parameter akzeptiert.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(navController.getGraph().getStartDestinationId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • Programmatische Aufrufe von popBackStack() können jetzt einen zusätzlichen saveState-Parameter enthalten.

In allen Fällen wird der Status jeder NavBackStackEntry durch NavController gespeichert und wiederhergestellt, einschließlich aller ViewModel-Instanzen mit Navigationszielbereich. Die Navigator-APIs wurden aktualisiert, damit jeder Navigator seinen eigenen Status speichern und wiederherstellen kann.

Die ComposeNavigator für composable-Ziele in Navigation Compose und die FragmentNavigator und DynamicFragmentNavigator für <fragment>-Ziele in Navigation mit Fragmenten wurden beide aktualisiert, um die neuen Navigator-APIs zu verwenden und das Speichern und Wiederherstellen des Status zu unterstützen.

Navigationsrouten

Eine Route ist ein String, der ein Ziel eindeutig identifiziert. Dieses Konzept wurde zuvor nur in Navigation Compose verwendet, ist jetzt aber Teil der Navigation Core APIs. Dies ist eine Alternative zur Verwendung von Ganzzahl-IDs beim Erstellen des Graphen über die Navigation Kotlin DSL. (b/172823546)

Alle APIs, die bisher nur eine ID akzeptiert haben, haben jetzt eine Überladung, die eine Route String akzeptiert. Dazu gehören navigate(), popBackStack(), popUpTo() und getBackStackEntry().

Das hat einige Auswirkungen auf die API:

  • Die Kotlin-Eigenschaft popUpTo in der Kotlin-DSL wurde zugunsten von popUpToId eingestellt. (I59c73, b/172823546)
  • Die getStartDestination() API wurde zugunsten von getStartDestinationId() eingestellt. (I0887f, b/172823546)

Für Entwickler, die ein Upgrade von früheren Versionen von Navigation Compose auf Navigation Compose 2.4.0-alpha01 durchführen, bedeutet das, dass die folgenden Importe für Erweiterungsmethoden nicht mehr erforderlich sind und entfernt werden sollten:

import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo

Das Argument KEY_ROUTE wurde durch das Attribut route für NavDestination ersetzt. Dadurch können Sie navBackStackEntry.destination.route direkt aufrufen.

API-Änderungen

  • Alle Navigationsartefakte wurden in Kotlin neu geschrieben. Dadurch wurde die Nullable-Eigenschaft von Klassen mit Generics (z. B. NavType-Unterklassen) verbessert. Alle Kotlin-Erweiterungsfunktionen, die früher Teil der -ktx-Artefakte waren, wurden in die entsprechenden Hauptartefakte verschoben. Die -ktx-Artefakte werden weiterhin veröffentlicht, sind aber leer. (b/184292145)
  • NavDeepLinkBuilder unterstützt jetzt das Hinzufügen mehrerer unterschiedlicher Ziele zum generierten Backstack. (I3ee0d, b/147913689)
  • Fabrikfunktionen für DynamicNavHostFragment hinzufügen (Icd515, b/175222619)
  • Die eindeutige ID einer NavBackStackEntry ist jetzt Teil der öffentlichen API. (Ie033a)
  • Die Felder name und argument sowie die Destrukturierungsfunktionen von NamedNavArgument sind jetzt öffentlich. (#174, b/181320559)
  • Es wurde eine neue NavBackStackEntry#provideToCompositionLocals-Erweiterung eingeführt, die die NavBackStackEntry für die relevanten Kompositions-Locals bereitstellt. (#175, b/187229439)

Safe Args

  • Safe Args generiert jetzt eine fromSavedStateHandle()-Methode für jede NavArgs-Klasse. (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • Safe Args wurde aktualisiert und hängt jetzt von KotlinPoet 1.8.0 ab. (#172, b/183990444)

Geändertes Verhalten

  • Die Navigation hängt jetzt vom Lifecycle 2.3.1 ab und markiert jetzt setGraph(), popBackStack(), navigateUp() und navigate(), die Methoden, die NavBackStackEntry Lifecycle aktualisieren, als @MainThread. Dadurch wird die Navigation an die im Lifecycle 2.3.0 eingeführte Erzwingung des Hauptthreads angepasst. (b/171125856)
  • Das Parsen von Enum-Argumenten aus Deeplinks erfolgt jetzt unabhängig von der Groß-/Kleinschreibung. So kann ein Deeplink wie http://www.example.com/red mit einem www.example.com/{color}-Deeplink übereinstimmen, auch wenn der Enum den Wert RED hat. (#152, b/135857840)

Compose-Kompatibilität

  • androidx.navigation:navigation-compose:2.4.0-alpha01 ist nur mit Compose-Version 1.0.0-beta07 und höher kompatibel.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem nachgestellte Argumentplatzhalter Vorrang vor Deeplinks mit einem passenden genauen Suffix hatten. (#153, b/184072811)
  • NavHostFragment unterstützt jetzt benutzerdefinierte Navigatoren, die dieselbe @Navigator.Name("dialog") wie der Standard-DialogFragmentNavigator verwenden. (Ib1c2c, b/175979140)
  • Das Verhalten von NavigatorProvider#addNavigator wurde verbessert, sodass das wiederholte Aufrufen mit derselben Instanz keine Probleme verursacht. (#176, b/187443146)

Externe Beiträge

  • Vielen Dank an simonschiller für die Unterstützung von Safe Args, die eine fromSavedStateHandle()-Methode für jede NavArgs-Klasse generiert. (#122, b/136967621)
  • Vielen Dank an Bradleycorn, dass das Parsen von Enum-Argumenten aus Deeplinks nun nicht mehr zwischen Groß- und Kleinschreibung unterscheidet. (#152, b/135857840)
  • Vielen Dank an osipxd, der ein Problem behoben hat, bei dem nachgestellte Platzhalter für Argumente Vorrang vor Deeplinks mit einem übereinstimmenden genauen Suffix hatten. (#153, b/184072811)
  • Vielen Dank an tatocaster für die Aktualisierung von Safe Args, sodass es von KotlinPoet 1.8.0 abhängt. (#172, b/183990444)
  • Vielen Dank an jossiwolf, dass er die Felder name und argument sowie die Destrukturierungsfunktionen von NamedNavArgument öffentlich gemacht hat. (#174, b/181320559)
  • Vielen Dank an jossiwolf für die Einführung einer neuen NavBackStackEntry#provideToCompositionLocals-Erweiterung, die die NavBackStackEntry für die relevanten Kompositions-Locales bereitstellt. (#175, b/187229439)
  • Vielen Dank an jossiwolf für die Verbesserung des Verhaltens von NavigatorProvider#addNavigator, damit das wiederholte Aufrufen mit derselben Instanz keine Probleme verursacht. (#176, b/187443146)

Version 1.0.0-alpha10

7. April 2021

androidx.navigation:navigation-compose:1.0.0-alpha10 wird veröffentlicht. Version 1.0.0-alpha10 enthält diese Commits.

API-Änderungen

  • NavHost akzeptiert jetzt ein Modifier, das an den zusammensetzbaren Container übergeben wird, der die Ziel-Composables umschließt. (I85aca, b/175125483)

Fehlerkorrekturen

  • NavHost funktioniert jetzt auch, wenn keine OnBackPressedDispatcherOwner gefunden wird, z. B. bei der Vorschau von NavHost. (I7d8b4)
  • Navigation Compose hängt jetzt von Navigation 2.3.5 ab. Dadurch wird ein Problem behoben, das bei der Verwendung von BackHandler in einem NavHost-Ziel aufgetreten ist. (I7e63b, b/182284739)

Version 1.0.0-alpha09

10. März 2021

androidx.navigation:navigation-compose:1.0.0-alpha09 wird veröffentlicht. Version 1.0.0-alpha09 enthält diese Commits.

API-Änderungen

  • LocalViewModelStoreOwner.current gibt jetzt eine nullable ViewModelStoreOwner zurück, um besser zu bestimmen, ob eine ViewModelStoreOwner in der aktuellen Komposition verfügbar ist. APIs, für die ein ViewModelStoreOwner erforderlich ist, z. B. viewModel() und NavHost, lösen weiterhin eine Ausnahme aus, wenn kein ViewModelStoreOwner festgelegt ist. (Idf39a)

Fehlerkorrekturen

  • Navigation Compose hängt jetzt von Navigation 2.3.4 ab. Diese Version enthält den Fix für den Versuch, dasselbe ViewModelStore-Objekt festzulegen, nachdem der Graph festgelegt wurde. (I65c24, b/177825470)

Version 1.0.0-alpha08

24. Februar 2021

androidx.navigation:navigation-compose:1.0.0-alpha08 wird veröffentlicht. Version 1.0.0-alpha08 enthält diese Commits.

Neue Funktionen

  • NavHost füllt jetzt die LocalSavedStateRegistryOwner-CompositionLocal mit dem NavBackStackEntry des Ziels aus. So wird dafür gesorgt, dass jeder Status, der direkt in SavedStateRegistry gespeichert wird, zusammen mit dem Ziel gespeichert und wiederhergestellt wird. (I435d7, b/179469431)

Version 1.0.0-alpha07

10. Februar 2021

androidx.navigation:navigation-compose:1.0.0-alpha07 wird veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.

Abhängigkeitsupdates

Version 1.0.0-alpha06

28. Januar 2021

androidx.navigation:navigation-compose:1.0.0-alpha06 wird veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.

API-Änderungen

  • Die Erweiterungsmethode getBackStackEntry(route: String) wurde für NavController hinzugefügt, die den zugehörigen NavBackStackEntry zurückgibt. (If8931)

Version 1.0.0-alpha05

13. Januar 2021

androidx.navigation:navigation-compose:1.0.0-alpha05 wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.

Die Abhängigkeit wurde auf Compose 1.0.0-alpha10 aktualisiert.

Version 1.0.0-alpha04

16. Dezember 2020

androidx.navigation:navigation-compose:1.0.0-alpha04 wird veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.

  • Aktualisiert für die Kompatibilität mit Compose 1.0.0-alpha09.

Version 1.0.0-alpha03

2. Dezember 2020

androidx.navigation:navigation-compose:1.0.0-alpha03 wird veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, durch das popBackStack() und navigateUp() nach einer Konfigurationsänderung oder dem Beenden und Neuerstellen eines Prozesses nicht funktionierten. (Icea47, b/173281473)
  • Das Navigieren zu einem verschachtelten Diagramm in Ihrem NavHost funktioniert jetzt ordnungsgemäß. (I0948d, b/173647694)

Version 1.0.0-alpha02

11. November 2020

androidx.navigation:navigation-compose:1.0.0-alpha02 wird veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.

API-Änderungen

  • Navigation Compose unterstützt jetzt NavOptions für die Verwendung von „popUpTo“- und „launchSingleTop“-Vorgängen (If96c3, b/171468994)
  • Es wurde eine Navigationsfunktion hinzugefügt, die eine Route anstelle einer ID verwendet. So können Sie verschachtelte Diagramme in der Navigation Compose-DSL erstellen. (I1661d)
  • „startDestination“ steht jetzt vor der Route in der Liste der Parameter für einen NavHost (Ie620e).
  • Sie können jetzt einen Graphen erstellen, in dem die Route als Startziel außerhalb eines NavHost-Composable verwendet wird. (Iceb75)

Version 1.0.0-alpha01

28. Oktober 2020

android.navigation:navigation-compose:1.0.0-alpha01 wird veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.

Neue Funktionen

Das navigation-compose-Artefakt bietet die Integration zwischen der Navigationskomponente und Jetpack Compose. Dabei werden @Composable-Funktionen als Ziele in Ihrer Anwendung verwendet.

Diese erste Version bietet Folgendes:

  • Eine NavHost-Composable-Funktion, mit der Sie Ihren Navigationsgraphen über eine Kotlin-DSL erstellen können.
  • Festlegung des Umfangs von Lebenszyklus, ViewModel und gespeichertem Status auf der Zielebene.
  • Automatische Integration mit der System-Schaltfläche „Zurück“.
  • Unterstützung für das Übergeben von Argumenten, das Anhängen von Deeplinks an Ziele und das Zurückgeben eines Ergebnisses an vorherige Ziele.
  • Erstellen Sie bestimmte Hilfsfunktionen in rememberNavController() und currentBackStackEntryAsState(), um hoisting state zu ermöglichen und NavController mit Composables außerhalb von NavHost (z. B. einer unteren Navigationsleiste) zu verbinden.

Weitere Informationen finden Sie im Compose-Navigationsleitfaden.

Version 2.3.5

Version 2.3.5

7. April 2021

androidx.navigation:navigation-*:2.3.5 wird veröffentlicht. Version 2.3.5 enthält diese Commits.

Neue Funktionen

  • Wenn Sie mit einem NavDeepLinkRequest oder Uri navigieren, können Sie jetzt über KEY_DEEP_LINK_INTENT auf Uri, Aktion und MIME-Typ im resultierenden Ziel zugreifen. Das entspricht der Funktionalität, die bereits für externes Deep Linking verfügbar ist. (I975c3, b/181521877)

Fehlerkorrekturen

  • OnBackPressedCallbacks, die einem Dispatcher mit NavBackStackEntry als LifecycleOwner hinzugefügt wurde, fängt jetzt korrekt zurück ab, nachdem der Aktivitätslebenszyklus STOPPED und dann STARTED ist (Iff94f, b/182284739).
  • Beim Parsen von Deeplink-Domains wird jetzt nicht mehr zwischen Groß- und Kleinschreibung unterschieden. www.example.com entspricht also sowohl www.example.com als auch www.Example.com. Bei Namen von Abfrageparametern wird weiterhin zwischen Groß- und Kleinschreibung unterschieden. (#144, b/153829033)
  • Es wurde ein NullPointerException behoben, der auftreten konnte, wenn ein Ziel mehrere Standardargumente hatte, die nicht null sein konnten, und Sie zu diesem Ziel navigiert sind, während nur eine Teilmenge dieser Argumente überschrieben wurde. (aosp/1644827)

Abhängigkeitsupdates

  • Das Gradle-Plug-in „Navigation Safe Args“ hängt jetzt vom Kotlin-Gradle-Plug-in 1.4.31 ab. (aosp/1661058, b/181156413)

Externe Beiträge

  • Vielen Dank an bentrengrove für den Pull-Request, mit dem die Groß-/Kleinschreibung beim Parsen von Deeplink-Domains nicht mehr berücksichtigt wird. (#144, b/153829033)

Version 2.3.4

Version 2.3.4

10. März 2021

androidx.navigation:navigation-*:2.3.4 wird veröffentlicht. Version 2.3.4 enthält diese Commits.

Neue Funktionen

  • ReferenceType-Argumente können jetzt richtig geparst werden, wenn sie als Teil eines Deeplink-URI gesendet werden. Es werden sowohl der rohe Ganzzahlwert als auch Hexadezimalwerte mit dem Präfix 0x unterstützt. (#127, b/179166693)
  • Der android:defaultValue für ein Argument mit app:argType="float" unterstützt jetzt ganzzahlige Standardwerte. Sie können also android:defaultValue="0" verwenden, anstatt 0.0. (#117, b/173766247)

Fehlerkorrekturen

  • Problem behoben, bei dem die Installation bei Verwendung der Unterstützung von Navigation für dynamische Funktionen hängen blieb. (Ib27a7, b/169636207)
  • Wenn setViewModelStore oder setLifecycleOwner mit demselben Objekt aufgerufen wird, das bereits festgelegt wurde, wird jetzt nichts mehr ausgeführt (Idf491, b/177825470).
  • Safe-Args fügt jetzt bei Verwendung von Java Unterdrückungsanmerkungen für die entsprechenden Methoden hinzu. (I8fbc5, b/179463137)

Externe Beiträge

  • Vielen Dank JvmName für den Pull-Request, mit dem sichergestellt wird, dass ReferenceType-Argumente jetzt richtig geparst werden können, wenn sie als Teil eines Deeplink-URI gesendet werden. (#127, b/179166693)
  • Vielen Dank, tatocaster, für den Pull-Request, mit dem defaultValue für ein Argument mit app:argType=”float” jetzt standardmäßige Ganzzahlwerte unterstützt. (#117, b/173766247)

Version 2.3.3

Version 2.3.3

27. Januar 2021

androidx.navigation:navigation-*:2.3.3 wird veröffentlicht. Version 2.3.3 enthält diese Commits.

Fehlerkorrekturen

  • Es kommt nicht mehr zu einem Absturz, wenn ein NavBackStackEntry entfernt wird, bevor sein Lifecycle zu CREATED verschoben wird. (Ie3ba3)
  • Eine durch b/171364502 verursachte Regression wurde behoben. Bei dieser Regression führte das Aufrufen einer Aktivität mit dem Animationsressourcenwert 0 zu einem ResourceNotFoundException. (I7aedb, b/176819931)

Version 2.3.2

Version 2.3.2

2. Dezember 2020

androidx.navigation:navigation-*:2.3.2 wird veröffentlicht. Version 2.3.2 enthält diese Commits.

Fehlerkorrekturen

  • Ein Fehler in NavigationUI wurde behoben, bei dem die Navigation zur Aktivität fehlschlug, wenn ein <activity>-Ziel mit onNavDestinationSelected verwendet wurde. (I22e34, b/171364502)
  • Ein Problem wurde behoben, bei dem navigation-dynamic-features-fragment dazu führte, dass das neu installierte Ziel mehrmals angesteuert wurde. (aosp/1486056, b/169636207)
  • Ein Problem wurde behoben, bei dem Standardargumente bei Verwendung von launchSingleTop nicht an OnDestinationChangedListener-Instanzen gesendet wurden. (I2c5cb)
  • Ein Problem wurde behoben, bei dem beim Navigieren zu einem verschachtelten Navigationsdiagramm keine neue Diagramminstanz im Backstack erstellt wurde. (Ifc831)
  • Ein Problem wurde behoben, bei dem die Verwendung von navigate() mit einem popUpTo, durch das das letzte Ziel in einem Navigationsdiagramm entfernt wurde, nicht dazu führte, dass das Navigationsdiagramm selbst sofort zerstört und aus dem Backstack entfernt wurde. (I910a3)
  • Navigation SafeArgs verwendet jetzt KotlinPoet Version 1.7.2, die den expliziten API-Modus von Kotlin unterstützt. (I918b5)
  • NavHostFragment.findNavController(Fragment) prüft jetzt zusätzlich zu den vorhandenen Prüfungen der Fragmenthierarchie und der Ansichtshierarchie des Fragments auch die Root-Decor-Ansicht eines DialogFragments. So können Sie Dialogfragmente testen, die die Navigation mit FragmentScenario und Navigation.setViewNavController() verwenden. (I69e0d)

Version 2.3.1

Version 2.3.1

14. Oktober 2020

androidx.navigation:navigation-*:2.3.1 wird veröffentlicht. Version 2.3.1 enthält diese Commits.

Neue Funktionen

  • Der Navigations-UI wurden Standard-Animator-Ressourcen hinzugefügt, die gegenüber den Standard-Animationsressourcen empfohlen werden. (b/167430145)
  • NavOptions überschreibt jetzt die Methoden „hashcode“ und „equals“ (b/161586466).
  • Die Navigation enthält jetzt das aktuelle Ziel in der IllegalArgumentException „No destination with ID“, was die Fehlersuche für Entwickler erleichtern sollte. (b/168311416)

Fehlerkorrekturen

  • Safe Args umschließt die Rückgabezeile nicht mehr, auch wenn der generierte Argumentklassenname länger als 100 Zeichen ist. (b/168584987)

Änderungen an Abhängigkeiten

  • navigation-ui hängt jetzt von DrawerLayout 1.1.1 ab. Dadurch kann NavigationUI die Navigationsleiste auch dann öffnen, wenn LOCK_MODE_LOCKED_CLOSED oder LOCK_MODE_LOCKED_OPEN verwendet wird. (b/162253907)
  • Safe Args hängt jetzt von KotlinPoet 1.6.0 ab (aosp/1435911)
  • Safe Args hängt jetzt von AGP 4.0.1 ab (aosp/1442337).

Version 2.3.0

Version 2.3.0

24. Juni 2020

androidx.navigation:navigation-*:2.3.0 wird veröffentlicht. Version 2.3.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.2.0

  • Integration von Funktionsmodulen: Mit den Artefakten navigation-dynamic-features-runtime und navigation-dynamic-features-fragment können Sie zu Zielen navigieren, die in Funktionsmodulen definiert sind. Die Installation der Funktionsmodule wird bei Bedarf automatisch durchgeführt. Weitere Informationen finden Sie unter Mit Funktionsmodulen navigieren.
  • Navigationstests: Das navigation-testing-Artefakt bietet eine TestNavHostController, mit der Sie das aktuelle Ziel festlegen und den Backstack nach Navigationsvorgängen prüfen können. Weitere Informationen finden Sie unter Navigation testen.
  • Ergebnis zurückgeben: Über die NavBackStackEntry, die jeder Ziel-ID im Navigations-Backstack zugeordnet ist, können Sie jetzt auf ein SavedStateHandle zugreifen, das sich zum Speichern kleiner Mengen von gespeichertem Status eignet, der einem bestimmten Backstack-Eintrag zugeordnet werden soll. Weitere Informationen finden Sie unter Ergebnis an das vorherige Ziel zurückgeben.
  • NavigationUI-Unterstützung für Openable: Openable Alle Verwendungen von DrawerLayout in NavigationUI wurden durch die allgemeinere Schnittstelle ersetzt, die in CustomView 1.1.0 hinzugefügt und von DrawerLayout in DrawerLayout 1.1.0 implementiert wurde.
  • Unterstützung von Aktionen und MIME-Typen in Deeplinks: Deeplinks unterstützen jetzt neben dem bisher verfügbaren app:uri auch app:action und app:mimeType. NavController unterstützt jetzt die Navigation anhand einer beliebigen Kombination dieser Felder über die neue Klasse NavDeepLinkRequest. Weitere Informationen finden Sie unter Mit NavDeepLinkRequest navigieren.

Bekannte Probleme

  • Die Unterstützung für Deeplink-Aktionen und MIME-Typen ist im Manifest Merger noch nicht verfügbar. Bis dahin enthalten alle generierten <intent-filter>-Elemente aus dem <nav-graph>-Element in Ihrem Manifest weder Ihren MIME-Typ im <data>-Element noch Ihren benutzerdefinierten <action>. Sie müssen Ihrem Manifest manuell ein entsprechendes <intent-filter> hinzufügen.

Version 2.3.0-rc01

10. Juni 2020

androidx.navigation:navigation-*:2.3.0-rc01 wird veröffentlicht. Version 2.3.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Ein NullPointerException wurde behoben, das beim Ersetzen einer Instanz eines Ziels ohne Argumente durch eine andere Instanz mit Argumenten mit singleTop auftrat. (b/158006669)
  • Alle destination is unknown-Ausnahmen, die von NavController ausgelöst werden, enthalten jetzt zusätzliche Informationen zur Fehlerbehebung, mit denen der Status von NavController ermittelt werden kann. (b/157764916)

Version 2.3.0-beta01

20. Mai 2020

androidx.navigation:navigation-*:2.3.0-beta01 werden veröffentlicht. Version 2.3.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem die Lifecycle der NavBackStackEntry nach dem Beenden des Prozesses nicht richtig aktualisiert wurde. (b/155218371)
  • OnDestinationChangedListener-Instanzen, die vor dem Aufrufen von setGraph() registriert wurden, erhalten jetzt nach dem Beenden eines Prozesses das wiederhergestellte Ziel. (b/155218371)
  • Bei Verwendung von singleTop werden die Argumente von NavBackStackEntry jetzt korrekt aktualisiert und die aktualisierten Argumente werden an alle OnDestinationChangeListener-Instanzen gesendet. (b/156545508)

Abhängigkeitsupdates

Version 2.3.0-alpha06

29. April 2020

androidx.navigation:navigation-*:2.3.0-alpha06 wird veröffentlicht. Version 2.3.0-alpha06 enthält diese Commits.

Neue Funktionen

  • Deeplinks unterstützen jetzt neben app:uri auch app:action und app:mimeType. NavController unterstützt jetzt die Navigation anhand einer beliebigen Kombination dieser Felder über die neue Klasse NavDeepLinkRequest. (b/136573074, b/135334841)

API-Änderungen

  • Die Unterstützung für die Kotlin-DSL für dynamische Navigationsziele wurde erheblich erweitert. (b/148969800)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Deeplink-Intents ignoriert wurden, wenn ein verschachteltes Startziel verwendet wurde. (b/154532067)

Version 2.3.0-alpha05

15. April 2020

androidx.navigation:navigation-*:2.3.0-alpha05 wird veröffentlicht. Version 2.3.0-alpha05 enthält diese Commits.

Neue Funktionen

  • Für dynamische Grafikeinschlüsse mit <include-dynamic> müssen Sie app:graphPackage nicht mehr angeben. Es wird ein Standardwert verwendet, indem dem applicationId nach einem Punkt das Suffix moduleName hinzugefügt wird. Wenn Sie Ihre graphPackage anpassen müssen, wird jetzt ein ${applicationId}-Platzhalter unterstützt. (b/152696768)
  • Das Navigation Graph Kotlin DSL bietet jetzt eine defaultArguments Map für Aktionen, die der Möglichkeit entspricht, Standardwerte für <action>-Elemente in Navigations-XML-Dateien festzulegen. (b/150345605)

Fehlerkorrekturen

  • Ab Navigation 2.2.2: Ein IllegalStateException wurde behoben, das beim Deeplinking zum Startziel Ihres Diagramms auftrat, wenn Sie mehrere NavHostFragment-Instanzen in Ihrer Aktivität haben. (b/147378752)

Abhängigkeitsupdates

Version 2.3.0-alpha04

18. März 2020

androidx.navigation:navigation-*:2.3.0-alpha04 wird veröffentlicht. Version 2.3.0-alpha04 enthält diese Commits.

Neue Funktionen

  • Unterstützung für Aktivitäts- und Fragmentziele von Funktionsmodulen im Navigation Kotlin DSL hinzugefügt. (b/148969800)

API-Änderungen

  • Die Klasse DynamicExtras verwendet kein Builder-Muster mehr und kann jetzt direkt erstellt werden. (aosp/1253671)
  • DynamicActivityNavigator verwendet jetzt einen Context anstelle eines Activity in seinem Konstruktor. (aosp/1250252)

Fehlerkorrekturen

  • Bei NavigationUI werden leere Labels (d.h. ein Ziel mit android:label=””) nicht mehr ignoriert und der Titel wird jetzt korrekt auf einen leeren String gesetzt. (b/148679860)

Abhängigkeitsupdates

  • Die Artefakte für dynamische Navigationsfunktionen hängen jetzt von Play Core 1.6.5 ab. (b/149556401)

Version 2.3.0-alpha03

4. März 2020

androidx.navigation:navigation-*:2.3.0-alpha03 wird veröffentlicht. Version 2.3.0-alpha03 enthält diese Commits.

API-Änderungen

  • Anstatt sich auf die konkrete Klasse DrawerLayout zu verlassen, verwendet AppBarConfiguration jetzt die in CustomView 1.1.0-alpha02 eingeführte Schnittstelle Openable (die DrawerLayout ab DrawerLayout 1.1.0-alpha04 implementiert), sodass Sie benutzerdefinierte Implementierungen von Openable mit NavigationUI verwenden können. (b/129030452)

Fehlerkorrekturen

  • Die navigation-common-ktx-ProGuard-Regeln behalten jetzt nur noch die NavArgs-Klassen bei, die verwendet werden, und nicht mehr alle NavArgs-Instanzen. (b/150213558)

Änderungen an Abhängigkeiten

  • Die Navigation hängt nicht mehr von Core 1.2.0 ab, sondern von Core 1.1.0. So wird verhindert, dass Entwickler zu einer neueren Abhängigkeit wechseln müssen, wenn die Navigation nicht von neuen APIs in Core 1.2.0 abhängt.

Version 2.3.0-alpha02

19. Februar 2020

androidx.navigation:navigation-*:2.3.0-alpha02 wird veröffentlicht. Version 2.3.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Mit NavBackStackEntry können Sie jetzt auf ein SavedStateHandle zugreifen, das sich zum Speichern kleiner Mengen von gespeichertem Status eignet, der einem bestimmten Backstack-Eintrag zugeordnet werden soll. Einen Beispielanwendungsfall finden Sie unter Ergebnis zurückgeben. (b/79672220)

API-Änderungen

  • Es wurden Convenience-Methoden für getCurrentBackStackEntry() und getPreviousBackStackEntry() hinzugefügt, um das Abrufen eines NavBackStackEntry für die aktuellen und vorherigen Ziele zu vereinfachen. (b/79672220)

Fehlerkorrekturen

  • navigateUp() übergibt jetzt die Argumente des aktuellen Ziels und das KEY_DEEP_LINK_INTENT an das vorherige Ziel, wenn Ihre App in Ihrem eigenen Task-Stack gestartet wird. (b/147456890)

Änderungen an Abhängigkeiten

Version 2.3.0-alpha01

5. Februar 2020

androidx.navigation:navigation-*:2.3.0-alpha01 wird veröffentlicht. Version 2.3.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Das neue navigation-testing-Artefakt bietet eine TestNavHostController-Klasse. Diese Klasse bietet eine Alternative zur Verwendung eines Mock-NavController beim Testen der Navigation. Damit können Sie das aktuelle Ziel festlegen und den Backstack nach Navigationsvorgängen prüfen. (b/140884273)
  • Mit dem neuen navigation-dynamic-features-fragment (und seiner transitiven Abhängigkeit navigation-dynamic-features-runtime) können Sie Ziele oder ganze Navigationsdiagramme (über <include-dynamic>) aus Funktionsmodulen einfügen. So lassen sich On-Demand-Funktionsmodule nahtlos installieren, wenn zu diesen Zielen navigiert wird. Weitere Informationen finden Sie unter Mit Funktionsmodulen navigieren. (b/132170186)

Fehlerkorrekturen

  • Navigation 2.2.1: Bei Deeplinks ohne Abfrageparameter werden jetzt alle Abfrageparameter korrekt ignoriert, anstatt sie an nachfolgende {argument}-Elemente anzuhängen oder den Deeplink nicht abzugleichen. (b/147447512)
  • Über Navigation 2.2.1: Die navigation-ui ProGuard-Regeln für DrawerArrowDrawable wurden aktualisiert, damit android.enableJetifier=true nicht erforderlich ist. (b/147610424)
  • Über Navigation 2.2.1: Das Modul navigation-common-ktx hat jetzt einen eindeutigen Manifestpaketnamen und verwendet nicht mehr denselben Manifestpaketnamen wie navigation-runtime-ktx. (aosp/1141947)

Abhängigkeitsupdates

Version 2.2.2

Version 2.2.2

15. April 2020

androidx.navigation:navigation-*:2.2.2 werden veröffentlicht. Version 2.2.2 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein IllegalStateException behoben, der beim Deeplinking zum Startziel Ihres Diagramms auftrat, wenn Sie mehrere NavHostFragment-Instanzen in Ihrer Aktivität haben. (b/147378752)
  • Bei NavigationUI werden leere Labels (d.h. ein Ziel mit android:label=””) nicht mehr ignoriert und der Titel wird jetzt korrekt auf einen leeren String gesetzt. Diese Funktion wurde bereits in Navigation 2.3.0-alpha04 veröffentlicht. (b/148679860)
  • Die navigation-common-ktx-ProGuard-Regeln behalten jetzt nur noch die NavArgs-Klassen bei, die verwendet werden, und nicht mehr alle NavArgs-Instanzen. Diese Funktion wurde bereits in Navigation 2.3.0-alpha03 veröffentlicht. (b/150213558

Abhängigkeitsupdates

Version 2.2.1

Version 2.2.1

5. Februar 2020

androidx.navigation:navigation-*:2.2.1 wird veröffentlicht. Version 2.2.1 enthält diese Commits.

Fehlerkorrekturen

  • Bei Deeplinks ohne Abfrageparameter werden Abfrageparameter jetzt korrekt ignoriert, anstatt an nachfolgende {argument}-Elemente angehängt zu werden oder nicht mit dem Deeplink übereinzustimmen. (b/147447512)
  • Die navigation-ui-ProGuard-Regeln für DrawerArrowDrawable wurden aktualisiert, damit android.enableJetifier=true nicht erforderlich ist. (b/147610424)
  • Das Modul navigation-common-ktx hat jetzt einen eindeutigen Manifestpaketnamen und teilt sich nicht mehr denselben Manifestpaketnamen wie navigation-runtime-ktx. (aosp/1141947)

Abhängigkeitsupdates

Version 2.2.0

Version 2.2.0

22. Januar 2020

androidx.navigation:navigation-*:2.2.0 wird veröffentlicht. Version 2.2.0 enthält diese Commits.

Wichtige Änderungen seit Version 2.1.0

  • NavBackStackEntry: Sie können jetzt NavController.getBackStackEntry() aufrufen und die ID eines Ziels oder Navigationsdiagramms im Backstack übergeben. Das zurückgegebene NavBackStackEntry enthält ein navigationsbasiertes LifecycleOwner, ViewModelStoreOwner (dasselbe wie bei NavController.getViewModelStoreOwner()) und SavedStateRegistryOwner sowie die Argumente, die zum Starten des Ziels verwendet wurden.
  • Lifecycle ViewModel SavedState Integration: SavedStateViewModelFactory ist jetzt die Standard-Factory, die verwendet wird, wenn by navGraphViewModels() oder der ViewModelProvider-Konstruktor mit einem ViewModelStoreOwner verwendet wird, das von NavController.getBackStackEntry() oder NavController.getViewModelStoreOwner() zurückgegeben wird.
  • Unterstützung von Suchparametern für Deeplinks: Bei Deeplinks mit Suchparametern werden jetzt neu angeordnete Suchparameter unterstützt. Argumente mit einem Standardwert oder Nullable-Argumente sind jetzt optional, wenn Deeplinks abgeglichen werden.
  • Verbesserte Unterstützung von Animationen: NavHostFragment verwendet jetzt FragmentContainerView aus Fragment 1.2.0. Dadurch werden Probleme mit der Z-Reihenfolge von Animationen und dem Senden von Window Insets an Fragmente behoben.

Version 2.2.0-rc04

18. Dezember 2019

androidx.navigation:navigation-*:2.2.0-rc04 wird veröffentlicht. Version 2.2.0-rc04 enthält diese Commits.

Fehlerkorrekturen

  • Die von navigation-ui verwendeten Standard-Ein- und Ausblendanimationen wurden an die angepassten Ein- und Ausblendanimationen in Fragment 1.2.0-rc04 angepasst. (b/145769814)

Version 2.2.0-rc03

4. Dezember 2019

androidx.navigation:navigation-*:2.2.0-rc03 wird veröffentlicht. Version 2.2.0-rc03 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Problem mit dem Parsen von Deeplinks behoben, wenn Abfrageparameter und ein Argument als letzter Teil des Pfads verwendet wurden. Dadurch konnte mehr als ein Zeichen des finalen Pfadarguments nicht geparst werden. (b/144554689)
  • Ein Problem beim Parsen von Deeplinks wurde behoben, bei dem optionale Parameter "@null" anstelle von null erhielten. (b/141613546)
  • Mit NavHostFragment wird der Graph jetzt nach einer Konfigurationsänderung in Kombination mit FragmentContainerView korrekt wiederhergestellt. (b/143752103)

Änderungen an Abhängigkeiten

  • Die Navigation hängt jetzt von Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03, Activity 1.1.0-rc03 und Fragment 1.2.0-rc03 ab, sofern zutreffend.

Version 2.2.0-rc02

7. November 2019

androidx.navigation:navigation-*:2.2.0-rc02 wird veröffentlicht. Version 2.2.0-rc02 enthält diese Commits.

Änderungen an Abhängigkeiten

  • Die Navigation hängt jetzt von androidx.lifecycle 2.2.0-rc02 ab.

Version 2.2.0-rc01

23. Oktober 2019

androidx.navigation:navigation-*:2.2.0-rc01 wird ohne Änderungen seit 2.2.0-beta01 veröffentlicht. Version 2.2.0-rc01 enthält diese Commits.

Version 2.2.0-beta01

9. Oktober 2019

androidx.navigation:navigation-*:2.2.0-beta01 wird veröffentlicht. Version 2.2.0-beta01 enthält diese Commits.

Neue Funktionen

  • NavDestination und seine Unterklassen überschreiben jetzt toString(), um beim Debuggen hilfreichere Informationen bereitzustellen. (b/141264986)

Geändertes Verhalten

  • Zusätzliche Suchparameter werden jetzt beim Abgleich von Deeplinks ignoriert, anstatt dazu zu führen, dass der Abgleich fehlschlägt. (b/141482822)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Argumente im Pfad eines Deeplinks ignoriert wurden, wenn auch Abfrageparameter angegeben waren. (b/141505755)
  • Die navArgs()-Kotlin-Erweiterung für Activity hat jetzt eine bessere Fehlermeldung, wenn keine Extras vorhanden sind. (b/141408999)
  • Die von Safe Args generierten Directions-Java-Klassen enthalten jetzt Standardwerte. (b/141099045)
  • Die von Safe Args generierten Args-Java-Klassen enthalten jetzt Standardwerte. (b/140123727)
  • Wenn Sie Toolbar verwenden, wird der Textwechsel beim Wechsel zwischen zwei Zielen der obersten Ebene nicht mehr animiert.NavigationUI (b/140848160)

Version 2.2.0-alpha03

18. September 2019

androidx.navigation:navigation-*:2.2.0-alpha03 wird veröffentlicht. Version 2.2.0-alpha03 enthält diese Commits.

Geändertes Verhalten

  • Wenn Sie setViewModelStore() nach dem Aufrufen von setGraph aufrufen, wird jetzt ein IllegalStateException zurückgegeben. Dies sollte immer von NavHost im Rahmen der Ersteinrichtung festgelegt werden, damit alle NavBackStackEntry-Instanzen einen konsistenten Speicher für ViewModel-Instanzen haben. (aosp/1111821)

Fehlerkorrekturen

  • Ein ConcurrentModificationException wurde behoben, das bei der Verwendung von ViewModel-Instanzen aufgetreten ist, die an mehrere verschiedene ViewModelStore-Instanzen mit Navigationsgraph-Bereich angehängt sind. (aosp/1112257)

Version 2.2.0-alpha02

5. September 2019

androidx.navigation:navigation-*:2.2.0-alpha02 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • Bei Deeplinks mit Abfrageparametern werden jetzt neu angeordnete Abfrageparameter unterstützt. Argumente mit einem Standardwert oder mit dem Wert „nullable“ sind jetzt optional, wenn Deeplinks abgeglichen werden. (b/133273839)
  • Sie können jetzt NavController.getBackStackEntry() aufrufen und die ID eines Ziel- oder Navigationsdiagramms im Backstack übergeben. Das zurückgegebene NavBackStackEntry enthält ein navigationsbasiertes LifecycleOwner, ViewModelStoreOwner (dasselbe wie bei NavController.getViewModelStoreOwner()) und SavedStateRegistryOwner sowie die Argumente, die zum Starten des Ziels verwendet wurden. (aosp/1101691, aosp/1101710)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem das Hinzufügen einer NavHostFragment zu ViewPager2 mit einem IllegalArgumentException fehlgeschlagen ist. (b/133640271)
  • NavInflater ruft getResourceName() jetzt nicht mehr unnötig auf, wodurch sich die Inflationszeit um bis zu 40 % verkürzt. (b/139213740)

Version 2.2.0-alpha01

7. August 2019

androidx.navigation:navigation-*:2.2.0-alpha01 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • SavedStateViewModelFactory ist jetzt die Standard-Factory, die verwendet wird, wenn by navGraphViewModels() oder der ViewModelProvider-Konstruktor mit einem von NavController.getViewModelStoreOwner() zurückgegebenen ViewModelStoreOwner verwendet wird. (b/135716331)

API-Änderungen

Fehlerkorrekturen

  • NavHostFragment verwendet jetzt FragmentContainerView. Dadurch werden Probleme mit der Z-Reihenfolge von Animationen und dem Senden von Window Insets an Fragmente behoben. (b/137310379)

Version 2.1.0

Version 2.1.0

5. September 2019

androidx.navigation:navigation-*:2.1.0 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Wichtige Änderungen seit Version 2.0.0

  • ViewModels auf einen Navigationsgraphen beschränken: Sie können jetzt ViewModels erstellen, die auf Navigationsebenenebene beschränkt sind. Verwenden Sie dazu das Attributdelegat by navGraphViewModels() für Kotlin-Nutzer, die die -ktx-Bibliotheken verwenden, oder die getViewModelStoreOwner()-API, die NavController hinzugefügt wurde. Weitere Informationen finden Sie unter UI-bezogene Daten zwischen Zielen freigeben.
  • Dialogziele: Sie können jetzt <dialog>-Ziele erstellen, für die beim navigate ein DialogFragment angezeigt wird. NavHostFragment unterstützt standardmäßig Dialogziele. Weitere Informationen finden Sie unter Ziel aus einem DialogFragment erstellen.
  • Navigation per URI: Sie können jetzt navigate, indem Sie einen Uri verwenden, der die <deepLink> nutzt, die Sie einem Ziel hinzugefügt haben, um dorthin zu navigieren. Weitere Informationen finden Sie unter Mit URI navigieren.
  • NavHostController: APIs, die speziell zum Erstellen eines benutzerdefinierten NavHost verwendet werden, wurden zu NavHostController verschoben. Dadurch können Implementierungen ihr NavController mit dem Hosting-LifecycleOwner, OnBackPressedDispatcher und ViewModelStore verbinden.

Version 2.1.0-rc01

7. August 2019

androidx.navigation:navigation-*:2.1.0-rc01 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • Die eingestellte getViewModelStore() API auf NavController, die in 2.1.0-alpha02 eingeführt wurde, wurde entfernt. (aosp/1091021)

Version 2.1.0-beta02

19. Juli 2019

androidx.navigation:*:2.1.0-beta02 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Fehlerkorrekturen

  • Die unbeabsichtigte Jacoco-Abhängigkeit, die in 2.1.0-beta01 eingeführt wurde, wurde entfernt. (b/137782950)

Version 2.1.0-beta01

17. Juli 2019

androidx.navigation:*:2.1.0-beta01 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • Bei Verwendung von setupWithNavController() mit einem Toolbar oder CollapsingToolbarLayout wird das Entfernen der Schaltfläche „Nach oben“ jetzt animiert.NavigationUI (b/131403621)

Fehlerkorrekturen

  • Ein Timing-Problem wurde behoben, das beim Verwenden mehrerer NavHostFragments mit demselben Container mit findNavController() auftrat. (b/136021571)

Version 2.1.0-alpha06

2. Juli 2019

androidx.navigation:*:2.1.0-alpha06 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • Das von NavHostFragment verwendete Attribut app:navGraph wurde in das Artefakt navigation-runtime verschoben. Benutzerdefinierte Navigatoren, die über XML hinzugefügt werden können, sollten dieses Attribut verwenden, um in das Host-Panel des Navigationseditors eingebunden zu werden. (b/133880955)

API-Änderungen

  • Die getViewModelStore() API auf NavController wurde zugunsten der neuen Methode getViewModelStoreOwner() eingestellt, die ein ViewModelStoreOwner zurückgibt. (aosp/987010)
  • Die Implementierung von Zielen mit gleitendem Fenster, z. B. <dialog>-Zielen, wurde in eine Markierungsschnittstelle, FloatingWindow, verallgemeinert, die jetzt von allen <dialog>-Zielen implementiert wird. NavigationUI-Methoden für die Interaktion mit der oberen App-Leiste ignorieren jetzt FloatingWindow-Ziele. (b/133600763)

Geändertes Verhalten

  • Die Navigation synchronisiert ihren Status jetzt korrekt mit dem, was auf dem Bildschirm zu sehen ist, wenn ein <dialog>-Ziel verwendet wird. Daher werden in der Navigation jetzt automatisch <dialog>-Ziele angezeigt, wenn Sie zu einem Ziel navigieren, das kein Dialogfeld und keine Aktivität ist, z. B. ein <fragment>-Ziel. (b/134089818)

Fehlerkorrekturen

  • Bei der Verarbeitung eines Deeplinks wird die Animation, die beim Neuerstellen der Aktivität auftritt, jetzt unterdrückt. Dadurch wird ein visueller Blitz behoben. (b/130362979)
  • Ein Fehler wurde behoben, durch den der Backstack der Navigation nicht synchronisiert wurde, wenn ein Fragment entfernt wurde, während das erste Fragment hinzugefügt wurde. (b/133832218)

Version 2.1.0-alpha05

5. Juni 2019

androidx.navigation:*:2.1.0-alpha05 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • Hostbezogene APIs auf NavController wurden umbenannt und in eine neue Unterklasse von NavController, NavHostController, verschoben. (aosp/966091)
  • Die Methode NavController setHostOnBackPressedDispatcherOwner() wurde durch die Methode NavHostController setOnBackPressedDispatcher() ersetzt. Sie müssen jetzt setLifecycleOwner() aufrufen, bevor Sie sie aufrufen. (aosp/965409)
  • NavHostController enthält jetzt eine enableOnBackPressed(boolean)-Methode, die die NavHostOnBackPressedManager-Klasse ersetzt, die zuvor von setHostOnBackPressedDispatcherOwner() zurückgegeben wurde. (aosp/966091)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem der Backstack nach der Navigation per URI nicht korrekt war. (b/132509387)
  • Deeplinks, die automatisch von NavController verarbeitet werden, werden jetzt nur noch einmal ausgelöst. (b/132754763)

Version 2.1.0-alpha04

16. Mai 2019

androidx.navigation:*:2.1.0-alpha04 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Fehlerkorrekturen

  • NavHostFragment berücksichtigt app:defaultNavHost beim Abfangen der Systemereignisse für die Zurück-Schaltfläche korrekt. Damit wird ein Regressionsfehler in Navigation 2.1.0-alpha03 behoben. b/132077777
  • DialogFragmentNavigator verarbeitet jetzt popBackStack()- und navigateUp()-Vorgänge korrekt. b/132576764
  • Ein Problem mit IllegalStateException: unknown destination during restore wurde behoben, das beim wiederholten Wechsel zwischen verschachtelten Diagrammen aufgetreten ist. b/131733658

Version 2.1.0-alpha03

7. Mai 2019

androidx.navigation:*:2.1.0-alpha03 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Bekannte Probleme

  • NavHostFragment fängt weiterhin die System-Zurück-Taste ab, obwohl app:defaultNavHost="false" verwendet wird. b/132077777

Neue Funktionen

  • Sie können jetzt <dialog>-Ziele erstellen, die beim navigate zu ihnen ein DialogFragment anzeigen. NavHostFragment unterstützt standardmäßig Dialogziele. b/80267254
  • Zusätzlich zum Aufrufen von navigate mit einer Ressourcen-ID oder einer NavDirections-Instanz können Sie jetzt über einen Uri navigieren, der die <deepLink> verwendet, die Sie einem Ziel hinzugefügt haben, um zum richtigen Ziel zu navigieren. b/110412864

Geändertes Verhalten

  • Die von NavigationUI bereitgestellten Standardanimationen wurden von 400 ms auf 220 ms beschleunigt, um der Standardanimationsgeschwindigkeit von Aktivitäten und Fragmenten zu entsprechen. b/130055522

API-Änderungen

  • Die createFragmentNavigator()-Methode von NavHostFragment wurde eingestellt und ihre Funktionalität in die neue onCreateNavController()-Methode verschoben, um deutlicher zu machen, dass dies der richtige Einstiegspunkt zum Hinzufügen benutzerdefinierter Navigatoren beim Erstellen von Unterklassen von NavHostFragment ist. b/122802849
  • Der Klasse NavDestination wurde die Methode hasDeepLink() hinzugefügt, mit der Sie prüfen können, ob ein bestimmtes Uri von diesem Ziel oder im Fall eines NavGraph von einem beliebigen Ziel im Navigationsdiagramm verarbeitet werden kann. b/117437718

Fehlerkorrekturen

  • Standardargumente werden jetzt korrekt an OnDestinationChangedListener-Instanzen übergeben. b/130630686
  • NavHostFragment fängt jetzt System-Zurück-Ereignisse mit OnBackPressedDispatcher ab. Dadurch wird ein Problem behoben, das bei der bedingten Navigation in Fragment-Lifecycle-Methoden beim Zurückkehren zu einem Fragment aufgetreten ist. b/111598096
  • Bei Safe Args wird ein android:defaultValue=”@null” mit einem nicht angegebenen app:argType jetzt korrekt als string-Argument abgeleitet. b/129629192

Version 2.1.0-alpha02

3. April 2019

androidx.navigation:*:2.1.0-alpha02 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • Sie können jetzt ViewModels erstellen, die auf Navigationsgraphebene festgelegt sind. Verwenden Sie dazu den by navGraphViewModels()-Eigenschafts-Delegate für Kotlin-Nutzer oder die getViewModelStore()-API, die NavController hinzugefügt wurde. b/111614463

API-Änderungen

  • Sie können jetzt einem <activity>-Ziel ein app:targetPackage hinzufügen, um den übereinstimmenden Paketnamen einzuschränken. Es wird app:targetPackage="${applicationId}" unterstützt, um das Paket auf Ihre eigene Anwendungs-ID zu beschränken. b/110975456

Fehlerkorrekturen

  • Der android:name für <activity>-Ziele wird bei der Inflation nicht mehr in eine Klasse geparst. Dadurch werden ClassNotFoundExceptions bei der Verwendung dynamischer Funktionen verhindert. b/124538597

Version 2.1.0-alpha01

19. März 2019

Dies ist der erste Alpharelease von Navigation 2.1.0.

Änderungen an Abhängigkeiten

  • Die Navigation hängt jetzt von androidx.core:core:1.0.1 und androidx.fragment:fragment:1.1.0-alpha05 ab. In dieser Version wurde auch die Abhängigkeit von androidx.legacy:legacy-support-core-utils:1.0.0 entfernt. b/128632612

API-Änderungen

  • Es wurde eine neue Navigation.createNavigateOnClickListener(NavDirections)-Methode als Alternative zum Erstellen eines Click-Listeners mit einer Ressourcen-ID und einem Bundle hinzugefügt. b/127631752
  • FragmentNavigator.instantiateFragment wurde eingestellt. In der Standardimplementierung wird jetzt FragmentFactory verwendet, um Fragmente zu instanziieren. b/119054429

Fehlerkorrekturen

  • Bei der Navigation wird kein Null-Bundle mehr gesendet, wenn Argumente an ein Ziel angehängt sind. Dadurch wird ein Problem bei der Verwendung von android:defaultValue="@null" behoben. b/128531879
  • Safe Args hängt jetzt von KotlinPoet 1.1.0 ab. Damit wird ein Problem mit sehr langen Paketnamen behoben. b/123654948

Version 2.0.0

Version 2.0.0

14. März 2019

Die Navigation 2.0.0 wird ohne Änderungen gegenüber 2.0.0-rc02 veröffentlicht.

Version 2.0.0-rc02

6. März 2019

Navigation 2.0.0-rc02 bietet neue Artefakte mit der Gruppen-ID androidx.navigation und ändert die Abhängigkeiten in die AndroidX-Entsprechungen.

Das Verhalten von Version 2.0.0-rc02 ist identisch mit dem Verhalten von Navigation 1.0.0-rc02. Für das Update von Version 1.0.0-rc02 sind keine Änderungen an Ihrem Code erforderlich. Sie müssen lediglich Ihre Abhängigkeiten an die neuen Abhängigkeiten anpassen.

Ihr Projekt muss zu AndroidX migriert sein, damit Sie 2.X-Releases von Navigation verwenden können. Navigation 1.0 (stabil) ist der letzte Release, in dem Support Library-Abhängigkeiten verwendet werden. Alle zukünftigen Entwicklungen nach Version 1.0 basieren auf AndroidX und bauen auf dem stabilen Release 2.0 auf.

Abhängigkeiten vor AndroidX

Für die Pre-AndroidX-Versionen von Navigation müssen Sie diese Abhängigkeiten einfügen:

dependencies {
    def nav_version = "1.0.0"

    implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
    implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}

Fügen Sie für Safe Args den folgenden Classpath in die build.gradle-Datei auf oberster Ebene ein:

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
    }
}

Version 1.0.0

Version 1.0.0

14. März 2019

Die Navigation 1.0.0 wird ohne Änderungen gegenüber 1.0.0-rc02 veröffentlicht.

Version 1.0.0-rc02

26. Februar 2019

Dies ist der zweite Release-Kandidat für die stabile Version 1.0.0 von Navigation. Diese Version enthält eine Reihe von Fehlerkorrekturen.

Fehlerkorrekturen

  • Das Problem wurde behoben, dass popBackStack() ignoriert wurde, wenn der Stammgraph keine ID hatte. b/126251695
  • navigateUp() verarbeitet jetzt das Zurückkehren zum Task Ihrer App korrekt, wenn es nach der Verarbeitung eines Deeplinks ohne FLAG_ACTIVITY_NEW_TASK aufgerufen wird. b/126082008
  • Ein Problem wurde behoben, bei dem mit ActivityNavigator.applyPopAnimationsToPendingTransition nicht die richtige Pop-out-Animation angewendet wurde. b/126237567
  • In von Safe Args generiertem Kotlin-Code werden Kotlin-Schlüsselwörter wie in und fun im Paketnamen, der mit der Klasse R verknüpft ist, jetzt richtig maskiert. b/126020455

Version 1.0.0-rc01

21. Februar 2019

Dies ist ein Release-Kandidat für die stabile Version 1.0.0 von Navigation. Diese Version enthält eine Fehlerkorrektur.

Fehlerkorrekturen

  • Ein Problem bei der Verwendung von Fragmenten und singleTop-Navigationsvorgängen wurde behoben. b/124294805

Version 1.0.0-beta02

12. Februar 2019

Diese Version umfasst eine Reihe kleinerer Verbesserungen und wichtiger Fehlerbehebungen.

Neue Funktionen

  • Sie können 0 jetzt als android:defaultValue für reference-Argumente verwenden. b/124248602

Geändertes Verhalten

  • Genaue Deeplink-Übereinstimmungen werden jetzt gegenüber Deeplinks mit .*- oder Argumentübereinstimmungen priorisiert. b/123969518

Fehlerkorrekturen

  • popBackStack() und navigateUp geben jetzt korrekt false zurück, wenn das letzte Ziel im Backstack entfernt wird. Damit wird ein Fehler behoben, der in 1.0.0-beta01 eingeführt wurde. b/123933201
  • Bei der Wiederherstellung des gespeicherten Instanzstatus wird jetzt korrekt ClassLoader für die Navigation festgelegt. So werden Probleme bei der Verwendung benutzerdefinierter Klassen im gespeicherten Status von Navigator oder in Argumenten, die an ein NavDestination gesendet werden, vermieden. b/123893858
  • Von Safe Args generierte NavArgs-Klassen stürzen nicht mehr ab, wenn ein Parcelable[]-Argument aus dem gespeicherten Instanzstatus wiederhergestellt wird. b/123963545
  • Mit Safe Args werden jetzt unnötige generierte Kotlin-Klassen ordnungsgemäß bereinigt. b/124120883

Version 1.0.0-beta01

4. Februar 2019

Dies ist die erste Betaversion der Navigation. Die Navigation API wird voraussichtlich bis zur nächsten Version stabil bleiben, sofern kein schwerwiegendes Problem auftritt. Diese Version enthält einige Fehlerkorrekturen und Verhaltensänderungen.

Geändertes Verhalten

  • Bei der Navigation werden Argumentstandardwerte jetzt zur Laufzeit und über Safe Args identisch behandelt. Daher können nur Argumente mit einem app:argType="reference" einen Standardwert haben, der auf eine andere Ressource verweist (z. B. @color/colorPrimary). Wenn Sie versuchen, einen Standardwert mit einem Verweis mit einem anderen app:argType zu verwenden, wird beim Parsen des Navigations-XML eine Ausnahme ausgelöst. b/123551990
  • Safe Args hängt jetzt vom Android-Gradle-Plug-in 3.3.0 ab. aosp/888413
  • Safe Args ist jetzt von Kotlin 1.3.20 abhängig. aosp/888414

Fehlerkorrekturen

  • Safe Args kann jetzt in Bibliotheks- und Funktionsmodulen für alle Versionen des Android Gradle-Plug-ins verwendet werden. b/121304903
  • Es wurde ein Regressionsfehler behoben, der dazu führte, dass bei einem einzelnen popBackStack()-Vorgang alle Kopien eines Ziels vom Anfang des Backstacks entfernt wurden, anstatt nur jeweils ein einzelnes Ziel. b/123552990
  • Ein Problem wurde behoben, bei dem der Status FragmentNavigator mit dem Status von NavController synchronisiert wurde, was beim Versuch, den Backstack wiederherzustellen, zu einem IllegalStateException führte. b/123803044
  • Ein Problem wurde behoben, bei dem der von NavigationUI verarbeitete Zurück-Pfeil bei Verwendung von ProGuard mit Verschleierung nicht angezeigt wurde. b/123449431
  • Der von Safe Args generierte Code verarbeitet jetzt die Verwendung von app:argType, die auf eine statische innere Klasse im Format .OuterClass$InnerClass verweist, korrekt. b/123736741
  • Der von Safe Args generierte Java-Code verarbeitet jetzt globale Aktionen und tief verschachtelte Ziele richtig. b/123347762

Version 1.0.0-alpha11

23. Januar 2019

Dies ist ein Hotfix-Release von 1.0.0-alpha10, in dem ein Problem mit Safe Args behoben wird.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem Safe Args die mit globalen Aktionen verknüpfte Directions-Klasse nicht importieren konnte. b/123307342

Version 1.0.0-alpha10

23. Januar 2019

Bekannte Probleme

  • Safe Args kann die Directions-Klasse, die globalen Aktionen zugeordnet ist, nicht importieren. b/123307342

Diese Version enthält nicht abwärtskompatible API-Änderungen. Weitere Informationen finden Sie unten im Abschnitt Nicht abwärtskompatible Änderungen.

Neue Funktionen

  • Kotlin-Nutzer können jetzt den by navArgs()-Property-Delegate verwenden, um verzögert eine Referenz auf eine von Safe Args generierte NavArgs-Klasse in einem Activity oder Fragment abzurufen. b/122603367
  • Mit Safe Args können Sie jetzt Kotlin-Code generieren, indem Sie das androidx.navigation.safeargs.kotlin-Plug-in anwenden. Der Kotlin-Code wird speziell für Module erstellt, die nur Kotlin verwenden. Dabei werden Standardargumente und unveränderliche Klassen anstelle des Builder-Musters verwendet, das weiterhin über das vorherige androidx.navigation.safeargs-Plugin verfügbar ist. b/110263087

Geändertes Verhalten

  • Übereinstimmende Deeplinks werden jetzt auf den Deeplink mit den meisten übereinstimmenden Argumenten ausgerichtet. b/118393029
  • Wenn Sie setGraph() auf einem NavController aufrufen, wird der Backstack jetzt zurückgesetzt. b/111450672
  • Unbekannte Deeplinks führen nicht mehr zu einem IllegalStateException, sondern werden ignoriert. Dadurch werden Probleme mit verschachtelten oder mehreren NavHostFragments behoben. b/121340440

Aktuelle Änderungen

  • Die NavOptions.applyPopAnimationsToPendingTransition()-Methode zum Anwenden von Pop-Animationen auf eine Aktivität wurde zu ActivityNavigator verschoben. b/122413117
  • Mit Safe Args wird jetzt vermieden, dass identische Klassen für Aktionen ohne Argumente dupliziert werden. Der Rückgabetyp für Methoden ohne Argumente in generierten NavDirections-Klassen ist jetzt NavDirections. b/123233147
  • Die von Safe Args generierten Directions-Klassen haben keinen öffentlichen Konstruktor mehr. Sie sollten nur mit den generierten statischen Methoden interagieren. b/123031660
  • Die von Safe Args generierten NavDirections-Klassen haben keinen öffentlichen Konstruktor mehr. Sie sollten nur über die statischen Methoden in den generierten Directions-Klassen generiert werden. b/122963206
  • Die zurückgegebene Bundle aus NavDirections' getArguments() ist jetzt als @NonNull anstatt als @Nullable gekennzeichnet. b/123243957

Fehlerkorrekturen

  • In NavDeepLinkBuilder werden jetzt mehrere gleichzeitige PendingIntents an dasselbe Ziel korrekt verarbeitet. Die Eindeutigkeit wird anhand der übergebenen Argumente bestimmt. b/120042732
  • NavController verarbeitet jetzt popBackStack()-Vorgänge korrekt, wenn ein verschachteltes NavHostFragment oder andere untergeordnete Fragmente mit einem Backstack verwendet werden. b/122770335
  • NavigationUI legt jetzt die Inhaltsbeschreibung der Schaltfläche „Nach oben“ korrekt fest. b/120395362
  • Die von Safe Args generierten Directions-Klassen verarbeiten jetzt globale Aktionen, die dieselbe ID wie eine Aktion für ein Ziel haben, korrekt. b/122962504
  • Die generierten NavDirections-Klassen von Safe Args haben jetzt korrekt gleiche hashCode()-Werte, wenn equals() „true“ zurückgeben würde. b/123043662
  • FragmentNavigator gibt jetzt eine bessere Fehlermeldung aus, wenn Sie versuchen, benutzerdefinierte FragmentTransactions für die NavHostFragment-FragmentManager zu erstellen. Sie sollten immer getChildFragmentManager() verwenden. b/112927148

Version 1.0.0-alpha09

18. Dezember 2018

Diese Version enthält nicht abwärtskompatible API-Änderungen. Weitere Informationen finden Sie unten im Abschnitt Nicht abwärtskompatible Änderungen.

Wir haben uns entschieden, die Entwicklung des Artefakts android.arch.navigation:navigation-testing nicht fortzusetzen. Obwohl sich diese Methode für interne Tests von NavController bewährt hat, empfehlen wir dringend alternative Teststrategien, z. B. das Simulieren der NavController-Instanz, um zu prüfen, ob die richtigen navigate()-Aufrufe erfolgen. Dieser Ansatz wird im Vortrag zum Thema „Single Activity“ auf dem AndroidDevSummit 2018 ausführlich behandelt. Wir arbeiten an zusätzlicher Dokumentation speziell zum Testen mit Navigation.

Neue Funktionen

  • MenuItems mit menuCategory="secondary" werden bei Verwendung mit NavigationUI-Methoden nicht mehr aus dem Backstack entfernt. b/120104424
  • Mit AppBarConfiguration können Sie jetzt eine Fallback-OnNavigateUpListener-Instanz festlegen, die aufgerufen wird, wenn navController.navigateUp() false zurückgibt. b/79993862 b/120690961

Aktuelle Änderungen

  • Wenn Sie ein <argument> mit einem argType="reference" verwenden, wird die Referenz nicht mehr von Navigation geparst, sondern die Rohressourcen-ID selbst wird bereitgestellt. b/111736515
  • onNavDestinationSelected() kehrt jetzt standardmäßig zum Startziel Ihres Navigationsdiagramms zurück. Dadurch sind sie mit den setup-Methoden konsistent. Fügen Sie menuCategory="secondary" zu Ihrem MenuItem hinzu, um zu vermeiden, dass der Backstack geleert wird. aosp/852869
  • Die fromBundle()-Methoden der generierten Args-Klassen akzeptieren jetzt ein nicht leeres Bundle anstelle eines nullable Bundle. aosp/845616

Fehlerkorrekturen

  • Argumente werden jetzt korrekt aus Deeplinks geparst, als der richtige argType anstatt immer als Strings. b/110273284
  • Die Navigation exportiert jetzt ihre öffentlichen Ressourcen korrekt. b/121059552
  • „Safe Args“ ist jetzt mit dem Android-Gradle-Plug-in 3.4 Canary 4 und höher kompatibel. b/119662045

Version 1.0.0-alpha08

6. Dezember 2018

Diese Version enthält nicht abwärtskompatible API-Änderungen. Weitere Informationen finden Sie unten im Abschnitt Nicht abwärtskompatible Änderungen.

Neue Funktionen

  • Wenn Ziel-Labels mit NavigationUI-Methoden verwendet werden, werden {argName}-Instanzen in Ihrem android:label jetzt automatisch durch das richtige Argument ersetzt. b/80267266
  • Die Navigation hängt jetzt von der Support Library 28.0.0 ab. b/120293333

Aktuelle Änderungen

  • OnNavigatedListener wurde in OnDestinationChangedListener umbenannt. b/118670572
  • OnDestinationChangedListener übergibt jetzt auch die Bundle der Argumente. aosp/837142
  • Die Attribute app:clearTask und app:launchDocument sowie die zugehörigen Methoden wurden entfernt. Verwenden Sie app:popUpTo mit dem Stamm Ihres Diagramms, um alle Ziele aus dem Backstack zu entfernen. b/119628354
  • ActivityNavigator.Extras verwendet jetzt ein Builder-Muster und bietet die Möglichkeit, beliebige Intent.FLAG_ACTIVITY_-Flags festzulegen. aosp/828140
  • NavController.onHandleDeepLink wurde in handleDeepLink umbenannt. aosp/836063
  • Viele Klassen und Methoden, die nicht für die Unterklasse vorgesehen sind, z. B. NavOptions, NavInflater, NavDeepLinkBuilder und AppBarConfiguration, wurden zu final geändert. aosp/835681
  • Die eingestellte Methode NavHostFragment.setGraph() wurde entfernt. aosp/835684
  • Die verworfene Methode NavigationUI.navigateUp(DrawerLayout, NavController) wurde entfernt. aosp/835684
  • Die Fragmenterstellung wurde zu FragmentNavigator verschoben, sodass sie einfacher an ein FragmentFactory delegiert werden kann. b/119054429
  • Der Konstruktor für NavGraphNavigator akzeptiert kein Context mehr. aosp/835340
  • NavigatorProvider ist jetzt eine Klasse und keine Schnittstelle mehr. Die von getNavigatorProvider() zurückgegebene NavigatorProvider hat sich in ihrer Funktionalität nicht geändert. aosp/830660
  • NavDestination.navigate() wurde entfernt. Rufe stattdessen navigate() im Navigator auf. aosp/830663
  • Navigator wurde erheblich umgestaltet, sodass OnNavigatorNavigatedListener nicht mehr erforderlich ist. Stattdessen gibt navigate das NavDestination zurück, zu dem navigiert wurde.
  • Navigator-Instanzen können keine Pop-Ereignisse mehr an die NavController senden. Verwenden Sie ein OnBackPressedCallback, um das Drücken der Zurück-Taste abzufangen und navController.popBackStack() aufzurufen. aosp/833716

Fehlerkorrekturen

  • popUpTo funktioniert jetzt einheitlich, wenn das Ziel ein <navigation>-Element ist. b/116831650
  • Es wurden mehrere Fehler behoben, die bei Verwendung verschachtelter Grafiken zu einem IllegalArgumentException geführt haben. b/118713731 b/113611083 b/113346925 b/113305559
  • Das Attribut dataPattern von <activity>-Zielen füllt jetzt Argumente aus Nicht-String-Argumenten durch Aufrufen von toString(). b/120161365

Safe Args

  • Safe Args unterstützt serialisierbare Objekte, einschließlich Enum-Werten. Für Enum-Typen kann ein Standardwert festgelegt werden, indem das Enum-Literal ohne den Klassennamen verwendet wird (z. B. app:defaultValue="READ"). b/111316353
  • Safe Args unterstützt Arrays aller unterstützten Typen b/111487504
  • Safe Args ignoriert jetzt Unterordner von Ressourcenverzeichnissen. b/117893516
  • Safe Args fügt bei Bedarf @Override-Annotationen hinzu. b/117145301

Version 1.0.0-alpha07

29. Oktober 2018

Neue Funktionen

Aktuelle Änderungen

  • Das Modul navigation-testing-ktx wurde in navigation-testing artifact integriert und wird nicht mehr veröffentlicht.
  • Das navigation-testing-Artefakt hat jetzt eine Abhängigkeit von der Kotlin-Standardbibliothek. Die API wurde geändert, um sie besser an die Kotlin-Konventionen anzupassen. Sie können sie aber weiterhin für Tests verwenden, die in Java geschrieben wurden.
  • Im Metadatenmanifest registrierte Navigationsdiagramme werden nicht mehr unterstützt. b/118355937
  • Aktionen können nicht mehr an <activity>-Ziele angehängt werden. aosp/785539

Fehlerkorrekturen

  • Abfrageparameter werden jetzt in Deeplinks korrekt geparst. b/110057514
  • Bei Aktivitätszielen werden jetzt alle Ein- und Ausblendanimationen korrekt angewendet. b/117145284
  • Ein Absturz nach Konfigurationsänderungen bei Verwendung benutzerdefinierter Navigatoren wurde behoben. b/110763345

Safe Args

  • Safe Args haben jetzt eine feste Abhängigkeit vom Android-Gradle-Plug-in 3.2.1. b/113167627
  • Wegbeschreibungen können jetzt für innere Klassen generiert werden. b/117407555
  • Das Problem beim Generieren von Wegbeschreibungen für ein <include>-Diagramm wurde behoben. b/116542123

Version 1.0.0-alpha06

20. September 2018

Neue Funktionen

API-Änderungen

  • Funktionsgefährdende Änderung:Die Navigator-Methode navigate() verwendet jetzt einen Navigator.Extras-Parameter.
  • Die Methode getGraph() von NavController ist jetzt NonNull. b/112243286

Fehlerkorrekturen

  • NavigationUI.setupWithNavController() Bei Verwendung mit Ansichten aus einzelnen Zielen werden keine Ansichten mehr offengelegt. b/111961977
  • Navigator onSaveState() wird jetzt nur noch einmal aufgerufen b/112627079

Safe Args

  • Die Klassen für Navigationsziele erben jetzt die Directions-Klasse des übergeordneten Elements, sofern vorhanden. b/79871405
  • Die Klassen „Directions“ und „Args“ haben jetzt eine nützliche toString()-Implementierung b/111843389.

Version 1.0.0-alpha05

10. August 2018

Fehlerkorrekturen

  • Ein Fehler wurde behoben, der zu einem falschen Verhalten des Backstacks führte. b/111907708
  • Fehlerkorrektur für equals() der Generated Args-Klassen. b/111450897
  • Fehler beim Build in Safe Args behoben. b/109409713
  • Fehler bei der Konvertierung von Ressourcen-IDs in Java-Namen behoben b/111602491
  • Fehlermeldungen zur Nullable-Annotation im Safe Args-Plug-in beheben
  • Fehlende Anmerkungen zur Null-Zulässigkeit hinzufügen

Version 1.0.0-alpha04

July 19, 2018

Navigation 1.0.0-alpha04 und das zugehörige Safe Args-Gradle-Plug-in enthalten eine Reihe von API-Änderungen, Verhaltensänderungen und Fehlerkorrekturen.

API- und Verhaltensänderungen

  • NavHostFragment legt das aktuelle Fragment immer als primäres Navigationsfragment fest. So wird dafür gesorgt, dass untergeordnete Fragmentmanager geleert werden, bevor der äußere NavController geleert wird. b/111345778

Safe Args

  • Funktionsgefährdende Änderung:app:type wurde in app:argType geändert, um Konflikte mit anderen Bibliotheken wie ConstraintLayout 2.0.0-alpha1 zu vermeiden b/111110548.
  • Fehlermeldungen von Safe Args sind jetzt klickbar b/111534438
  • In Args-Klassen wird jetzt bestätigt, dass NonNull-Attribute tatsächlich nicht null sind. b/111451769
  • Den generierten Klassen „NavDirections“ und „Args“ wurden zusätzliche NonNull-Annotationen hinzugefügt. b/111455455 b/111455456

Fehlerkorrekturen

  • Es wurde ein Problem mit der System-Zurück-Schaltfläche behoben, das nach dem Deeplinking zu einem Fragmentziel auftrat. b/111515685

Version 1.0.0-alpha03

12. Juli 2018

Navigation 1.0.0-alpha03 und das zugehörige Safe Args-Gradle-Plug-in enthalten eine Reihe von API-Änderungen, Verhaltensänderungen und Fehlerkorrekturen.

API- und Verhaltensänderungen

  • Die Methode „NavigationUI.setupWithNavController“ für die Symbolleiste wurde hinzugefügt. b/109868820
  • Für CollapsingToolbarLayout wurde die Methode „NavigationUI.setupWithNavController“ hinzugefügt. b/110887183
  • popBackStack() gibt jetzt „false“ zurück, wenn der Backstack leer ist oder wenn die angegebene Ziel-ID nicht im Backstack enthalten ist. b/110893637
  • FragmentNavigator ignoriert jetzt Navigationsvorgänge, nachdem FragmentManager den Status gespeichert hat. So werden Ausnahmen vom Typ „Can not perform this action after onSaveInstanceState“ vermieden. b/110987825

Safe Args

  • Breaking Change:Nicht alphanumerische Zeichen in Aktions- und Argumentnamen werden in den entsprechenden NavDirections-Methodennamen durch CamelCase ersetzt.
    • Aus DemoController.index wird beispielsweise setDemoControllerIndex b/79995048.
    • Aus action_show_settings wird beispielsweise actionShowSettings b/79642240.
  • Funktionsgefährdende Änderung:Argumente werden jetzt standardmäßig als „nicht null“ betrachtet. Wenn Sie NULL-Werte für String- und Parcelable-Argumente zulassen möchten, fügen Sie app:nullable="true" b/79642307 hinzu.
  • Sie können jetzt app:type="long" mit „defaultValues“ in der Form „123L“ verwenden. b/79563966
  • Parcelable-Argumente werden jetzt unterstützt. Dazu wird ein vollständig qualifizierter Klassenname für app:type verwendet. Der einzige unterstützte Standardwert ist "@null" b/79563966.
  • Args-Klassen implementieren jetzt equals() und hashCode() b/79642246
  • Das Safe Args-Plug-in kann jetzt auf Bibliotheksprojekte angewendet werden. b/80036553
  • Das Safe Args-Plug-in kann jetzt auf Feature-Projekte angewendet werden. b/110011752

Fehlerkorrekturen

  • Probleme bei der Navigation während der Fragment-Lebenszyklusmethoden behoben b/109916080
  • Probleme beim mehrmaligen Navigieren durch verschachtelte Grafiken wurden behoben. b/110178671
  • Probleme bei der Verwendung von setPopUpTo mit dem ersten Ziel im Diagramm wurden behoben b/109909461.
  • Ein Problem wurde behoben, bei dem alle app:defaultValue-Werte als Strings übergeben wurden b/110710788.
  • aapt2, das im Android-Gradle-Plug-in 3.2 Beta 01 enthalten ist, fügt jetzt Keep-Regeln für jedes android:name-Attribut in Navigations-XML-Dateien hinzu. b/79874119
  • Speicherleck beim Ersetzen des Standard-FragmentNavigators behoben b/110900142

Version 1.0.0-alpha02

7. Juni 2018

Geändertes Verhalten

  • FragmentNavigator verwendet jetzt setReorderingAllowed(true). b/109826220

  • Beim Navigieren werden jetzt Argumente, die aus Deeplink-URLs geparst wurden, URL-decodiert. b/79982454

Fehlerkorrekturen

  • Ein IllegalStateException wurde behoben, wenn „navigate“ über Fragment-Lebenszyklusmethoden aufgerufen wurde. b/79632233

  • Die Navigation hängt jetzt von der Support Library 27.1.1 ab, um das Flackern bei der Verwendung von Animationen zu beheben. b/80160903

  • Ein IllegalArgumentException wurde behoben, wenn „defaultNavHost=true“ als untergeordnetes Fragment verwendet wurde. b/79656847

  • Ein StackOverflowError bei der Verwendung von NavDeepLinkBuilder wurde behoben. b/109653065

  • Ein IllegalArgumentException wurde behoben, wenn zur Navigation zu einem verschachtelten Diagramm zurückgekehrt wurde. b/80453447

  • Ein Problem mit sich überschneidenden Fragmenten bei der Verwendung von launchSingleTop wurde behoben. b/79407969

  • Die Navigation erstellt jetzt den richtigen synthetischen Backstack für verschachtelte Diagramme. b/79734195

  • NavigationUI hebt jetzt das richtige Element hervor, wenn ein verschachtelter Graph als MenuItem verwendet wird. b/109675998

API-Änderungen

  • Das Attribut clearTask für Aktionen und die zugehörige API in NavOptions sind veraltet. b/80338878

  • Das Attribut launchDocument für Aktionen und die zugehörige API in NavOptions wurden eingestellt. b/109806636

Version 1.0.0-alpha01

8. Mai 2018

Navigation bietet ein Framework zum Erstellen der In-App-Navigation. Diese erste Version ist 1.0.0-alpha01.