Navigation

Die Navigation ist ein Framework für die Navigation zwischen „Zielen“ innerhalb einer Android-App. Es bietet eine einheitliche API, unabhängig davon, ob Ziele als Fragmente, Aktivitäten oder andere Komponenten implementiert sind.
Letzte Aktualisierung Stabile Version Releasekandidat Beta-Ausgabe Alpha-Release
26. Juni 2024 2.7,7 - 2.8.0-beta04 -

Abhängigkeiten deklarieren

Wenn Sie eine Abhängigkeit von Navigation hinzufügen möchten, müssen Sie Ihrem Projekt das Maven-Repository von Google hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

Fügen Sie der Datei build.gradle für Ihre Anwendung oder Ihr Modul die Abhängigkeiten für die Artefakte hinzu, die Sie benötigen:

Groovig

dependencies {
  def nav_version = "2.7.7"

  // Java language implementation
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Kotlin
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

  // Feature module Support
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

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

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

Kotlin

dependencies {
  val nav_version = "2.7.7"

  // Java language implementation
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Kotlin
  implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
  implementation("androidx.navigation:navigation-ui-ktx:$nav_version")

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

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

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

Safe Args

Fügen Sie die folgende classpath in die build.gradle-Datei der obersten Ebene ein, um Ihrem Projekt Safe Args hinzuzufügen:

Groovig

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

Kotlin

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

Sie müssen außerdem eines von zwei verfügbaren Plug-ins anwenden.

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

Groovig

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Zum Generieren von Kotlin-Code, der nur für Kotlin-basierte Module geeignet ist, können Sie alternativ Folgendes hinzufügen:

Groovig

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

Kotlin

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

Wie unter Zu AndroidX migrieren beschrieben, 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

Dein Feedback hilft uns, Jetpack zu verbessern. Teilen Sie uns mit, wenn Sie neue Ausgaben entdecken oder Verbesserungsvorschläge für diese Bibliothek haben. Bitte sieh dir die vorhandenen Probleme in dieser Bibliothek an, bevor du eine neue erstellst. Sie können einem vorhandenen Problem Ihre Stimme hinzufügen, indem Sie auf die Sternschaltfläche klicken.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung.

Version 2.8

Version 2.8.0-beta04

26. Juni 2024

androidx.navigation:navigation-*:2.8.0-beta04 wurde veröffentlicht. Die 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)
  • Verbesserte Fehlermeldung für benutzerdefinierte Serializer, die direkt in Klassenfeldern über @Serializable(with =...) deklariert wurden, um klarzustellen, dass diese Funktion derzeit nicht unterstützt wird. (I052b0, b/341319151)
  • Die SavedStateHandleFactory-Test-API kann jetzt in Nicht-Android-Tests verwendet werden, erfordert aber Robolectric, um das Parsen von Argumenten mit Bundles zu unterstützen. (I76cdc, b/340966212)
  • Ein Absturz beim Wiederherstellen des Zustands beim Fortsetzen der App nach dem Prozessbeendigung mit der Verwendung von typsicherer Navigation in Compose wurde behoben. (Ia8f38, b/341801005)
  • In „Navigation Compose“ wurde ein Problem behoben, bei dem die NavBackStackEntry, zu der der Nutzer zurückkehrt, nach dem Abbrechen der proaktiven Zurück-Geste nie in den RESUMED-Lebenszyklusstatus zurückkehrt. Auf diese Weise wird auch sichergestellt, dass das Rückkehrziel korrekt wieder animiert wird und nicht nach dem Flimmern einrastet. (I97a0c, b/346608857)
  • Wenn Sie Predictive Back mit Navigation Compose verwenden, hat das eingeblendete 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 wurde veröffentlicht. Die Version 2.8.0-beta03 enthält diese Commits.

API-Änderungen

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

Fehlerkorrekturen

  • Eine Dokumentation zu NavType.serializeAsValue und serializeAsValues wurde hinzugefügt, um hervorzuheben, dass die endgültigen Ausgaben Uri-codiert sein sollten. (Ida6bd, b/344943214)
  • Ein Absturz beim Aufrufen von toRoute<T> mit einem null-CollectionNavType-Argument wurde behoben. Wenn Sie mit einem Null-CollectionNavType navigieren, ist das Ausgabeargument der Standardwert, der in Ihrer serialisierbaren Klasse deklariert wurde, 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 wurde veröffentlicht. Die Version 2.8.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Der ClassCastException-Absturz bei Verwendung von NavBackStackEntry.toRoute mit einer benutzerdefinierten NavType, in der Nullwerte zulässig waren, wurde behoben. (I1c29b, b/342239473)
  • Es wurden Probleme bei der Wiederherstellung des Back-Stack-Status der Navigation behoben, die bei dem Versuch aufgetreten sind, einen Back-Stack-Eintrag wiederherzustellen, der nicht über die ID vom aktuellen Ziel aus erreichbar war. Da Routen durch IDs gestützt werden, waren mit Routen erstellte Ziele ebenfalls davon betroffen. Dadurch wird auch ein Absturz behoben, der durch den Aufruf von clearBackStack() verursacht wurde, bei dem dasselbe zugrunde liegende Problem aufgetreten ist. (I423c3, b/339908057)

Version 2.8.0-beta01

14. Mai 2024

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

API-Änderungen

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

Fehlerkorrekturen

  • Fehlende Parameterdokumente für Navigation Kotlin-DSL-Funktionen wurden hinzugefügt. (I26a36)

Version 2.8.0-alpha08

1. Mai 2024

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

Sichere Argumente in „Navigation Compose“

Diese Funktion verwendet die Kotlin-Serialisierung, damit Sie Ziele in Ihrer Navigationsgrafik ü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“ und „Type Safety“.

Neue Funktionen

  • Das Artefakt navigation-fragment-compose stellt jetzt eine LocalFragment-Zusammensetzung für zusammensetzbare Methoden in einem ComposableFragment bereit. (If35e5)
  • NavType bietet jetzt integrierte Unterstützung für Listen vom Typ „Int“, „String“, „Boolesch“, „Float“ und „Long“. (I4b6dd, Ia914c, b/188693139)

Version 2.8.0-alpha07

17. April 2024

androidx.navigation:navigation-*:2.8.0-alpha07 wurde 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, mit der Sie Ihren Navigations-XML-Dateien composable-Ziele hinzufügen können. Jedes composable-Ziel muss als oberste Ebene ohne Argument vom Typ @Composable ausgedrückt werden, dessen vollständig qualifizierter Name als android:name-Attribut für jedes Ziel verwendet wird. Beim Navigieren zu einem dieser Ziele wird ein enthaltenes Fragment erstellt, um den zusammensetzbaren Inhalt 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 sicherer Argumente in „Navigation Compose“ mit einem auf Kotlin-Serialisierung basierenden Ansatz wurde fortgesetzt. Diese APIs sind noch nicht fertig und mit der Anmerkung ExperimentalSafeArgsApi gekennzeichnet. Diese Anmerkung wird entfernt, sobald die gesamte API-Oberfläche in einer zukünftigen Version fertiggestellt ist. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I7b394I9b73c

Version 2.8.0-alpha06

3. April 2024

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

API-Änderungen

  • Die Unterstützung sicherer Argumente in „Navigation Compose“ mit einem auf Kotlin-Serialisierung basierenden Ansatz hat begonnen. Diese APIs sind noch nicht fertig und mit der Anmerkung ExperimentalSafeArgsApi gekennzeichnet. Diese Anmerkung wird entfernt, sobald die gesamte API-Oberfläche in einer zukünftigen Version fertiggestellt ist. (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, If9e

Fehlerkorrekturen

  • NavHost verwendet jetzt Alignment.TopStart als Standardargument für „contentAlignment“. Damit entspricht sie dem Standardwert für AnimatedContent und behebt einige Fälle einer unerwarteten Skalierung vom Mitteübergang. (I09e72, b/330111602)
  • Wenn Sie die Touch-Geste „Zurück“ verwenden, während Sie die Funktion „Navigationseingabe“ verwenden, wird der benutzerdefinierte Übergang durch NavHost jetzt korrekt und nicht sofort abgeschlossen. (I99017, b/327292110)

Version 2.8.0-alpha05

20. März 2024

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

Neue Funktionen

  • Sie können jetzt Argumente an die startDestination von NavGraph direkt in der Route startDestination übergeben, ohne sich auf defaultValue zu verlassen. Dies gilt auch für das verschachtelte NavGraph-startDestinations. (I0e0b5, b/109505019, b/188693139)

API-Änderungen

  • Neue abstrakte CollectionNavType<T>-Klasse hinzugefügt, eine Unterklasse von NavType<T> für sammlungsbasierte Argumente wie list, Arrays und maps. (Ic6d63, b/188693139)
  • Alle Standard-NavType-Arrays (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType und StringArrayType) sind jetzt vom Typ CollectionNavType (Idcf79, b/188693139).
  • NavType bietet jetzt eine neue offene valueEquals API, die bestimmt, ob zwei Werte desselben Typs einander entsprechen. (I6cb97, b/327229511)

Fehlerkorrekturen

  • Für Abfrageparameter in Deeplinks sind jetzt Werte in Form von geschweiften Klammern um Argumentnamen (z.B. {argName}) als gültige Werte für das stringbasierte NavTypes zulässig. Dadurch wird ein Problem behoben, bei dem ein solcher Wert für alle Typen als ungültig (oder ohne Wert) angesehen wird. (I18302, b/327274038)
  • NavController-Funktionen, die Routen wie navigate oder popBackStack unterstützen, können jetzt Routen, die mit Argumenten des Arrays NavTypes ausgefüllt sind, korrekt abgleichen. (Iea805, b/327229511)

Version 2.8.0-alpha04

6. März 2024

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

Neue Funktionen

  • Du kannst jetzt in „Navigation Compose“ die SizeTranform für deine Übergänge angeben, indem du sie im Rahmen der Initialisierung für die composable- und/oder navigation-Funktionen definierst. (I91062, b/296912651)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem NavHost in der Funktion „Navigation erstellen“ den Übergang nicht richtig anzeigte, wenn „System Zurück“ ohne Touch-Geste verwendet wurde. (Iceeae, b/325998468)

Version 2.8.0-alpha03

21. Februar 2024

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

API-Änderungen

  • NavBackStackEntry.savedStateHandle ist jetzt als @MainThread gekennzeichnet, da sie Code verwendet, der sich trotzdem im Hauptthread befinden muss. (Ibb988, b/299523245)

Fehlerkorrekturen

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

Aktualisierung der Abhängigkeit

Version 2.8.0-alpha02

7. Februar 2024

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

Neue Funktionen

  • Navigation Compose unterstützt jetzt Predictive in der App über die neuen SeekableTransitionState APIs von „Compose-Animation“. So können Sie die Zurück-Touch-Geste verwenden, um das vorherige Ziel mit Ihrem benutzerdefinierten Übergang zu sehen, bevor Sie sich entscheiden, die Transaktion entweder mit der abgeschlossenen Bewegung zu bestätigen oder abzubrechen. (I8b8e9)

Version 2.8.0-alpha01

24. Januar 2024

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

Fehlerkorrekturen

  • Das Datenleck BackStackState wurde behoben, bei dem mehrere saveState-Aufrufe an einem Ziel dazu führten, dass mehrere Status gespeichert wurden, aber nur der erste Status wiederhergestellt werden konnte. (I598b0, b/309559751)
  • Es wurde ein Problem behoben, bei dem Nicht-String-Argumente nicht korrekt angezeigt wurden, wenn die NavigationUI-Hilfsprogramme zum Füllen des Titels von App-Leisten verwendet wurden. (#636, b/316676794)

Aktualisierung der Abhängigkeit

  • Die Funktion „Schreiben“ in Navigation hängt jetzt davon ab, dass mit Schreiben 1.7.0-alpha01 ein Problem behoben wird, das zu einer unerwarteten Skalierungsanimation führen könnte. (b/297258205)

Externer Beitrag

  • Danke, SimonMarquis, dass du das Anzeigeproblem für Nicht-String-Argumente behoben hast, bei denen die NavigationUI-Hilfsprogramme zum Ausfüllen des Titels von App-Leisten verwendet wurden.

Version 2.7.7

Version 2.7.7

7. Februar 2024

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

Fehlerkorrekturen

  • Aus Navigation 2.8.0-alpha01 rückportiert: Das Leck BackStackState wurde behoben, bei dem mehrere saveState()-Aufrufe auf einem einzelnen NavBackStackEntry dazu führten, dass mehrere Status gespeichert wurden, aber nur der erste gespeicherte Status wiederhergestellt werden konnte. (I598b0, b/309559751)
  • Aus der Navigation 2.8.0-alpha01 rückportiert: Es wurde ein Problem behoben, bei dem Nicht-String-Argumente nicht korrekt angezeigt wurden, wenn die NavigationUI-Hilfsprogramme zum Ausfüllen des Titels von App-Leisten verwendet wurden. (#636, b/316676794)

Externer Beitrag

  • Danke, SimonMarquis, dass du das Anzeigeproblem für Nicht-String-Argumente behoben hast, bei denen die NavigationUI-Hilfsprogramme zum Ausfüllen des Titels von App-Leisten verwendet wurden.

Version 2.7.6

Version 2.7.6

13. Dezember 2023

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

Fehlerkorrekturen

  • Die Funktion NavGraph equals() berücksichtigt jetzt korrekt die Knoten des anderen Graphen anstelle des aufrufenden Knotens. Dadurch wird sichergestellt, dass Diagramme mit Knoten mit unterschiedlichen IDs nicht mehr als gleich angesehen werden (I401cb, b/311414915).

Version 2.7.5

Version 2.7.5

1. November 2023

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

Leistungsverbesserungen

  • Die Leistung beim Vergleich von zwei Grafiken wurde erheblich verbessert (sowohl in Bezug auf die Zeit als auch in Bezug auf die Anzahl der Zuweisungen). Das bedeutet, dass Aufrufe wie setGraph, die die neue Grafik intern mit der vorhandenen vergleichen, viel schneller sind und weniger übersprungene Frames verursachen. Vielen Dank, Michał Z für die gründliche Analyse, die zu dieser Verbesserung geführt hat. (I6ad62)
  • NavHost rendert jetzt das Startziel des ersten Kompositionsdurchlaufs, anstatt darauf zu warten, dass die zweite Karte den aktualisierten Status liest. (I439a7, b/304852206)

Fehlerkorrekturen

  • Es wurde ein Problem behoben, durch das Ihre Back-Stacks angezeigt wurden, wenn Sie setGraph mehrmals mit genau derselben Grafik aufrufen und nur dann, wenn ein Ziel in der Grafik vorhanden war, das eine Aktion zur Verknüpfung von zwei Zielen enthielt. (Beispiel 7)
  • Dialogfelder, die schnell nacheinander aufgerufen und geschlossen wurden, werden nicht mehr in die Liste der NavController.visibleEntries aufgenommen. (I67586, b/287969970)
  • Wenn ein Eintrag gefolgt von einer Konfigurationsänderung per Pop-up eingefügt wird, wird der ViewModel des Eintrags jetzt korrekt gelöscht, wenn saveState "false" ist. (Idf242, b/298164648)
  • Es wurde ein Problem behoben, bei dem NavController denselben Deeplink mehr als einmal verarbeiten konnte, wenn der Back-Stack vor einer Konfigurationsänderung vollständig leer war, oder setGraph nur dann aufruft, wenn für den eingehenden Intent das Flag FLAG_ACTIVITY_NEW_TASK gesetzt war. (I73c7f)

Aktualisierung der Abhängigkeiten

  • Die Navigation mit Fragmenten hängt jetzt von Fragment 1.6.2 ab. Dadurch wurde 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 wurde veröffentlicht. Version 2.7.4 enthält diese Commits.

Neue Funktionen

  • popUpTo wird jetzt unterstützt, um Routen mit Argumenten zu verwenden, um zu einem bestimmten Eintrag mit genau diesen Argumenten zurückzukehren. Dies entspricht der Unterstützung in popBackStack. (I731f4, b/299255572)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem das Unterbrechen einer Navigation durch eine andere Navigation mit popUpTo dazu führte, dass FragmentNavigator abstürzt. (I3c848, b/301887045)
  • Ein Problem wurde behoben, bei dem das Zurückdrücken des Systems dazu führte, dass currentDestination nicht korrekt aktualisiert wurde, um dem angezeigten Fragment zu entsprechen. (Id0d6c, b/289877514)
  • Der DialogFragment-Lebenszyklus wechselt jetzt ordnungsgemäß in den Status RESUMED, wenn das Dialogfeld darüber geschlossen wird. (I88f0d, b/301811387)

Version 2.7.3

Version 2.7.3

20. September 2023

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

Fehlerkorrekturen

  • Ein Problem bei der Navigation mit Fragmenten wurde behoben, durch das die visibleEntries-Liste falsche Einträge enthielt. (I5caa9, b/288520638)
  • Es wurde ein Problem behoben, durch das für das Floating-Fenster-Ziel (z.B. Dialogs oder Bottomsheets) nie ein RESUMED-Lebenszyklus-Callback empfangen wurde. (I3b866, b/287505132)

Version 2.7.2

Version 2.7.2

6. September 2023

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

Fehlerkorrekturen

  • Die Navigation hängt jetzt vom Lebenszyklus 2.6.2 ab. Dabei wird eine Interaktion zwischen rememberSaveable und dem NavHost von Navigation Compose behoben, die dazu führt, dass der rememberSaveable-Status von Zielen und alle SavedStateHandle-Instanzen, die zu ViewModel gehören, nach dem Beenden eines Prozesses und der Neuerstellung nicht ordnungsgemäß wiederhergestellt werden. (b/298059596, b/289436035)
  • Es wurde ein Problem behoben, bei dem mehrere Dialogfelder in „Navigation Compose“ gleichzeitig angezeigt wurden, wobei die teilweise verdeckten Dialogfelder (z.B. nicht das oberste Dialogfeld) im Lebenszyklusstatus CREATED statt im Status STARTED befanden. (aosp/2728520, b/289257213)
  • Es wurde ein Problem behoben, bei dem mehrere Dialogfelder gleichzeitig in „Navigationseingabe“ angezeigt wurden. Wenn das oberste Dialogfeld geschlossen wurde, blieb das neue oberste Dialogfeld im Lebenszyklusstatus STARTED und wurde nicht korrekt in RESUMED verschoben. (aosp/2629401, b/286371387)
  • Die Funktion „Navigation Safe Args“ instanziiert ihre Aufgabe nicht mehr sofort, wenn sie nicht tatsächlich ausgeführt wird. (I0e385, b/260322841)

Aktualisierung der Abhängigkeit

  • Die Navigationsfunktion „Compose“ hängt jetzt von Compose-Version 1.5.1 ab.

Version 2.7.1

Version 2.7.1

23. August 2023

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

Fehlerkorrekturen

  • Es wurde ein Problem in der Navigation mit der Funktion „Schreiben“ behoben, bei dem bei der Verwendung von Scaffold beim Versuch, auf Lifecycle.State.DESTROYED ViewModel zuzugreifen, eine Fehlermeldung aufgetreten ist. (I1dc11, b/268422136)

Version 2.7.0

Version 2.7.0

9. August 2023

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

Wichtige Änderungen seit Version 2.6.0

Animationen von Begleitpersonen

Da AnimatedContent jetzt stabil ist, konnten wir den Code von Accompanist Navigation Animation zurück in Navigation Compose verschieben.

Das bedeutet, dass die gesamte Unterstützung für das Festlegen benutzerdefinierter Übergänge, die bisher in AnimatedNavHost vorhanden waren, direkt in NavHost unterstützt wird.

An der Accompanist Navigation Animation wird es keine weiteren Änderungen geben und die Funktion wird bald offiziell eingestellt. Außerdem stellen wir sie bald offiziell ein, zusammen mit einer Anleitung zur Migration zu Navigation Compose selbst. Wenn Sie bereits die neueste Accompanist-Alphaversion (0.31.2-alpha) verwenden, ist dies aber der Kehrwert des Migrationsleitfadens. Es sind keine weiteren API-Änderungen erforderlich. (b/197140101)

Fehlerkorrekturen

  • NavHost in Navigation Compose fängt jetzt System-Back-Aufrufe korrekt ab, auch nachdem die Aktivität ANGEHALTEN und WIEDERGEFÜHRT wurde. (Icb6de, b/279118447)

Aktualisierung der Abhängigkeiten

  • Die Navigation hängt jetzt von der Funktion zum Schreiben ab 1.5.0 ab dem 1.1.0 ab.

Version 2.7.0-rc01

26. Juli 2023

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

Fehlerkorrekturen

  • Die Lambdas EnterTransition und ExitTransition, die als Teil des NavHost erstellt wurden, konnten möglicherweise im Arbeitsspeicher verbleiben, selbst nachdem das NavHost aus der Zusammensetzung entfernt wurde. Dieses Problem wurde behoben. (I893d0)

Bekannte Probleme

  • Bei Navigation 2.6.x gibt es ein Problem, dass bei der Navigation mit popUpTo ein IllegalArgumentException ausgelöst werden kann. Diese Ausnahme lässt sich eventuell vermeiden, indem Sie die Grafik neu strukturieren, wie hier vorgeschlagen. (b/287133013)

Version 2.7.0-beta02

28. Juni 2023

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

Fehlerkorrekturen

  • Die Funktion „Navigationseditor“ hat jetzt die richtige Z-Reihenfolge für benutzerdefinierte Übergänge, bei denen die Option popUpTo zum Navigieren verwendet wird.(/Ib1c3a, b/285153947)

Version 2.7.0-beta01

7. Juni 2023

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

Fehlerkorrekturen

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

Version 2.7.0-alpha01

24. Mai 2023

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

Animationen von Begleitpersonen

Da AnimatedContent jetzt stabil ist, konnten wir den Code von Accompanist Navigation Animation zurück in Navigation Compose verschieben.

Das bedeutet, dass die gesamte Unterstützung für das Festlegen benutzerdefinierter Übergänge, die bisher in AnimatedNavHost vorhanden waren, direkt in NavHost unterstützt wird.

An der Accompanist Navigation Animation wird es keine weiteren Änderungen geben und die Funktion wird bald offiziell eingestellt. Außerdem stellen wir sie bald offiziell ein, zusammen mit einer Anleitung zur Migration zu Navigation Compose selbst. Wenn Sie bereits die neueste Accompanist-Alphaversion (0.31.2-alpha) verwenden, ist dies aber der Kehrwert des Migrationsleitfadens. Es sind keine weiteren API-Änderungen erforderlich. (b/197140101)

Fehlerkorrekturen

  • In Navigation 2.6.0-rc02: Ein Problem mit der Navigation in Fragmenten wurde behoben, bei dem das System wieder nicht mehr funktionierte, wenn man mit popUpTo navigierte und ein Fragment aus dem Back Stack absetzte, ohne seine Ansicht neu zu erstellen. (Ieb8d4, b/281726455)

Aktualisierung der Abhängigkeiten

  • Die Navigation hängt jetzt von der Funktion „Schreiben“ 1.5.0-beta01 ab.

Version 2.6.0

Version 2.6.0

7. Juni 2023

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

Wichtige Änderungen an Navigation seit Version 2.5.0

  • Die arguments von NavBackStackEntry und die an 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 für nachfolgende Zugriffe auf die arguments- oder andere OnDestinationChangedListener-Instanz übernommen werden.
  • NavDeepLink unterstützt jetzt Standardwerte für Arrays, wodurch wiederholte Abfrageparameter unterstützt werden, die dem Arraytyp des Arguments zugeordnet sind. NavType enthält jetzt auch eine Standardmethode, die überschrieben werden kann, um zwei geparste Werte zu kombinieren.
  • Benutzerdefinierte abgeleitete Klassen von NavType können jetzt serializeAsValue überschreiben, um einen Wert in einen String zu serialisieren. Dadurch können sowohl Serialisierung als auch Deserialisierung (über parseValue) vollständig in die Klasse NavType gekapselt werden. StringType überschreibt jetzt diese Methode, um Uri.encode für die angegebene String aufzurufen.

Wichtige Änderungen an „Navigation Compose“ seit Version 2.5.0

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

Wichtige Änderungen bei der Navigation mit Fragmenten seit Version 2.5.0

  • NavHostFragment fängt die Zurück-Schaltfläche des Systems selbst nicht mehr ab. Dadurch kann die zugrunde liegende FragmentManager das System wieder verarbeiten. Dadurch kann für Fragment 1.7.0-alpha01 und höher auf Android U-Geräten eine In-App-Animation mit vorausschauendem Zurückgehen erstellt werden.
  • Wenn Sie die Navigation mit Fragmenten verwenden und versuchen, manuell ein FragmentTransaction auszuführen, mit dem ein Fragment zum Back Stack von FragmentManager hinzugefügt wird, wird jetzt ein IllegalArgumentException ausgelöst. Fragmente sollten immer über die navigate() API hinzugefügt werden.
  • Wenn Sie den exakten String ${applicationId} als Platzhalter in den Attributen app:data und app:dataPattern im Aktivitätselement einer XML-Navigationsdatei verwenden, wird der Platzhalter beim Auffließen automatisch mit packageName des Kontexts ausgefüllt.
  • FragmentNavigator verwendet jetzt die Transition APIs, wenn NavBackStackEntries aufgerufen und per POP aufgerufen wird. Das bedeutet, dass NavBackStackEntry Lifecycle jetzt wartet, bis die Spezialeffekte für das Ein- und Ausblenden des Fragments abgeschlossen sind, bevor die letzten Lifecycle.State verschoben werden.
  • DialogFragmentNavigator verwendet jetzt die Transition APIs, wenn NavBackStackEntries aufgerufen und per POP aufgerufen wird. Das bedeutet, dass der NavBackStackEntry-Lifecycle jetzt wartet, bis der DialogFragment-Lifecycle in DESTROYED verschoben wurde, bevor er in DESTROYED selbst verschoben wird.
  • Mit NavHostFragment können Sie NavController jetzt abrufen, sobald NavHostFragment an FragmentManager angehängt wurde, und nicht erst nach onCreate().
  • Die Navigation für dynamische Funktionsmodule hängt jetzt von der detaillierten Play Feature Delivery Library ab.
  • Die Funktion „Sichere Args“ für Navigation hängt jetzt von Version 7.3.0 des Android-Gradle-Plug-ins ab. Das bedeutet, dass es jetzt nur noch mit Versionen ab 7.3.0 kompatibel ist.

Wichtige Änderungen an NavigationUI seit Version 2.5.0

  • Bei der Übergabe der ID einer Navigationsgrafik an AppBarConfiguration (z. B. über Menu) betrachtet NavigationUI jetzt nur das Startziel dieses Navigationsdiagramms als Ziel der obersten Ebene, anstatt jedes Ziel in der Grafik fälschlicherweise als Ziel der obersten Ebene zu markieren. Das Verhalten bei der Übergabe der ID eines einzelnen Ziels bleibt unverändert. Diese Funktion ist auch für Ihren eigenen Code über die neue isTopLevelDestination-Funktion in AppBarConfiguration verfügbar.
  • Die setupWithNavController-Integrationen in NavigationUI für die Arbeit mit der oberen App-Leiste parsen jetzt R.string-Werte für ReferenceType-Argumente, die in android:label gefunden wurden, in ihre Stringwerte, anstatt die automatisch generierte Ressourcen-Ganzzahl auszugeben.
  • NavigationUI stellt jetzt Logs bereit, wenn eine ausgewählte MenuItem nicht verwendet werden kann.

Version 2.6.0-rc02

24. Mai 2023

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

Fehlerkorrekturen

  • Es wurde ein Problem mit der Navigation in Fragmenten behoben, bei dem das System nicht mehr funktionierte, wenn mit popUpTo navigiert und ein Fragment aus dem Back Stack entfernt wurde, ohne seine Ansicht neu zu erstellen. (Ieb8d4, b/281726455)

Version 2.6.0-rc01

10. Mai 2023

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

Fehlerkorrekturen

  • Es wurde ein Problem in der Navigation mit Fragmenten behoben, bei dem das Entfernen eines Fragments über die Navigation mit popUpTo in seinem onResume()-Lebenszyklus-Callback zu einem IllegalStateException führte. (I21884, b/279644470)

Version 2.6.0-beta01

19. April 2023

androidx.navigation:navigation-*:2.6.0-beta01 wurde 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, mit dem ein Fragment zum Back Stack von FragmentManager hinzugefügt wird, wird jetzt ein IllegalArgumentException ausgelöst. Fragmente sollten immer über die navigate() API hinzugefügt werden. (I6d38e)
  • Wenn es ein navigate gibt, das einen Eintrag hinzufügt, und ein popBackStack, das ihn im selben Frame entfernt, erreicht der resultierende oberste Eintrag im Back Stack nun beständig wieder den RESUMED Lifecycle.State. (Id8067, b/276495952)

Version 2.6.0-alpha09

5. April 2023

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

Fehlerkorrekturen

  • Es wurde eine Prüfung auf ungültige Route durchgeführt. Wenn ein NavDestination NavArgument enthält, der keine Nullwerte zulässt, muss die Route dieses Ziels Platzhalter für Argumente enthalten, die genauso benannt sind wie das NavArgument, das keine Nullwerte zulässt. (Ic62bf, b/274697949)
  • Deeplink-Navigationen, die auf Action/MimeType basieren, schlagen jetzt fehl, wenn im Navigationsvorgang eine NavArgument fehlt, die keine Nullwerte zulässt. Dies ist für die NavDestination erforderlich, mit der die Action/MimeType übereinstimmt. (Ibfa17, b/271777424)
  • Wenn NavController eine Grafik mit derselben Route und denselben Zielen wie in der vorherigen Grafik festlegt, werden die aktuellen Grafikknoten und die Back-Stack-Ziele jetzt korrekt durch neue Instanzen ersetzt. Dadurch wurde ein Absturz behoben, der auftrat, wenn onLaunchSingleTop verwendet wurde, ohne den Status in Navigation Compose zu speichern. Dadurch wird auch ein Fehler behoben, durch den beim Navigieren zu Zielen, die mit der Stammgrafik verknüpft sind, ein falscher Back-Stack erstellt wird. (I5bc58, b/275258161, b/275407804)

Version 2.6.0-alpha08

22. März 2023

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

Neue Funktionen

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

Fehlerkorrekturen

  • Es wurde ein NullPointerException-Fehler behoben, der beim Senden einer verschachtelten Grafik mit einem Argument, das keine Nullwerte zulässt, enthält. (6b3581, b/249988437)
  • Wenn Sie das System nach einer Navigation mit popUpTo wieder aufrufen, wird der Status von NavController zum richtigen Eintrag gesetzt. (I3a8ec, b/270447657)
  • FragmentNavigator gibt jetzt ordnungsgemäße Pop-up-Einträge ein, wenn der Back-Stack über die Systemrückseite oder popBackStack() per Pop-up übertragen wird und ob die Transaktion Effekte für das Fragment verwendet. (I81bdf)
  • Wenn du dem FragmentManager der FragmentNavigator Fragmente hinzufügst, ohne die Navigation zu verwenden, kommt es nicht mehr zu einem Absturz. (b17204, b/274167493)

Aktualisierung der Abhängigkeiten

Version 2.6.0-alpha07

8. März 2023

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

Fehlerkorrekturen

  • Die API-Varianten getBackStackEntry, popBackStack und clearBackStack, die Routen verwenden, verwenden jetzt Routenmuster mit Argumenten, für die Nullwerte zulässig sind, und Abfrageparametern, für die Nullwerte zulässig sind (I22294, b/269302500).
  • Ein Problem wurde behoben, bei dem durch das Aufrufen von clearBackStack() über NavController der gespeicherte Status im Fragmentmanager, der mit dem gelöschten Back-Stack verknüpft war, nicht gelöscht wurde. (IC1cce, b/271190202)
  • Eine Regression in 2.6.0-alpha06 wurde behoben, durch die bei Verwendung des Systems zurück zwischen Tabs das falsche MenuItem in BottomNavigationView hervorgehoben wurde. (I634f6, b/270447657)
  • Die Regression in 2.6.0-alpha06, die dazu führte, dass NavBackStackEntrys bei der Verwendung von Animation-Werten nicht in den Status RESUMED verschoben wurden, wurde behoben. (Ib3589, b/269646882)

Version 2.6.0-alpha06

22. Februar 2023

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

Neue Funktionen

  • Bei der Vorschau einer zusammensetzbaren Funktion mit NavHost wird jetzt standardmäßig startDestination von NavGraph angezeigt. (I2b89f)

API-Änderungen

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

Fehlerkorrekturen

  • Absturz beim Navigieren bei Verwendung der dynamischen Fragmentnavigation wurde behoben. (I3ee29, b/268360479)
  • Es wurde ein Fehler behoben, durch den beim Navigieren zu einem anderen Fragment über die Schaltfläche „Zurück“ des Systems die untere Leiste 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 bei Verwendung von Animation-APIs RESUMED nicht. (b/269646882)
  • Wenn Sie die Navigation mit Fragmenten oder BottomNavigation verwenden und versuchen, einen Back Stack mit mehreren Einträgen wiederherzustellen, wird BottomMenuItem nicht korrekt aktualisiert. (b/270447657)
  • Wenn Sie die Navigation mit Fragmenten verwenden, erhält der NavBackStackEntry Lifecycle nach dem Wiederherstellen des Status nicht DESTROYED, wenn sein Fragment DESTROYED ist . (b/270610768)

Version 2.6.0-alpha05

8. Februar 2023

androidx.navigation:navigation-*:2.6.0-alpha05 wurde 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. Beachten Sie, dass die Argumente genau mit den Argumenten des Eintrags übereinstimmen müssen. (Iebd28, Ic678c, I3b37b, b/257514373)
  • FragmentNavigator verwendet jetzt die Transition APIs, wenn NavBackStackEntries aufgerufen und per POP aufgerufen wird. Das bedeutet, dass NavBackStackEntry Lifecycle jetzt wartet, bis die Spezialeffekte für das Ein- und Ausblenden des Fragments abgeschlossen sind, bevor die letzten Lifecycle.State verschoben werden. (I3cb19, b/238686802)
  • DialogFragmentNavigator verwendet jetzt die Transition APIs, wenn NavBackStackEntries aufgerufen und per POP aufgerufen wird. Das bedeutet, dass der NavBackStackEntry-Lifecycle jetzt wartet, bis der DialogFragment-Lifecycle in DESTROYED verschoben wurde, bevor er in DESTROYED selbst verschoben wird. (I53ee5, b/261213893)

API-Änderungen

  • NavigatorState bietet jetzt die prepareForTransition API, mit der Navigators NavBackStackEntries in Zwischen-Lifecycle.States verschieben können. (I42c21, b/238686802)
  • Du kannst jetzt über ein backstack-Attribut auf den Back-Stack zugreifen, der mit NavGraphNavigator oder ComposeNavigator verknüpft ist. ComposeNavigator zeigt jetzt auch den onTransitionComplete()-Callback an, um eine NavBackStackEntry, die einen Navigations- oder popBackStack-Vorgang ausgeführt hat, als abgeschlossen zu markieren. (I02062, I718db, b/257519195)

Fehlerkorrekturen

  • Der Navigatorstatus ist jetzt managementfrei, wenn die push/popWithTransition-APIs verwendet werden und der Eintrag bereits verarbeitet wird. (Iadbfa, b/261213893)
  • Bei Verwendung von launchSingleTop mit einem verschachtelten NavGraph werden alle Ziele, beginnend vom ursprünglichen Ziel bis zu seinem startDestination, nur ordnungsgemäß oben im Backstack hinzugefügt. (Id4bea, b/253256629)
  • Die Navigation ersetzt jetzt korrekt die DialogFragment-Instanz, wenn zum selben Ziel navigiert wird, wobei das Flag launchSingleTop auf „true“ gesetzt ist. (I45b5a, b/149572817)
  • Navigation SafeArgs verursacht keinen Kompilierungsfehler mehr, wenn Argumente mit genau 19 Zeichen lang sind. (Id60bc, b/257110095)

Version 2.6.0-alpha04

9. November 2022

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

Neue Funktionen

  • Benutzerdefinierte abgeleitete Klassen von NavType können jetzt serializeAsValue überschreiben, um einen Wert in einen String zu serialisieren. Dadurch können sowohl Serialisierung als auch Deserialisierung (über parseValue) vollständig in die Klasse NavType gekapselt werden. StringType überschreibt jetzt diese Methode, um Uri.encode für die angegebene String aufzurufen. (Ie5213, b/247637434)
  • NavigationUI stellt jetzt Logs bereit, wenn eine ausgewählte MenuItem nicht verwendet werden kann. (I2af5a, b/247730357)

Fehlerkorrekturen

  • Navigations-Deeplinks werden jetzt verzögert geparst und nicht mehr bei der Graphinitialisierung. Dadurch kann die App-Leistung beim Start verbessert werden. (Iab0ab)
  • Ein Absturz wurde behoben, der durch das Aufrufen von Deeplink zu einem Ziel mit null Standardargumenten nach oben verursacht wurde. (I51c24, b/243183636)

Aktualisierung der Abhängigkeit

  • Die Navigation für dynamische Funktionsmodule hängt jetzt von der detaillierten Play Feature Delivery Library ab. (Ib4ddc)
  • Die Funktion „Sichere Args“ für Navigation hängt jetzt von Version 7.3.0 des Android-Gradle-Plug-ins ab. Das bedeutet, dass es 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 wurde veröffentlicht. Version 2.6.0-alpha03 enthält diese Commits.

Fehlerkorrekturen

  • Über die Navigation 2.5.3: NavHost löst kein NoSuchElementException mehr aus, wenn kein Ziel zum Erstellen der Datei Crossfade verfügbar ist. Die Komposition wird jetzt einfach übersprungen. (Ieb46e, b/253299416)
  • In Navigation 2.5.3: Ein Problem wurde behoben, durch das der gespeicherte Erstellungsstatus (z.B. Verwendung von rememberSaveable) nicht vergessen und entfernt wurde, wenn ein Ziel aus dem Back Stack entfernt wurde. (I64949)

Aktualisierung der Abhängigkeiten

Version 2.6.0-alpha02

5. Oktober 2022

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

Änderungen im Verhalten

  • Bei der Übergabe der ID einer Navigationsgrafik an AppBarConfiguration (z. B. über Menu) betrachtet NavigationUI jetzt nur das Startziel dieses Navigationsdiagramms als Ziel der obersten Ebene, anstatt jedes Ziel in der Grafik fälschlicherweise als Ziel der obersten Ebene zu markieren. Das Verhalten bei der Übergabe der ID eines einzelnen Ziels bleibt unverändert. Diese Funktion ist auch für Ihren eigenen Code über die neue isTopLevelDestination-Funktion in AppBarConfiguration verfügbar. (Ie936e, b/238496771)

Fehlerkorrekturen

  • Die Komponente „navigation:navigation-fragment“ hängt jetzt von der Fragmentversion 1.5.2 ab. (I00ba4)
  • Der ausgewählte Menüpunkt wird beim Aufrufen eines FloatingWindow-Ziels, z. B. einem Dialogfeld, nicht mehr aktualisiert. (I4cde8, b/240308330)

Version 2.6.0-alpha01

7. September 2022

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

Neue Funktionen

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

API-Änderungen

  • Es wurde eine neue Erweiterungsfunktion NavDestination hinzugefügt, um dynamische Labels mit Argumenten in Form von 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)

Änderungen im Verhalten

  • 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 für nachfolgende Zugriffe auf die arguments- oder andere OnDestinationChangedListener-Instanz übernommen werden. (I676f5)

Fehlerkorrekturen

  • Über Navigation 2.5.2: Die dynamische Navigation versucht jetzt ordnungsgemäß, Aktivitätsziele aus anderen Modulen zu installieren, bevor Sie zu ihnen navigieren. (Ia2c16, b/240292838)
  • In Navigation 2.5.2: Die Navigation ersetzt jetzt korrekt die Fragmentinstanz, wenn zum selben Ziel navigiert und das Flag launchSingleTop auf „true“ gesetzt wird. (I5a2f1, b/237374580)
  • In Navigation 2.5.2: Das Problem IllegalStateException, das durch das Aufrufen eines doppelt verschachtelten Diagramms verursacht wurde, das ein übergeordnetes Element mit einem neuen Pop-up-Startziel teilt. (I9f7cb, b/243778589)

Version 2.5

Version 2.5.3

24. Oktober 2022

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

Fehlerkorrekturen

  • NavHost löst kein NoSuchElementException mehr aus, wenn kein Ziel für das Erstellen der Crossfade verfügbar ist. Die Komposition wird jetzt einfach übersprungen. (Ieb46e, b/253299416)
  • Ein Problem wurde behoben, durch das der gespeicherte Erstellungsstatus (z.B. Verwendung von rememberSaveable) nicht vergessen und entfernt wurde, wenn ein Ziel aus dem Back Stack entfernt wurde. (I64949)

Version 2.5.2

7. September 2022

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

Fehlerkorrekturen

  • Die dynamische Navigation versucht nun ordnungsgemäß, Ziele von Aktivitäten aus anderen Modulen zu installieren, bevor Sie dorthin navigieren. (Ia2c16, b/240292838)
  • Die Navigation ersetzt jetzt korrekt die Fragment-Instanz, wenn zum selben Ziel navigiert und das Flag launchSingleTop auf „true“ gesetzt wird. (I5a2f1, b/237374580)
  • Das Problem IllegalStateException wurde behoben, das durch das Aufrufen einer doppelt verschachtelten Grafik verursacht wurde, die ein übergeordnetes Element mit einem neuen Startziel mit Pop-up teilt. (I9f7cb, b/243778589)

Aktualisierung der Abhängigkeit

Version 2.5.1

27. Juli 2022

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

Fehlerkorrekturen

  • Navigation Safe Args löst in generierten Klassen keine Einstellungswarnungen mehr aus, wenn benutzerdefinierte Argumenttypen verwendet werden, die in einer Bundle gespeichert sind. (Id86ed, b/237725966)

Aktualisierung der Abhängigkeiten

Version 2.5.0

29. Juni 2022

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

Wichtige Änderungen seit Version 2.4.0

  • CreationExtras-Integration: Navigation kann jetzt eine zustandslose ViewModelProvider.Factory über CreationExtras des Lebenszyklus 2.5.0 bereitstellen.

SafeArgs Navigation

  • Navigation Safe Args hat die Android Gradle Plugin-Abhängigkeit aktualisiert, um sich auf 7.0.4 zu verlassen. Dadurch wurde die Kompatibilität für AGP-Versionen vor dem 7.0 aufgehoben.
  • Zusätzlicher Support für das Namespace-Attribut „build.gradle“, das anstelle von „applicationId“ verwendet werden soll.

Weitere Änderungen

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

Version 2.5.0-rc02

15. Juni 2022

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

Fehlerkorrekturen

  • Ein Absturz wurde behoben, der durch schnelles Umschalten zwischen den unteren Zielen bei Verwendung der Funktion zum Erstellen von Navigationselementen NavHost verursacht wurde. (I3979a, b/234054916)
  • Navigation SafeArgs stürzt nicht mehr ab, wenn ein applicationIdSuffix und ein Namespace verwendet werden, bei dem applicationId nicht vorhanden ist, oder wenn sich applicationId und Namespace unterscheiden. (I754b1, b/233119646)
  • NavArgument hat jetzt eine benutzerdefinierte toString()-Funktion zum Anzeigen der internen Werte des Arguments. (I900a8)

Version 2.5.0-rc01

11. Mai 2022

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

Neue Funktionen

  • Neue Lint-Regel hinzugefügt, um zu warnen, dass <deeplink>-Elemente innerhalb von <activity>-Elementen in Ihrer navigation.xml-Datei nicht platziert werden (Ic15a5, b/178403185)

Fehlerkorrekturen

  • Zusammensetzbare Bereiche in NavHost und DialogHost werden jetzt in der erwarteten Reihenfolge angeordnet, d.h. die inneren zusammensetzbaren Bereiche werden vor den äußeren zusammensetzbaren Funktionen platziert. (I157e6)
  • Navigation SafeArgs verwendet jetzt PathSensitivity.RELATIVE in ArgumentsGenerationTask, um die Positionierung aus dem Cache zu ermöglichen. Das bedeutet, dass der Cache-Eintrag jetzt von einem CI-Build für einen lokalen Build wiederverwendet werden kann. (I5f67c, b/173420454)
  • Die Lint-Regel UnrememberedGetBackStackEntryDetector wurde aktualisiert, damit der remember-Aufruf, der den Aufruf von getBackStackEntry() umgibt, auch ein NavBackStackEntry-Objekt als Schlüssel übergibt.(Ib7081, b/227382831)

Version 2.5.0-beta01

20. April 2022

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

Fehlerkorrekturen

  • DialogNavigator verwendet jetzt popWithTransition beim Ausführen eines dismiss()-Aufrufs. Dadurch wird eine Race-Bedingung behoben, die bei Verwendung eines ViewModel im Ziel dialog zu einer IllegalStateException führt, wenn das Dialogfeld geschlossen wird, indem entweder das System zurückkehrt oder außerhalb des Dialogfelds getippt wird. (Id7376, b/226552301)

Aktualisierung der Abhängigkeiten

  • Die Navigation hängt jetzt vom Lebenszyklus 2.5.0-beta01 ab. Damit wird ein IllegalStateException behoben, wenn eine NavHost in einem anderen NavHost auf einem nicht primären Navigationstab am unteren Rand verschachtelt wird, wenn mehrere Back-Stacks verwendet werden.

Version 2.5.0-alpha04

6. April 2022

androidx.navigation:navigation-*:2.5.0-alpha04 wurde 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 erstellt werden. Das bedeutet, dass bei Verwendung des verschachtelten NavHosts das innere NavHost-Objekt jetzt korrekt animiert wird. (I4ba2b, b/225394514)
  • Der von NavController bereitgestellte visibleEntries StateFlow basiert jetzt auf dem maximalen Lebenszyklusstatus des Eintrags anstelle des aktuellen Lebenszyklusstatus. Das bedeutet, dass die Liste der sichtbaren ganzen Elemente gleich bleibt, auch wenn der Hostlebenszyklus von navController unter „STARTED“ (GESTARTET) 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 URIs jetzt mit einem einzelnen Suchparameter ohne Wert parsen. (I0efe8, b/148905489)
  • Ein leerer String wird jetzt in Deeplinks als gültige Argumente betrachtet. (I70a0d, b/217399862)
  • Navigation Safe Args stürzt nicht mehr ab, wenn Namespaces verwendet werden und AndroidManifest.xml nicht vorhanden ist. (I17ccf, b/227229815)

Version 2.5.0-alpha03

23. Februar 2022

androidx.navigation:navigation-*:2.5.0-alpha03 wurde 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 korrekt codierte Zeilenvorschubzeichen, die in Routen-/Deeplink-URIs eingebettet sind. (I513d1, b/217815060)
  • CreationExtras funktioniert jetzt korrekt, wenn es mit NavBackStackEntries zum Erstellen von ViewModels verwendet wird. (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 wurde veröffentlicht. Version 2.5.0-alpha02 enthält diese Commits.

Fehlerkorrekturen

  • In Navigation 2.4.1: NavHostFragment legt OnBackPressedDispatcher jetzt korrekt fest, wenn Viewbinding mit verschachtelten Grafiken verwendet wird. (Ifbb51, b/214577959)
  • Über Navigation 2.4.1: Wenn Deeplinks über mehrere verschachtelte NavGraphs erstellt werden, schließt der Back-Stack nun wie vorgesehen Zwischenstartziele ein. (I504c0, b/214383060)

Version 2.5.0-alpha01

26. Januar 2022

androidx.navigation:navigation-*:2.5.0-alpha01 wurde 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 fehlschlägt. (I8a14d)
  • NavDeepLinks decodieren Argumente nicht mehr unnötig zweimal, d. h., die richtigen Argumente werden jetzt an Ihr endgültiges Ziel übergeben. (I31b0a, b/210711399)

Sichere Argumente

  • „Sichere Args“ hängt jetzt von Version 7.0.4 des Android-Gradle-Plug-ins 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 kompatibel ist. (I41c88, b/213086135, b/207670704)

Version 2.4.2

Version 2.4.2

6. April 2022

androidx.navigation:navigation-*:2.4.2 wurde 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 wurde veröffentlicht. Version 2.4.1 enthält diese Commits.

Fehlerkorrekturen

  • NavHostFragment legt OnBackPressedDispatcher jetzt korrekt fest, wenn „viewbinding“ mit verschachtelten Grafiken verwendet wird. (Ifbb51, b/214577959)
  • Bei Deeplinks über mehrere verschachtelte NavGraphs schließt der Back-Stack nun wie vorgesehen Zwischenziele ein. (I504c0, b/214383060)
  • Über die Navigation 2.5.0-alpha01 rückportiert: Es wurde ein Problem behoben, bei dem der Zugriff auf ein ViewModel, das über by navGraphViewModels() aus dem onCreate() eines Fragments erstellt wurde, mit einem IllegalStateException fehlschlug. (I8a14d)
  • Aus Navigation 2.5.0-alpha01 rückportiert: NavDeepLinks decodieren Argumente nicht mehr unnötig zweimal. Das bedeutet, dass die korrekt decodierten Argumente jetzt an Ihr endgültiges Ziel übergeben werden. (I31b0a, b/210711399)
  • Von Navigation 2.5.0-alpha01 rückportiert: Sichere Args hängen jetzt von Version 7.0.4 des Android-Gradle-Plug-ins ab. Das bedeutet, dass Navigation Safe Args nicht mehr mit Android Studio-Versionen vor 7.0 kompatibel ist, aber jetzt mit dem Android-Gradle-Plug-in 7.1.0 und höher kompatibel ist. (I41c88, b/213086135, b/207670704)

Version 2.4.0

Version 2.4.0

26. Januar 2022

androidx.navigation:navigation-*:2.4.0 wurde 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 Null-Zulässigkeit von Klassen mit generischen Werten (z. B. abgeleitete NavType-Klassen) verbessert. Alle Kotlin-Erweiterungsfunktionen, die früher Teil der -ktx-Artefakte waren, wurden in ihre jeweiligen Hauptartefakte verschoben. Die -ktx-Artefakte werden weiterhin veröffentlicht, sind aber komplett leer.
  • Das Artefakt navigation-fragment enthält jetzt eine vordefinierte Implementierung eines Zwei-Fenster-Layouts über die neue AbstractListDetailFragment. Dieses Fragment verwendet ein SlidingPaneLayout, um einen Listenbereich (den von Ihrer Unterklasse bereitgestellt wird) und einen Detailbereich zu verwalten, für den eine NavHostFragment als Implementierung verwendet wird, wie in unserer Beispielimplementierung gezeigt.
  • Die Methode currentBackStackEntryAsFlow() für NavController stellt einen Flow bereit, der immer dann ausgegeben wird, wenn sich der aktuelle NavBackStackEntry ändert. Dieser Ablauf kann alternativ zur manuellen Verwaltung eines OnDestinationChangedListener verwendet werden.
  • NavController bietet jetzt die Möglichkeit, eine Liste aller sichtbaren NavBackStackEntry-Instanzen als StateFlow über die experimentelle visibleEntries-Eigenschaft abzurufen.
  • Es ist jetzt möglich, die Klasse NavType zu erweitern, um benutzerdefinierte NavTypes zu erstellen. Benutzerdefinierte Typen werden nur unterstützt, wenn Sie Ihre Navigationsgrafik programmatisch erstellen, z. B. über die Navigation Graph Kotlin DSL.
  • Navigation bietet jetzt die APIs findStartDestination() und getHierarchy(), mit denen die benutzerdefinierte NavigationUI implementiert werden kann. findStartDestination() ist eine Erweiterungsfunktion auf NavGraph. Sie sucht nach dem tatsächlichen Startziel, das angezeigt wird, wenn Sie zur Grafik navigieren, auch wenn startDestination selbst ein verschachteltes NavGraph-Element ist. getHierarchy() ist eine Funktion in NavDestination, mit der geprüft werden kann, ob ein bestimmtes Ziel innerhalb der Hierarchie eines anderen Ziels liegt.

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

  • Wenn ein <action>-Element über XML aufgebläht wird, können für Animationsattribute Attribute verwendet werden, die mit der app:enterAnim="?attr/transitionEnter"-Syntax aus dem Design abgerufen werden.

  • Sichere Args generiert jetzt eine fromSavedStateHandle()-Methode für jede NavArgs-Klasse. (Nr. 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 Kotlin DSL

Bei früheren Versionen von Navigation hatte jedes Ziel eine konstante Ganzzahl-ID, die es eindeutig von seinen gleichgeordneten Zielen identifiziert und es Ihnen ermöglicht, das Ziel entweder direkt oder über eine Aktion mit „navigate()“ zu erreichen. Dies ist zwar weiterhin gültig und nützlich, insbesondere in Fällen, in denen Sie Ihren Navigationsdiagramm in XML definieren und automatisch generierte R.id-Konstanten oder Safe Args verwenden können, die diese Konstanten zum Generieren von Code zum Build-Zeitpunkt verwenden. Dieses System aus eindeutigen Ganzzahlen erfasst jedoch nicht die semantische Bedeutung und Aussagekraft, die erforderlich ist, um vollständig dynamische Grafiken zu unterstützen, die zur Laufzeit über Navigation Kotlin DSL programmatisch erstellt werden.

In dieser Version wird eine neue Option zur eindeutigen Identifizierung eines Ziels in einer Navigationsgrafik mithilfe der route eingeführt. Eine Route ist ein String, der einen eindeutigen Pfad zu einem Ziel definiert. Alle Kotlin-DSL-Methoden, für die eine Ziel-ID verwendet wurde, wurden verworfen und durch eine entsprechende API ersetzt, die eine Route verwendet.

Jede Route sollte als Pfadteil eines Uri behandelt werden, der 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. Dabei gelten dieselben Regeln wie für implizite Deeplinks.

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

Dies hatte einige Auswirkungen auf die API:

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

Anders als bei der Navigation nach ID gelten für die Navigation nach Route dieselben Regeln wie für implizite Deeplinks: Sie können in jedem verschachtelten Graphen direkt zu jedem Ziel navigieren. Dadurch wird sichergestellt, dass diese Routen in Projekten mit mehreren Modulen verwendet werden können, ohne dass Sie jedem Ziel explizit einen extern sichtbaren Deeplink hinzufügen müssen.

Navigation „Compose“

Das Artefakt navigation-compose ermöglicht die Integration zwischen der Navigationskomponente und Jetpack Compose. Sie verwendet @Composable-Funktionen als Ziele in Ihrer Anwendung.

Diese Version bietet folgende Vorteile:

  • Eine zusammensetzbare Funktion für NavHost, mit der Sie Ihre Navigationsgrafik über eine Kotlin-DSL mit composable- und dialog-Zielen erstellen können. Außerdem werden optionale Navigatoren wie die von Accompanist Navigation Material unterstützt.
  • Obligatorische Unterstützung für Überblendung zwischen Zielen Begleitende Navigationsanimation kann verwendet werden, um den Wechsel zwischen Ein- und Ausblenden mithilfe von experimentellen Compose APIs zu steuern.
  • Geltungsbereich einer Lifecycle zu jedem zusammensetzbaren Ziel. Jedes Ziel erreicht erst dann den RESUMED-Status, wenn alle eingehenden Übergänge abgeschlossen sind, und fällt sofort auf STARTED, wenn alle übergehenden Übergänge beginnen. Auf diese Weise können Sie alle IllegalStateException- und Multi-Touchpoint-Probleme vermeiden, indem Sie nur einen navigate-Aufruf auslösen, wenn Lifecycle den Wert RESUMED hat.
  • Geltungsbereich von ViewModel (über die viewModel() API von Lifecycle ViewModel Compose 2.4.0 oder hiltViewModel() von Hilt Navigation Compose 1.0.0 auf Zielebene; es wird ein Bereich angegeben, der Konfigurationsänderungen übersteht und sich im Back-Stack befindet (wenn Ihre zusammensetzbaren Inhalte anderweitig entnommen werden) sowie ein Signal im onCleared() des ViewModel, das die dauerhafte Entsorgung und Bereinigung des mit diesem NavBackStackEntry verknüpften Zustands angibt.
  • Geltungsbereich des rememberSaveable-Status auf Zielebene, sodass alle zusammensetzbaren Status gespeichert und automatisch wiederhergestellt werden, wenn Sie zu einem Ziel zurückkehren.
  • Vollständige Unterstützung für das Speichern und Wiederherstellen des Status von NavController und des Zielstatus nach dem Beenden von Prozessen und der Neuerstellung.
  • Automatische Integration mit der Zurück-Schaltfläche des Systems
  • Unterstützung für die Übergabe von Argumenten, das Anhängen von Deeplinks an Ziele und die Rückgabe von Ergebnissen an vorherige Ziele.

  • Erstellen Sie bestimmte Hilfskräfte in rememberNavController() und currentBackStackEntryAsState(), um den Windstatus zu ermöglichen und NavController mit zusammensetzbaren Funktionen außerhalb von NavHost zu verbinden (z. B. eine untere Navigationsleiste).

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 in der Anleitung zur Navigation erstellen.

Mehrere Back Stacks

Der NavController verwaltet den Back-Stack von Zielen. Er fügt dem Back-Stack Ziele hinzu, wenn Sie mit navigate() fortfahren, und entfernt sie, wenn Sie popBackStack() aufrufen oder die Schaltfläche „Zurück“ des Systems auslösen. Die vorhandene Klasse NavOptions und die Integration in <action>-Elemente in der XML-Datei des Navigationsdiagramms wurden erweitert, um das Speichern und Wiederherstellen des Back-Stacks zu unterstützen.

Im Rahmen dieser Änderung speichern und wiederherstellen die NavigationUI-Methoden von onNavDestinationSelected(), BottomNavigationView.setupWithNavController() und NavigationView.setupWithNavController() jetzt automatisch den Status von Zielen, die eingeblendet wurden, sodass mehrere Back-Stacks ohne Codeänderungen unterstützt werden. Wenn Sie die Navigation mit Fragmenten verwenden, ist dies die empfohlene Methode zur Integration mehrerer Back Stacks.

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

  • In Navigations-XML kann das Element <action> jetzt die booleschen Attribute app:popUpToSaveState und app:restoreState verwenden, um den Status aller Ziele, die über app:popUpTo geöffnet wurden, zu speichern und den Status des Ziels wiederherzustellen, das als app:destination übergeben wurde:

    <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 navOptions Kotlin DSL können Sie die boolesche Eigenschaft restoreState und die boolesche Eigenschaft 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
      }
    }
    
  • Beim manuellen Erstellen eines NavOptions-Objekts mithilfe von NavOptions.Builder können Sie die setRestoreState() und die neue Überlastung für setPopUpTo() verwenden, für die ein zusätzlicher saveState-Parameter erforderlich ist.

    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.

  • Sie können die Methode clearBackStack() verwenden, um jeden mit popBackStack() oder popUpToSaveState gespeicherten Status zu löschen.

In allen Fällen speichert NavController den Status jeder NavBackStackEntry und stellt sie wieder her, einschließlich aller ViewModel-Instanzen auf Ebene des Navigationsziels. Die Navigator APIs wurden aktualisiert, damit jede Navigator das Speichern und Wiederherstellen ihres eigenen Status unterstützen kann.

Verhaltensänderungen

  • NavDeepLinkBuilder fügt jetzt PendingIntent.FLAG_IMMUTABLE dem von createPendingIntent() zurückgegebenen PendingIntent hinzu. Dadurch wird sichergestellt, dass diese API bei Ausrichtung auf Android 12 wie erwartet funktioniert.
  • Die Navigation hängt jetzt vom Lebenszyklus 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 Lebenszyklus 2.3.0 eingeführte Hauptthreaderzwingung angepasst.
  • Über Deeplinks wird jetzt geprüft, ob alle erforderlichen Argumente (ohne Standardwerte) im Uri vorhanden sind.
  • In NavDeepLink geparste Argumente betrachten jetzt Rautezeichen genauso wie Fragezeichen als Trennzeichen zwischen Pfadsegmenten, wodurch verhindert wird, dass sich ein Argument über das Rautezeichen erstreckt.
  • Beim Generieren von Aktionen werden mit Kotlin-Code, der aus Safe Args generiert wurde, jetzt Argumente ohne Standardwerte als Parameter vor denen mit Standardwerten platziert.
  • Bei der Generierung von Argumenten werden Parameter ohne Standardwerte jetzt vor Parameter mit Standardwerten gestellt.
  • Safe-Args ist jetzt auf Android-Gradle-Plug-in 4.2.0 angewiesen. Das bedeutet, dass Sie die Warnung „applicationIdTextResource“ nicht mehr erhalten sollten.

Bekannte Probleme

  • Das Problem wurde in der Navigation 2.5.0-alpha01 behoben: Der Zugriff auf ein ViewModel, das über by navGraphViewModels() aus dem onCreate() eines Fragments erstellt wurde, schlägt mit einem IllegalStateException fehl. (b/213504272)
  • In Navigation 2.5.0-alpha01 behoben: Safe Args 2.4.0 ist nicht mit dem Android-Gradle-Plug-in 7.1.0 und höher kompatibel. (b/213086135)
  • Durch Deeplinks mit mehreren verschachtelten Navigationsdiagrammen wird der vollständige Backstack nicht korrekt erstellt. (b/214383060)

Version 2.4.0-rc01

15. Dezember 2021

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

Verhaltensänderungen

  • In NavDeepLink geparste Argumente werden jetzt Rautezeichen genauso betrachtet wie Fragezeichen als Trennzeichen zwischen Argumenten. (I21309, b/180042703)

Fehlerkorrekturen

  • Deeplink ignoriert Argumente mit Werten, die mit dem Namen des Platzhalters identisch sind, nicht mehr. (If8017, b/207389470)
  • NavController stürzt nicht mehr ab, wenn ein verschachteltes Ziel mit Übergängen per Pop-up dargestellt wird, nachdem NavController wiederhergestellt wurde. (I0f7c9, b/205021623)
  • In der Fehlermeldung bei Verwendung eines ungültigen startDestination wird jetzt standardmäßig die Route des Startziels verwendet, sofern eine verfügbar ist. (I86b9d, b/208041894)

Fehlerkorrekturen bei der Funktion „Schreibassistent“

  • Ein möglicher Absturz wurde behoben, der durch schnelles Wechseln zwischen Startziel und einem anderen Ziel über die Elemente des unteren Navigationsmenüs verursacht wurde. (IC8976, b/208887901)
  • Das Ziel des Dialogfelds wird jetzt korrekt oben auf dem Bildschirm wiederhergestellt, nachdem die Konfiguration geändert oder der Prozess beendet wurde. (I4c0dc, b/207386169)
  • Ein Problem wurde behoben, bei dem ein ViewModel aus dem NavBackStackEntry eines Dialogfelds nicht abgerufen werden konnte, wenn das Dialogfeld geschlossen wurde. (I6b96d, b/206465487)
  • Es wurde ein Problem behoben, bei dem activity-Ziele mit der Funktion NavHost von Navigation Compose verwendet wurden, was zu einer unendlichen Neuzusammensetzung führte. (I8f64c)
  • Es wurde ein Leck in Navigation Compose behoben, bei dem eine Referenz der alten Aktivität nach einer Konfigurationsänderung oder dem Beendigung eines Prozesses festgehalten wurde. (I4efcb, b/204905432)

Fehlerkorrekturen bei sicheren Args

  • SafeArgs stürzt beim Versuch, benutzerdefinierte parcelable Arrays nach dem Beenden eines Prozesses wiederherzustellen, nicht mehr ab. (I618e8, b/207315994)
  • Ein Fehler in sicheren Argumenten, der boolesche Arrays keinen null-Wert zulässt, wurde behoben. (I8c396, b/174787525)

Version 2.4.0-beta02

3. November 2021

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

API-Änderungen

  • Bei der Verarbeitung expliziter und impliziter Deeplinks wird jetzt beim Aufrufen einer anderen Grafik automatisch das Flag saveState hinzugefügt. Dadurch wird sichergestellt, dass Code wie NavigationUI.setupWithNavController und Code mit mehreren Back-Stacks wie erwartet funktioniert. (IC8807)

Änderungen im Verhalten

  • Deeplink-Muster werden jetzt verzögert in NavDeepLink und nicht mehr während der Inflation kompiliert. Dadurch sollte sich die Inflationszeit von Navigationsgrafiken mit Deeplinks verbessern. (b8d257, b/184149935)

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem NavBackStackEntries nach dem Wechsel zu Lifecycle.State.STARTED auf Lifecycle.State.CREATED verschoben wurden, wenn NavHost direkt zur setContent() der Aktivität hinzugefügt wurde. (Ia5ac1, b/203536683)
  • Es wurde eine Race-Bedingung behoben, durch die das Dialogfeld nicht geschlossen wurde, wenn ein DialogFragment-Ziel aus dem Back-Stack entfernt wurde, bevor das Dialogfeld tatsächlich angezeigt 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 für NavigationUI true zurückgibt, auch wenn du nicht navigate() für diesen Navigationsdiagramm angegeben hast. Jetzt verwendet sie dieselbe Logik, die intern von setupWithNavController verwendet wird, um nur die MenuItem auszuwählen, die dem aktuellen Ziel zugeordnet sind. Dazu wird die hierarchy des Ziels verwendet. (I2b053)

Version 2.4.0-beta01

27. Oktober 2021

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

Neue Funktionen

  • Als Alternative zu einer ID können Sie jetzt by navGraphViewModel mit einer Route verwenden, um die Verwendung des Navigations-Kotlins DSL mit Fragmenten besser zu unterstützen. (I901e3, b/201446416)

API-Änderungen

  • Die visibleEntries API ist jetzt experimentell. (I93f6f)

Fehlerkorrekturen

  • ViewModels werden nicht mehr gelöscht, wenn Übergänge durch das Wechseln zwischen denselben Bildschirmen unterbrochen werden (Id52d8, b/200817333).
  • NavDeepLink-Argumente, für die Nullwerte zulässig sind, erfordern keinen Standardwert mehr, wenn Deeplinks zu NavDestinations hinzugefügt werden. (I5aad4, b/201320030)
  • NavBackStackEntries jetzt mit unterschiedlichen Lebenszyklen gelten nicht mehr als gleich. Das bedeutet, dass NavHost alle Ziele korrekt neu zusammensetzt, wenn die Navigation mit „singleTop“ erfolgt oder Menüelemente von unten neu ausgewählt werden. (I1b351, b/196997433)
  • Es wurde ein Problem mit AbstractListDetailFragment behoben, das dazu führte, dass die Attribute layout_width und layout_weight im von onCreateListPaneView() zurückgegebenen Listenbereich falsch verarbeitet oder ignoriert wurden. (f5fbf3)
  • Der visuelle Zustand von Dialogzielen bleibt jetzt korrekt mit dem Status der DialogFragmentNavigator synchronisiert. Das bedeutet, dass durch das manuelle Aufrufen der asynchronen dismiss() API für DialogFragment jetzt alle Dialogfeldziele oberhalb des jetzt geschlossenen Dialogfelds korrekt gelöscht werden. Dies hat jedoch keine Auswirkungen auf Fälle, in denen Sie popUpTo oder popBackStack() verwenden, um das Dialogfeld zu schließen. (I77ba2)
  • AbstractAppBarOnDestinationChangedListener hat jetzt klarere Fehlermeldungen für onDestinationChanged(). (IE742d)

Version 2.4.0-alpha10

29. September 2021

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

Neue Funktionen

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

Fehlerkorrekturen

  • Die dynamische Navigation stürzt nicht mehr ab, wenn die Aktivität neu erstellt wird. (Ifa6a3, b/197942869)
  • Es wurde ein Problem mit der Schaltfläche „Zurück“ des Systems behoben, die erst auftrat, nachdem zu einem zusammensetzbaren Ziel mit NavHost zurückgekehrt wurde. (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 wurde veröffentlicht. Version 2.4.0-alpha09 enthält diese Commits.

Neue Funktionen

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

API-Änderungen

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

Änderungen im Verhalten

  • Bei der Generierung von Argumenten werden Parameter ohne Standardwerte jetzt vor Parameter mit Standardwerten gestellt. (I89709, b/198493585)

Fehlerkorrekturen

  • Wenn Sie „Navigation Compose“ verwenden, sind NavGraphs nur dann DESTROYED, wenn alle untergeordneten Elemente DESTROYED sind. (I86552, b/198741720)
  • NavDeepLink-Argumente, für die Nullwerte zulässig sind, erfordern keinen Standardwert mehr. (Ia14ef, b/198689811)
  • Wenn setGraph() mit einem neuen Diagramm aufgerufen wird, werden jetzt zusätzlich zum vorherigen Verhalten beim Aufrufen des Back-Stacks auch alle gespeicherten Back-Stacks gelöscht. (I97f96)
  • Es wurde ein Problem behoben, bei dem OnDestinationChangedListener-Instanzen und currentBackStackEntryFlow bei der Verwendung von launchSingleTop nicht benachrichtigt wurden. (Iaaebc)

Aktualisierung der Abhängigkeiten

Version 2.4.0-alpha08

1. September 2021

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

Neue Funktionen

  • Es ist jetzt möglich, die Klasse NavType zu erweitern, um benutzerdefinierte NavTypes zu erstellen. Benutzerdefinierte Typen werden nur unterstützt, wenn Sie Ihre Navigationsgrafik programmatisch erstellen, z. B. über die Navigation Graph Kotlin DSL. (I78440, b/196871885)

Änderungen im Verhalten

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

Fehlerkorrekturen

  • Die Verwendung von getBackStackEntry und previousBackStackEntry innerhalb von composable() in Verbindung mit remember() verursacht keine Ausnahme mehr, dass sich kein Ziel im Back-Stack befindet. (I75138, b/194313238)
  • Navigation Compose wird jetzt korrekt neu zusammengefügt, wenn Argumente für den Zurücksetzungsstapel geändert und launchSingleTop=true verwendet werden. (Iebd69, b/186392337)
  • Wenn setGraph mit einem Diagramm mit 13 oder 29 Zielen aufgerufen wird, ist kein ArrayIndexOutOfBoundsException mehr vorhanden. (I1a9f1, b/195171984)
  • Der Java-Generator von SafeArgs sollte beim Generieren von Args-Klassen keine Lint-Warnungen mehr auslösen. (I1a666, b/185843837)

Externer Beitrag

  • Vielen Dank, ospixd, dass du bei Deeplinks geprüft hast, ob alle erforderlichen Argumente (ohne Standardwerte) im Uri vorhanden sind. (#204, b/185527157)

Version 2.4.0-alpha07

18. August 2021

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

Fehlerkorrekturen

  • Navigation Compose speichert den Status jetzt korrekt nach Konfigurationsänderungen und beim Ändern von Grafiken bei Verwendung der Multi-Back-Stack-Funktion. (If5a3d, b/195141957)
  • Die erneute Auswahl desselben Tabs beim Verwenden der Navigation mit mehreren Back-Stacks führt nicht mehr zu einem leeren Bildschirm. (I860dc, b/194925622)
  • NavHost beobachtet jetzt Änderungen am Lifecycle.State von NavBackStackEntrys. Das bedeutet, dass die Verwendung einer NavHost in einem Fragment jetzt ordnungsgemäß neu zusammengefügt wird, wenn sich der Lebenszyklus ändert, und nicht zu einem leeren Bildschirm. (I4eb85, b/195864489)
  • Ein Problem wurde behoben, bei dem beim Schließen einer DialogFragment der Status NavController nach dem Neuerstellen der Aktivität (z.B. nach einer Konfigurationsänderung) nicht korrekt aktualisiert wurde. (Icd72b)
  • Ein Problem wurde behoben, bei dem durch das Öffnen eines Dialogziels die Verarbeitung der Zurück-Schaltfläche des NavController-Systems nicht aktualisiert wurde. Dies führte dazu, dass NavController die Schaltfläche „Zurück“ abfängt, obwohl kein Back-Stack vorhanden ist. (If3b34)
  • Safe-args generiert jetzt automatisch eine toSavedStateHandle-Methode für Argumente, die zum Testen des ViewModel-Codes verwendet werden kann. (If1e2d, b/193353880)

Version 2.4.0-alpha06

4. August 2021

androidx.navigation:navigation-*:2.4.0-alpha06 wurde 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)

Änderungen im Verhalten

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

Fehlerkorrekturen

  • Wenn das letzte Ziel in einem Navigationsdiagramm angezeigt wird, wird kein 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)
  • In „Navigation Compose“ wurde ein Problem behoben, bei dem ein NavBackStackEntry mit Deeplink nicht den Status RESUMED erreichte. (I192c5)
  • Es wurde ein Problem behoben, bei dem durch das Drücken eines Dialogziels die Verarbeitung der Zurück-Schaltfläche des NavController-Systems nicht aktualisiert wurde. Dies führte dazu, dass NavController die Schaltfläche „Zurück“ abfängt, obwohl kein Back-Stack vorhanden ist. (aosp/1782668)

Version 2.4.0-alpha05

21. Juli 2021

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

Änderungen im Verhalten

  • NavHost von Navigation Compose verwendet jetzt beim Navigieren durch Ziele immer Überblendungen. (I07049, b/172112072)
  • Sie können jetzt Änderungen an der Grafik eines NavHosts vornehmen. Grafiken mit demselben Startziel und denselben Zielen in der Grafik gelten als gleichwertig und löschen den Back-Stack NavController nicht. (I0b8db, b/175392262)

Fehlerkorrekturen

  • Es wurde ein NoSuchElementException-Fehler behoben, der beim Aufrufen von popBackStack() aus einem LifecycleObserver, das mit einem NavBackStackEntry verknüpft ist, aufgrund von nicht wiederkehrenden Aktualisierungen des NavController-Status ausgelöst wurde. (I64621)
  • Mit AbstractListDetailFragment kann SlidingPaneLayout jetzt vollständig aus deinem APK entfernt werden, wenn AbstractListDetailFragment nicht verwendet wird. (I611ad)
  • NavGraph und NavDestination überschreiben jetzt die Gleichheitsmethode, sodass zwei Objekte mit denselben Werten als gleich angesehen werden. (I166eb, b/175392262)

Version 2.4.0-alpha04

1. Juli 2021

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

Neue Funktionen

  • Das Artefakt navigation-fragment enthält jetzt eine vordefinierte Implementierung eines Zwei-Fenster-Layouts über die neue AbstractListDetailFragment. Dieses Fragment verwendet ein SlidingPaneLayout, um einen Listenbereich (den von Ihrer Unterklasse bereitgestellt wird) und einen Detailbereich zu verwalten, für den eine NavHostFragment als Implementierung verwendet wird, wie in unserer Beispielimplementierung gezeigt. (Iac4be, b/191276636)
  • Die NavHost des Artefakts navigation-compose unterstützt jetzt zusätzlich zu composable-Zielen dialog-Ziele. Diese Dialogziele werden jeweils in einer zusammensetzbaren Dialog angezeigt, die ü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 zu „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 übertragen oder zu übertragen. Beachten Sie, dass diese APIs noch von keinem der enthaltenen Navigatoren verwendet werden. (Ic4d7c, b/172112072)

Änderungen im Verhalten

  • NavDeepLinkBuilder fügt jetzt PendingIntent.FLAG_IMMUTABLE dem von createPendingIntent() zurückgegebenen PendingIntent hinzu. Dadurch wird sichergestellt, dass diese API bei Ausrichtung auf Android 12 wie erwartet funktioniert. (If8c52)

Fehlerkorrekturen

  • Es wurde ein Problem mit <include-dynamic> behoben, bei dem Argumente, die an das Diagramm übergeben wurden, nicht korrekt an die dynamisch eingeschlossene Grafik übergeben wurden. (I3e115)
  • Fehlerkorrektur für NullPointerException beim Aufrufen eines Ziels mithilfe eines string[]-Arguments mit dem Standardwert @null. (I1fbe8)
  • Fügen Sie ProGuard-Regeln für @Navigator.Name hinzu, um Probleme bei der Verwendung des R8 3.1-Modus im Vollbildmodus zu beheben. (I2add9, b/191654433)
  • SafeArgs schlägt nicht mehr fehl, wenn eine App mit Kotlin-Versionen vor dem 1.5.0 erstellt wird. (Icd1ff, b/190739257)

Version 2.4.0-alpha03

16. Juni 2021

androidx.navigation:navigation-*:2.4.0-alpha03 wurde 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 eine enthaltene dynamische Grafik aufzurufen. (I7785c, b/188859835)
  • Es wurde eine Regression behoben, die in der Navigation 2.4.0-alpha01 eingeführt wurde, bei der setupActionBarWithNavController() das Aufwärtssymbol nicht korrekt entfernt hat, wenn man sich an einem Ziel auf oberster Ebene befindet. (I5d443, b/189868637)
  • Es wurde ein IllegalStateException-Fehler behoben, der beim Aufrufen von popBackStack() nach dem Aufrufen der Stammgrafik von NavController aufgetreten ist. (I2a330, b/190265699)
  • Die ProGuard-Regeln für by navArgs() gelten jetzt ordnungsgemäß, wenn navigation-common oder andere Artefakte verwendet werden, die davon abhängen. (I68800, b/190082521)
  • Ein OnDestinationChangedListener, der navigate() beim ersten Empfang eines Callbacks aufruft, erhält jetzt einen zweiten Callback mit dem Ziel, zu dem er navigiert ist. (Ie5f9e, b/190228815)
  • Safe Args stürzt nicht mehr ab, wenn es mit dynamischen Funktionsmodulen und AGP 7.0 oder höher verwendet wird. (I69518, b/189966576)

Bekanntes Problem

  • „Safe Args“ schlägt bei Verwendung von Gradle 6.7.0 mit dem Fehler Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’ fehl, da eine Abhängigkeit von einer älteren Kotlin-Version besteht. Sie können das Problem 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 wurde 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 DynamicNavigation Kotlin DSL unterstützt. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • NavigationUI hat vorübergehend experimentelle APIs hinzugefügt, um das Speichern Ihres Status zu deaktivieren. Das Speichern des Status ist zwar korrekt, aber es gibt immer noch nicht mehr unterstützte Bibliotheken (beibehaltene Fragmente), die beim Speichern des Status nicht unterstützt werden. So haben Apps die Möglichkeit, langsam von nicht unterstützten APIs zu konvertieren. (Idf93c)
  • Navigation bietet jetzt die APIs findDestination() und getHierarchy(), mit denen die benutzerdefinierte NavigationUI implementiert werden kann. findDestination() ist eine Erweiterungsfunktion für NavGraph, die ein Ziel in der Grafik findet. getHierarchy() ist eine Funktion in NavDestination, mit der geprüft werden kann, ob ein bestimmtes Ziel innerhalb der Hierarchie eines anderen Ziels liegt.(I2932f, b/188183365)

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

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

API-Änderungen

Fehlerkorrekturen

  • DialogFragmentNavigator verwendet jetzt die NavigatorState.pop() API, um NavController zu informieren, wenn ein Dialogfeld durch Klicken auf die Zurück-Schaltfläche des Systems oder durch Klicken außerhalb des Dialogfelds geschlossen wird. Dadurch wird sichergestellt, dass der NavController-Status immer mit dem Status des Navigators synchron ist. (I2ead9)
  • Die Navigation gibt kein ConcurrentModificationException mehr zurück, wenn die Liste von 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“ in 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)

Aktualisierung der Abhängigkeit

  • Safe-Args ist jetzt auf Android-Gradle-Plug-in 4.2.0 angewiesen. Das bedeutet, dass Sie die Warnung „applicationIdTextResource“ nicht mehr erhalten sollten. (I6d67b, b/172824579)

Version 2.4.0-alpha01

18. Mai 2021

androidx.navigation:navigation-*:2.4.0-alpha01 wurde 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 alternativ zur manuellen Verwaltung eines OnDestinationChangedListener verwendet werden. (I19c4a, #89, b/163947280)

Mehrere Back Stacks

Der NavController verwaltet den Back-Stack von Zielen. Er fügt dem Back-Stack Ziele hinzu, wenn Sie mit navigate() fortfahren, und entfernt sie, wenn Sie popBackStack() aufrufen oder die Schaltfläche „Zurück“ des Systems auslösen. Die vorhandene Klasse NavOptions und die Integration in <action>-Einträge in der XML-Datei des Navigationsdiagramms wurden erweitert, um das Speichern und Wiederherstellen des Back-Stacks zu unterstützen. (b/80029773)

Im Rahmen dieser Änderung speichern und wiederherstellen die NavigationUI-Methoden von onNavDestinationSelected(), BottomNavigationView.setupWithNavController() und NavigationView.setupWithNavController() jetzt automatisch den Status von Zielen, die eingeblendet wurden, sodass mehrere Back-Stacks ohne Codeänderungen unterstützt werden. Wenn Sie die Navigation mit Fragmenten verwenden, ist dies die empfohlene Methode zur Integration mehrerer Back Stacks. (Ie07ca)

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

  • In Navigations-XML kann das Element <action> jetzt die booleschen Attribute app:popUpToSaveState und app:restoreState verwenden, um den Status aller Ziele, die über app:popUpTo geöffnet wurden, zu speichern und den Status des Ziels wiederherzustellen, das als app:destination übergeben wurde:

    <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 navOptions Kotlin DSL können Sie die boolesche Eigenschaft restoreState und die boolesche Eigenschaft 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
      }
    }
    
  • Beim manuellen Erstellen eines NavOptions-Objekts mithilfe von NavOptions.Builder können Sie die setRestoreState() und die neue Überlastung für setPopUpTo() verwenden, für die ein zusätzlicher saveState-Parameter erforderlich ist.

    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 speichert NavController den Status jeder NavBackStackEntry und stellt sie wieder her, einschließlich aller ViewModel-Instanzen auf Ebene des Navigationsziels. Die Navigator APIs wurden aktualisiert, damit jede Navigator das Speichern und Wiederherstellen ihres eigenen Status unterstützen kann.

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

Navigationsrouten

Eine Route ist ein String, der ein Ziel eindeutig identifiziert. Früher wurde es nur in Navigation Compose verwendet. Inzwischen gehört dieses Konzept zu den wichtigsten Navigations-APIs. Dies bietet eine Alternative zur Verwendung von Ganzzahl-IDs, wenn Sie Ihre Grafik über die Navigation Kotlin DSL erstellen. (b/172823546)

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

Dies hatte einige Auswirkungen auf die API:

  • Die Kotlin-Eigenschaft popUpTo in 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 von früheren Versionen von Navigation Compose auf Navigation Compose 2.4.0-alpha01 aktualisieren, bedeutet dies, dass die folgenden Importe in 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 in NavDestination ersetzt, sodass Sie navBackStackEntry.destination.route direkt aufrufen können.

API-Änderungen

  • Alle Navigationsartefakte wurden in Kotlin neu geschrieben. Dadurch wurde die Null-Zulässigkeit von Klassen mit generischen Werten (z. B. abgeleitete NavType-Klassen) verbessert. Alle Kotlin-Erweiterungsfunktionen, die früher Teil der -ktx-Artefakte waren, wurden in ihre jeweiligen Hauptartefakte verschoben. Die -ktx-Artefakte werden weiterhin veröffentlicht, sind aber komplett leer. (b/184292145)
  • NavDeepLinkBuilder unterstützt jetzt das Hinzufügen mehrerer verschiedener Ziele zum generierten Back-Stack. (I3ee0d, b/147913689)
  • Factory-Funktionen für DynamicNavHostFragment hinzufügen (Icd515, b/175222619)
  • Die eindeutige ID einer NavBackStackEntry wird jetzt im Rahmen ihrer öffentlichen API bereitgestellt. (Ie033a)
  • Die Felder name und argument sowie die destruktiven Funktionen von NamedNavArgument sind jetzt öffentlich. (#174, b/181320559)
  • Es wurde eine neue NavBackStackEntry#provideToCompositionLocals-Erweiterung eingeführt, die den relevanten lokalen Kompositionen die NavBackStackEntry bereitstellt. (#175, b/187229439)

Sichere Argumente

  • Sichere Args generiert jetzt eine fromSavedStateHandle()-Methode für jede NavArgs-Klasse. (Nr. 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)
    }
    
  • Sichere Argumente wurden aktualisiert, sodass sie von KotlinPoet 1.8.0 abhängig sind. (Nr. 172, b/183990444)

Änderungen im Verhalten

  • Die Navigation hängt jetzt vom Lebenszyklus 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 Lebenszyklus 2.3.0 eingeführte Hauptthreaderzwingung angepasst. (b/171125856)
  • Beim Parsen von Enum-Argumenten von Deeplinks wird jetzt nicht mehr zwischen Groß- und Kleinschreibung unterschieden. So kann ein Deeplink wie http://www.example.com/red mit einem www.example.com/{color}-Deeplink übereinstimmen, selbst wenn die Aufzählung den Wert RED hat. (#152, b/135857840)

Compose-Kompatibilität

  • androidx.navigation:navigation-compose:2.4.0-alpha01 ist nur mit der E-Mail-Adresse „Compose“ ab Version 1.0.0-beta07 kompatibel.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem Platzhalter für nachgestellte Argumente Vorrang vor Deeplinks mit genau übereinstimmendem Suffix hatten. (Nr. 153, b/184072811)
  • NavHostFragment unterstützt jetzt benutzerdefinierte Navigatoren, die dieselbe @Navigator.Name("dialog") wie die Standardeinstellung DialogFragmentNavigator verwenden. (Ib1c2c, b/175979140)
  • Das Verhalten von NavigatorProvider#addNavigator wurde verbessert, sodass ein wiederholtes Aufrufen mit derselben Instanz keine Probleme verursacht. (#176, b/187443146)

Externe Beiträge

  • Vielen Dank, simonschiller, dass Sie die Unterstützung für sichere Args generieren, die eine fromSavedStateHandle()-Methode für jede NavArgs-Klasse generiert. (Nr. 122, b/136967621)
  • Vielen Dank, Bradleycorn, dass beim Parsen von Enum-Argumenten aus Deeplinks die Groß-/Kleinschreibung berücksichtigt wird. (#152, b/135857840)
  • Vielen Dank für osipxd, dass du ein Problem behoben hast, bei dem Platzhalter für nachgestellte Argumente Vorrang vor Deeplinks mit exaktem Suffix haben. (Nr. 153, b/184072811)
  • Vielen Dank, tatocaster, dass du Safe Args aktualisiert hast, sodass sie von KotlinPoet 1.8.0 abhängig sind. (Nr. 172, b/183990444)
  • Vielen Dank, jossiwolf, dass du die Felder name und argument und die destruktiven Funktionen von NamedNavArgument veröffentlicht hast. (#174, b/181320559)
  • Danke, jossiwolf für die Einführung der neuen NavBackStackEntry#provideToCompositionLocals-Erweiterung, mit der die NavBackStackEntry für die relevanten lokalen Nutzer bereitgestellt wird. (#175, b/187229439)
  • Danke, jossiwolf, dass du das Verhalten von NavigatorProvider#addNavigator verbessert hast, 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 wurde veröffentlicht. Version 1.0.0-alpha10 enthält diese Commits.

API-Änderungen

  • NavHost akzeptiert jetzt eine Modifier, die an den zusammensetzbaren Container übergeben wird, der die zusammensetzbaren Zielanwendungen zusammenfasst. (I85aca, b/175125483)

Fehlerkorrekturen

  • NavHost funktioniert jetzt auch dann, wenn kein OnBackPressedDispatcherOwner gefunden wird, wie es bei der Vorschau von NavHost der Fall ist. (I7d8b4)
  • Die Funktion „Schreibassistent“ hängt jetzt von der Navigation 2.3.5 ab. Damit wurde ein Problem behoben, das bei der Verwendung von BackHandler innerhalb eines NavHost-Ziels aufgetreten ist. (I7e63b, b/182284739)

Version 1.0.0-alpha09

10. März 2021

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

API-Änderungen

  • LocalViewModelStoreOwner.current gibt jetzt einen ViewModelStoreOwner-Wert zurück, der Nullwerte zulässt, um besser festzustellen, ob ein ViewModelStoreOwner in der aktuellen Zusammensetzung verfügbar ist. APIs, die eine ViewModelStoreOwner benötigen, wie viewModel() und NavHost, geben trotzdem eine Ausnahme aus, wenn kein ViewModelStoreOwner festgelegt ist. (Idf39a)

Fehlerkorrekturen

  • Navigation Compose hängt jetzt von Navigation 2.3.4 ab. Dort wurde die Korrektur behoben, dass versucht wurde, dasselbe ViewModelStore-Objekt festzulegen, nachdem die Grafik festgelegt wurde. (I65c24, b/177825470)

Version 1.0.0-alpha08

24. Februar 2021

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

Neue Funktionen

  • NavHost gibt nun die NavBackStackEntry des Ziels für LocalSavedStateRegistryOwner CompositionLocal an. Dadurch wird sichergestellt, dass jeder direkt in SavedStateRegistry gespeicherte Status gespeichert und zusammen mit dem Ziel wiederhergestellt wird. (I435d7, b/179469431)

Version 1.0.0-alpha07

10. Februar 2021

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

Aktualisierung der Abhängigkeiten

Version 1.0.0-alpha06

28. Januar 2021

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

API-Änderungen

  • Es wurde eine getBackStackEntry(route: String)-Erweiterungsmethode für NavController hinzugefügt, die die verknüpften NavBackStackEntry zurückgibt. (If8931)

Version 1.0.0-alpha05

13. Januar 2021

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

Aktualisiert und abhängig von Compose 1.0.0-alpha10.

Version 1.0.0-alpha04

16. Dezember 2020

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

  • Aktualisiert, um die Kompatibilität mit „Compose“ (1.0.0-alpha09) zu verbessern.

Version 1.0.0-alpha03

2. Dezember 2020

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

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem popBackStack() und navigateUp() nach einer Konfigurationsänderung nicht funktionierten oder dass der Vorgang beendet und die Wiederherstellung durchgeführt wurde. (Icea47, b/173281473)
  • Das Navigieren zu einer verschachtelten Grafik 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 wurde veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.

API-Änderungen

  • Beim Erstellen der Navigation werden jetzt NavOptions für die Verwendung von popUpTo und launchSingleTop-Operationen unterstützt (If96c3, b/171468994)
  • Es wurde eine Navigationsfunktion hinzugefügt, die eine Route anstelle einer ID verwendet, mit der sich verschachtelte Grafiken in der Navigationsfunktion vom Typ „DSL“ erstellen lassen. (I1661d)
  • „startDestination“ steht jetzt in der Liste der Parameter für einen NavHost (Ie620e) vor der Route.
  • Sie können jetzt eine Grafik erstellen, die die Route als Startziel außerhalb einer zusammensetzbaren NavHost-Funktion verwendet. (Iceb75)

Version 1.0.0-alpha01

28. Oktober 2020

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

Neue Funktionen

Das Artefakt navigation-compose ermöglicht die Integration zwischen der Navigationskomponente und Jetpack Compose. Sie verwendet @Composable-Funktionen als Ziele in Ihrer Anwendung.

Diese erste Version bietet folgende Vorteile:

  • Eine zusammensetzbare Funktion für NavHost, mit der Sie Ihre Navigationsgrafik über eine Kotlin-DSL erstellen können.
  • Geltungsbereich des Lebenszyklus, ViewModel und des gespeicherten Status auf Zielebene.
  • Automatische Integration mit der Zurück-Schaltfläche des Systems
  • Unterstützung für die Übergabe von Argumenten, das Anhängen von Deeplinks an Ziele und die Rückgabe von Ergebnissen an vorherige Ziele.
  • Erstellen Sie bestimmte Hilfskräfte in rememberNavController() und currentBackStackEntryAsState(), um den Windstatus zu ermöglichen und NavController mit zusammensetzbaren Funktionen außerhalb von NavHost zu verbinden (z. B. eine untere Navigationsleiste).

Weitere Informationen finden Sie in der Anleitung zur Navigation erstellen.

Version 2.3.5

Version 2.3.5

7. April 2021

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

Neue Funktionen

  • Wenn Sie mit NavDeepLinkRequest oder Uri navigieren, können Sie jetzt auf Uri, Aktion und MIME-Typ im resultierenden Ziel zugreifen. Dazu rufen Sie den Intent aus Argumenten über KEY_DEEP_LINK_INTENT ab. Dies entspricht der Funktionalität, die bereits für externe Deeplinks verfügbar ist. (I975c3, b/181521877)

Fehlerkorrekturen

  • OnBackPressedCallbacks wurde einem Dispatcher mit NavBackStackEntry hinzugefügt, da der LifecycleOwner nun ordnungsgemäß abfängt, nachdem der Aktivitätslebenszyklus STOPPED ist, dann STARTED (Iff94f, b/182284739)
  • Beim Parsen der Deeplink-Domain wird jetzt nicht mehr zwischen Groß- und Kleinschreibung unterschieden, sodass www.example.com sowohl mit www.example.com als auch mit www.Example.com übereinstimmt. Bei Namen von Abfrageparametern wird weiterhin zwischen Groß- und Kleinschreibung unterschieden. (Nr. 144, b/153829033)
  • Ein NullPointerException wurde behoben, das auftreten konnte, wenn ein Ziel mehrere Standardargumente hat, die keine Nullwerte zulassen können, und Sie zu diesem Ziel navigieren, während Sie nur einen Teil dieser Argumente überschreiben. (aosp/1644827)

Aktualisierung der Abhängigkeiten

  • Das Gradle-Plug-in „Navigation Safe Args“ ist jetzt für die Version 1.4.31 des Kotlin-Gradle-Plug-ins erforderlich. (aosp/1661058, b/181156413)

Externer Beitrag

  • Vielen Dank, bentrengrove für die Pull-Anfrage, durch die beim Parsen der Deeplink-Domain die Groß-/Kleinschreibung nicht berücksichtigt wird. (Nr. 144, b/153829033)

Version 2.3.4

Version 2.3.4

10. März 2021

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

Neue Funktionen

  • ReferenceType-Argumente können jetzt korrekt geparst werden, wenn sie als Teil eines Deeplink-URI gesendet werden. Es werden sowohl ganzzahlige Rohdaten als auch Hexadezimalwerte mit dem Präfix 0x unterstützt. (Nr. 127, b/179166693)
  • Die android:defaultValue für ein Argument mit app:argType="float" unterstützt jetzt ganzzahlige Standardwerte, sodass Sie android:defaultValue="0" anstelle von 0.0 verwenden können. (Nr. 117, b/173766247)

Fehlerkorrekturen

  • Ein hängender Installationsfortschritt bei der Nutzung dynamischer Funktionen von Navigation wurde behoben. (Ib27a7, b/169636207)
  • Der Aufruf von setViewModelStore oder setLifecycleOwner mit demselben Objekt, das bereits festgelegt wurde, ist nun ein No-Op (Idf491, b/177825470).
  • Safe-Args fügt jetzt Unterdrückungsannotationen zu den richtigen Methoden hinzu, wenn Java verwendet wird. (I8fbc5, b/179463137)

Externe Beiträge

  • Vielen Dank an JvmName für die Pull-Anfrage, mit der die ReferenceType-Argumente jetzt richtig geparst werden können, wenn sie als Teil eines Deeplink-URI gesendet werden. (Nr. 127, b/179166693)
  • Vielen Dank, tatocaster, dass die Pull-Anfrage defaultValue für ein Argument mit app:argType=”float” zugelassen hat und jetzt ganzzahlige Standardwerte unterstützt. (Nr. 117, b/173766247)

Version 2.3.3

Version 2.3.3

27. Januar 2021

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

Fehlerkorrekturen

  • Es gibt keinen Absturz mehr, wenn ein NavBackStackEntry per Pop-up aufgerufen wird, bevor seine Lifecycle nach CREATED verschoben wird. (Ie3ba3)
  • Eine durch b/171364502 verursachte Regression wurde behoben, bei der das Aufrufen einer Aktivität mit dem Wert 0 für die Animationsressource den Fehler ResourceNotFoundException verursachte. (I7aedb, b/176819931)

Version 2.3.2

Version 2.3.2

2. Dezember 2020

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

Fehlerkorrekturen

  • Es wurde eine Regression in NavigationUI behoben, bei der über ein <activity>-Ziel mit onNavDestinationSelected keine Aktivität zur Aktivität aufgerufen werden konnte. (I22e34, b/171364502)
  • navigation-dynamic-features-fragment hat dazu geführt, dass mehrmals zum neu installierten Ziel navigiert wurde. Dieses Problem wurde behoben. (aosp/1486056, b/169636207)
  • Ein Problem wurde behoben, bei dem Standardargumente nicht an OnDestinationChangedListener-Instanzen gesendet wurden, wenn launchSingleTop verwendet wurde. (I2c5cb)
  • Ein Problem wurde behoben, bei dem beim Aufrufen eines verschachtelten Navigationsdiagramms keine neue Graph-Instanz im Back-Stack erstellt wurde. (Ifc831)
  • Es wurde ein Problem behoben, bei dem die Verwendung von navigate() mit einem popUpTo, das das letzte Ziel in einem Navigationsdiagramm entfernt hat, nicht sofort das Navigationsdiagramm zerstört und aus dem Back-Stack entfernt hat. (I910a3)
  • Navigation SafeArgs verwendet jetzt die 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 Stamm-Dekor-Ansicht eines DialogFragment. 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 wurde veröffentlicht. Version 2.3.1 enthält diese Commits.

Neue Funktionen

  • Standard-Animator-Ressourcen wurden der Navigations-UI hinzugefügt und werden gegenüber den Standard-Animationsressourcen empfohlen. (b/167430145)
  • NavOptions überschreiben jetzt den Hashcode und die Gleichheitsmethode (b/161586466).
  • Die Navigation schließt jetzt das aktuelle Ziel in die Ausnahme „Kein Ziel mit ID“ ein. Dadurch sollte die Fehlerbehebung für Entwickler verbessert werden. (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)

Abhängigkeitsänderungen

  • navigation-ui hängt jetzt von DrawerLayout 1.1.1 ab und sorgt dafür, dass NavigationUI die Leiste auch dann öffnen kann, wenn LOCK_MODE_LOCKED_CLOSED oder LOCK_MODE_LOCKED_OPEN verwendet wird. (b/162253907)
  • „Sichere Args“ hängt jetzt von KotlinPoet 1.6.0 (aosp/1435911) ab
  • Sichere Args sind jetzt abhängig von AGP 4.0.1 (aosp/1442337).

Version 2.3.0

Version 2.3.0

24. Juni 2020

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

Große Ä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 erfolgt automatisch nach Bedarf. Weitere Informationen finden Sie unter Mit Funktionsmodulen navigieren.
  • Navigationstests: Das Artefakt navigation-testing stellt ein TestNavHostController bereit, mit dem Sie das aktuelle Ziel festlegen und den Back-Stack nach Navigationsvorgängen prüfen können. Weitere Informationen finden Sie unter Navigation testen.
  • Ergebnis zurückgeben: Über die NavBackStackEntry, die jedem Ziel im Back-Stack der Navigation zugeordnet ist, können Sie jetzt auf ein SavedStateHandle-Objekt zugreifen, das zum Speichern kleiner Mengen des gespeicherten Zustands geeignet ist, der einem bestimmten Back-Stack-Eintrag zugeordnet werden soll. Weitere Informationen finden Sie unter Ergebnis an das vorherige Ziel zurückgeben.
  • NavigationUI-Unterstützung für Openable: Alle Verwendungen von DrawerLayout in NavigationUI wurden durch die allgemeinere Openable-Oberfläche ersetzt, die in CustomView 1.1.0 hinzugefügt und von DrawerLayout in DrawerLayout 1.1.0 implementiert wurde.
  • Unterstützung für Aktion und MIME-Typ in Deeplinks: Deeplinks werden zusätzlich zu den bisher verfügbaren app:uri unterstützt, sodass jetzt app:action und app:mimeType unterstützt werden. NavController unterstützt jetzt die Navigation über eine beliebige Kombination dieser Felder über die neue NavDeepLinkRequest-Klasse. Weitere Informationen finden Sie unter Mit NavDeepLinkRequest navigieren.

Bekannte Probleme

  • In der Manifestzusammenführung werden Deeplink-Aktionen und MIME-Typen noch nicht unterstützt. Bis diese Schritte abgeschlossen sind, enthalten die über das <nav-graph>-Element in deinem Manifest generierten <intent-filter>-Elemente weder deinen MIME-Typ noch im <data>-Element deines benutzerdefinierten <action>-Objekts. Du musst deinem Manifest manuell eine entsprechende <intent-filter> hinzufügen.

Version 2.3.0-rc01

10. Juni 2020

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

Fehlerkorrekturen

  • Ein NullPointerException wurde behoben, bei dem eine Instanz eines Ziels ohne Argumente durch eine andere Instanz mit Argumenten durch singleTop ersetzt wurde. (b/158006669)
  • Alle von NavController ausgegebenen destination is unknown-Ausnahmen enthalten jetzt zusätzliche Debugging-Informationen, mit denen sich der Status von NavController ermitteln lässt. (b/157764916)

Version 2.3.0-beta01

20. Mai 2020

androidx.navigation:navigation-*:2.3.0-beta01 wurden freigegeben. Version 2.3.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Lifecycle von NavBackStackEntry nach dem Beenden eines Prozesses nicht korrekt aktualisiert wurde. (b/155218371)
  • OnDestinationChangedListener Instanzen, die vor dem Aufruf von setGraph() registriert wurden, werden jetzt nach dem Beenden eines Prozesses ordnungsgemäß an das wiederhergestellte Ziel gesendet. (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)

Aktualisierung der Abhängigkeiten

Version 2.3.0-alpha06

29. April 2020

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

Neue Funktionen

  • Deeplinks werden jetzt zusätzlich zu den bisher verfügbaren app:uri unterstützt: app:action und app:mimeType. NavController unterstützt jetzt die Navigation über eine beliebige Kombination dieser Felder über die neue NavDeepLinkRequest-Klasse. (b/136573074, b/135334841)

API-Änderungen

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

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Deeplink-Intents bei der Verwendung eines verschachtelten Startziels ignoriert wurden. (b/154532067)

Version 2.3.0-alpha05

15. April 2020

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

Neue Funktionen

  • Für dynamische Graph-Includes mit <include-dynamic> müssen Sie app:graphPackage nicht mehr angeben. Es wird ein Standard-String verwendet, indem nach einem Punkt das Suffix moduleName zum applicationId hinzugefügt wird. Wenn du graphPackage anpassen musst, wird jetzt ein ${applicationId}-Platzhalter unterstützt. (b/152696768)
  • In Navigationsdiagramm Kotlin DSL ist jetzt ein defaultArguments Map für Aktionen verfügbar, was die Möglichkeit widerspiegelt, Standardwerte für <action>-Elemente in Navigations-XML-Dateien festzulegen. (b/150345605)

Fehlerkorrekturen

  • Aus Navigation 2.2.2: Behebung eines IllegalStateException, wenn Deeplinks zum Startziel der Grafik verwendet werden und mehrere NavHostFragment-Instanzen in deiner Aktivität vorhanden waren. (b/147378752)

Aktualisierung der Abhängigkeiten

Version 2.3.0-alpha04

18. März 2020

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

Neue Funktionen

  • Zusätzliche Unterstützung für Aktivität von Funktionsmodulen und Fragmentziele in Navigation Kotlin DSL. (b/148969800)

API-Änderungen

  • Die DynamicExtras-Klasse verwendet kein Builder-Muster mehr und kann jetzt direkt erstellt werden. (aosp/1253671)
  • Für DynamicActivityNavigator wird jetzt im Konstruktor ein Context anstelle von Activity verwendet. (aosp/1250252)

Fehlerkorrekturen

  • NavigationUI ignoriert leere Labels (d.h. ein Ziel mit android:label=””) nicht mehr und legt den Titel nun korrekt auf einen leeren String fest. (b/148679860)

Aktualisierung der Abhängigkeiten

  • 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 wurde veröffentlicht. Version 2.3.0-alpha03 enthält diese Commits.

API-Änderungen

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

Fehlerkorrekturen

  • Die ProGuard-Regeln von navigation-common-ktx behalten jetzt korrekt nur die verwendeten NavArgs-Klassen anstelle aller NavArgs-Instanzen bei. (b/150213558)

Abhängigkeitsänderungen

  • Navigation ist wieder von Core 1.2.0 abhängig und hängt jetzt von Core 1.1.0 ab. So müssen Entwickler nicht zu einer neueren Abhängigkeit wechseln, wenn Navigation keine neuen APIs in Core 1.2.0 benötigt.

Version 2.3.0-alpha02

19. Februar 2020

androidx.navigation:navigation-*:2.3.0-alpha02 wurde 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 des gespeicherten Status eignet, die mit einem bestimmten Back-Stack-Eintrag verknüpft werden sollen. Ein Beispiel für einen Anwendungsfall finden Sie unter Ergebnisse zurückgeben. (b/79672220)

API-Änderungen

  • Es wurden praktische Methoden für getCurrentBackStackEntry() und getPreviousBackStackEntry() hinzugefügt, um das Abrufen von NavBackStackEntry für das aktuelle und das vorherige Ziel zu vereinfachen. (b/79672220)

Fehlerkorrekturen

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

Abhängigkeitsänderungen

Version 2.3.0-alpha01

5. Februar 2020

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

Neue Funktionen

  • Das neue navigation-testing-Artefakt stellt eine TestNavHostController-Klasse bereit. Diese Klasse bietet eine Alternative zur Verwendung eines simulierten NavController beim Testen der Navigation, mit dem Sie das aktuelle Ziel festlegen und den Back-Stack nach Navigationsvorgängen überprüfen können. (b/140884273)
  • Mit dem neuen navigation-dynamic-features-fragment (und seiner Transitiv-Abhängigkeit navigation-dynamic-features-runtime) kannst du Ziele oder vollständige Navigationsdiagramme (über <include-dynamic>) aus Funktionsmodulen hinzufügen, um die nahtlose Installation von On-Demand-Funktionsmodulen bei der Navigation zu diesen Zielen zu ermöglichen. Weitere Informationen finden Sie unter Mit Funktionsmodulen navigieren. (b/132170186)

Fehlerkorrekturen

  • In der Navigation 2.2.1: Deeplinks ohne Suchparameter ignorieren jetzt korrekt alle Abfrageparameter. Sie werden nicht an nachgestellte {argument}-Elemente angehängt oder entsprechen nicht dem Deeplink. (b/147447512)
  • Aus Navigation 2.2.1: Die navigation-ui ProGuard-Regeln für DrawerArrowDrawable wurden aktualisiert, um sicherzustellen, dass android.enableJetifier=true nicht erforderlich ist. (b/147610424)
  • In der Navigation 2.2.1: Das Modul navigation-common-ktx hat jetzt einen eindeutigen Namen für das Manifestpaket und hat nicht mehr denselben Namen für das Manifestpaket wie navigation-runtime-ktx. (aosp/1141947)

Aktualisierung der Abhängigkeiten

Version 2.2.2

Version 2.2.2

15. April 2020

androidx.navigation:navigation-*:2.2.2 wurden freigegeben. Version 2.2.2 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein IllegalStateException behoben, bei dem Deeplinks zum Startziel der Grafik verwendet werden, wenn in deiner Aktivität mehrere NavHostFragment-Instanzen vorhanden waren. (b/147378752)
  • NavigationUI ignoriert leere Labels (d.h. ein Ziel mit android:label=””) nicht mehr und legt den Titel nun korrekt auf einen leeren String fest. Dies wurde bereits in Navigation 2.3.0-alpha04 veröffentlicht. (b/148679860)
  • Die ProGuard-Regeln von navigation-common-ktx behalten jetzt korrekt nur die verwendeten NavArgs-Klassen anstelle aller NavArgs-Instanzen bei. Dies wurde bereits in Navigation 2.3.0-alpha03 veröffentlicht. (b/150213558

Aktualisierung der Abhängigkeiten

Version 2.2.1

Version 2.2.1

5. Februar 2020

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

Fehlerkorrekturen

  • Deeplinks ohne Suchparameter ignorieren jetzt Suchparameter korrekt, statt sie an nachgestellte {argument}-Elemente anzuhängen oder sie 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 Namen für das Manifestpaket und hat nicht mehr denselben Namen für das Manifestpaket wie navigation-runtime-ktx. (aosp/1141947)

Aktualisierung der Abhängigkeiten

Version 2.2.0

Version 2.2.0

22. Januar 2020

androidx.navigation:navigation-*:2.2.0 wurde 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 eines Navigationsdiagramms im Back-Stack übergeben. Die zurückgegebene NavBackStackEntry bietet ein navigationsgesteuertes LifecycleOwner, ViewModelStoreOwner (dieselbes wird von NavController.getViewModelStoreOwner() zurückgegeben) und SavedStateRegistryOwner sowie die Argumente, die zum Starten dieses Ziels verwendet werden.
  • Integration von Lifecycle ViewModel SavedState: SavedStateViewModelFactory wird jetzt standardmäßig bei der Verwendung von by navGraphViewModels() oder des ViewModelProvider-Konstruktors mit einem ViewModelStoreOwner verwendet, der von NavController.getBackStackEntry() oder NavController.getViewModelStoreOwner() zurückgegeben wird.
  • Unterstützung von Suchparametern für Deeplinks: In Deeplinks mit Suchparametern werden jetzt neu angeordnete Suchparameter unterstützt. Argumente, die einen Standardwert haben oder bei denen Nullwerte zulässig sind, sind jetzt beim Abgleich von Deeplinks optional.
  • Verbesserte Unterstützung für Animationen: NavHostFragment verwendet jetzt FragmentContainerView aus Fragment 1.2.0. Dadurch wurden Probleme bei der Z-Reihenfolge von Animationen und die Weiterleitung von Fenstereinfügungen an Fragmente behoben.

Version 2.2.0-rc04

18. Dezember 2019

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

Fehlerkorrekturen

  • Die von navigation-ui verwendeten standardmäßigen Ausblendungsanimationen wurden so angepasst, dass sie den angepassten Ausblendungsanimationen in Fragment 1.2.0-rc04 entsprechen. (b/145769814)

Version 2.2.0-rc03

4. Dezember 2019

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

Fehlerkorrekturen

  • Es wurde ein Problem beim Parsen von Deeplinks behoben, bei dem Abfrageparameter und ein Argument als letzter Teil des Pfads verwendet wurden, wodurch mehr als ein Zeichen des Arguments des letzten Pfads nicht geparst werden konnte. (b/144554689)
  • Es wurde ein Problem beim Parsen von Deeplinks behoben, bei dem optionale Parameter "@null" statt null erhielten. (b/141613546)
  • NavHostFragment stellt das Diagramm jetzt nach einer Konfigurationsänderung korrekt wieder her, wenn es mit FragmentContainerView verwendet wird. (b/143752103)

Abhängigkeitsänderungen

  • Die Navigation hängt jetzt von Lebenszyklus 2.2.0-rc03, Lebenszyklusansichtsmodell SavedState 1.0.0-rc03, Aktivität 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 wurde veröffentlicht. Version 2.2.0-rc02 enthält diese Commits.

Abhängigkeitsänderungen

  • 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 wurde ohne Änderungen seit dem 2.2.0-beta01 freigegeben. Version 2.2.0-rc01 enthält diese Commits.

Version 2.2.0-beta01

9. Oktober 2019

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

Neue Funktionen

  • NavDestination und die zugehörigen abgeleiteten Klassen überschreiben jetzt toString(), um hilfreichere Informationen bei der Fehlerbehebung bereitzustellen. (b/141264986)

Verhaltensänderungen

  • Zusätzliche Suchparameter werden jetzt beim Abgleich von Deeplinks ignoriert, sodass der Abgleich nicht fehlschlägt. (b/141482822)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Argumente im Pfad eines Deeplinks ignoriert wurden, wenn auch Suchparameter angegeben wurden. (b/141505755)
  • Die Kotlin-Erweiterung navArgs() für Activity hat jetzt eine bessere Fehlermeldung, wenn keine Extras vorhanden sind. (b/141408999)
  • Von sicheren Args generierte Directions-Java-Klassen enthalten jetzt Standardwerte. (b/141099045)
  • Von sicheren Args generierte Args-Java-Klassen enthalten jetzt Standardwerte. (b/140123727)
  • Bei Verwendung eines Toolbar animiert NavigationUI die Textänderung beim Wechsel zwischen zwei Zielen der obersten Ebene nicht mehr. (b/140848160)

Version 2.2.0-alpha03

18. September 2019

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

Verhaltensänderungen

  • Der Aufruf von setViewModelStore() nach dem Aufrufen von setGraph führt jetzt zu einem IllegalStateException. Dies sollte bei der Ersteinrichtung immer vom NavHost festgelegt werden, damit alle NavBackStackEntry-Instanzen einen konsistenten Speicher für ViewModel-Instanzen haben. (aosp/1111821).

Fehlerkorrekturen

  • Ein ConcurrentModificationException wurde behoben, wenn ViewModel-Instanzen verwendet wurden, die an mehrere ViewModelStore-Instanzen mit einem Navigationsdiagrammbereich angehängt waren. (aosp/1112257)

Version 2.2.0-alpha02

5. September 2019

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

Neue Funktionen

  • Deeplinks mit Suchparametern unterstützen jetzt neu angeordnete Suchparameter. Argumente, die einen Standardwert haben oder bei denen Nullwerte zulässig sind, sind jetzt beim Abgleich von Deeplinks optional. (b/133273839)
  • Sie können jetzt NavController.getBackStackEntry() aufrufen und die ID eines Ziels oder eines Navigationsdiagramms im Back-Stack übergeben. Die zurückgegebene NavBackStackEntry bietet ein navigationsgesteuertes LifecycleOwner, ViewModelStoreOwner (dieselbes wird von NavController.getViewModelStoreOwner() zurückgegeben) und SavedStateRegistryOwner sowie die Argumente, die zum Starten dieses Ziels verwendet werden. (aosp/1101691, aosp/1101710)

Fehlerkorrekturen

  • Das Hinzufügen eines NavHostFragment zu ViewPager2 schlug mit einem IllegalArgumentException fehl. Dieses Problem wurde behoben. (b/133640271)
  • NavInflater vermeidet nun unnötige Aufrufe von getResourceName(), wodurch die Inflationszeit um bis zu 40 % verkürzt wird. (b/139213740)

Version 2.2.0-alpha01

7. August 2019

androidx.navigation:navigation-*:2.2.0-alpha01 wurde 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

  • Aus der Navigation 2.1.0-rc01: Die eingestellte getViewModelStore() API für NavController, die in 2.1.0-alpha02 eingeführt wurde, wurde entfernt. (aosp/1091021).

Fehlerkorrekturen

  • In NavHostFragment wird jetzt FragmentContainerView verwendet. Dadurch wurden Probleme bei der Z-Reihenfolge von Animationen und die Weiterleitung von Fenstereinschnitten an Fragmente behoben. (b/137310379)

Version 2.1.0

Version 2.1.0

5. September 2019

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

Wichtige Änderungen seit Version 2.0.0

  • Umfang von ViewModels auf eine Navigationsgrafik: Sie können jetzt ViewModels erstellen, die auf Navigationsebene festgelegt sind. Verwenden Sie dazu den Property-Delegaten by navGraphViewModels() für Kotlin-Nutzer, der die -ktx-Bibliotheken verwendet, 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, bei denen eine DialogFragment angezeigt wird, wenn Sie navigate aufrufen. NavHostFragment unterstützt standardmäßig Dialogziele. Weitere Informationen finden Sie unter Ziel über DialogFragment erstellen.
  • Navigation über den URI: Sie können jetzt navigate mit einem Uri verwenden, das die <deepLink>, die Sie einem Ziel hinzugefügt haben, dazu verwendet. Weitere Informationen finden Sie unter Navigation mit URI.
  • NavHostController: APIs, die speziell zum Erstellen einer benutzerdefinierten NavHost verwendet werden, wurden zu NavHostController verschoben. Dadurch können Implementierungen NavController mit dem Hosting-Objekt LifecycleOwner, OnBackPressedDispatcher und ViewModelStore verbinden.

Version 2.1.0-rc01

7. August 2019

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

API-Änderungen

  • Die verworfene getViewModelStore() API für NavController, die mit 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 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Fehlerkorrekturen

  • 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 wurde veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • NavigationUI animiert jetzt das Entfernen der Nach-oben-Schaltfläche, wenn setupWithNavController() mit Toolbar oder CollapsingToolbarLayout verwendet wird. (b/131403621)

Fehlerkorrekturen

  • Ein Zeitproblem wurde behoben, das auftrat, wenn mehrere NavHostFragments mit demselben Container mit findNavController() verwendet wurden. (b/136021571)

Version 2.1.0-alpha06

2. Juli 2019

androidx.navigation:*:2.1.0-alpha06 wurde 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 eine Integration in den Hostbereich des Navigationseditors zu erhalten. (b/133880955)

API-Änderungen

  • Die getViewModelStore() API für NavController wurde zugunsten der neuen Methode getViewModelStoreOwner() eingestellt, die eine ViewModelStoreOwner zurückgibt. (aosp/987010)
  • Die Implementierung von Zielen für unverankerte Fenster, wie z. B. <dialog>-Ziele, wurde in eine Markierungsoberfläche (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)

Verhaltensänderungen

  • Die Navigation synchronisiert ihren Status jetzt korrekt mit dem, was auf dem Bildschirm angezeigt wird, wenn ein <dialog>-Ziel verwendet wird. Die Navigation zeigt daher jetzt automatisch <dialog>-Ziele an, wenn Sie zu einem Ziel ohne Dialog und ohne Aktivität navigieren, z. B. zu einem <fragment>-Ziel. (b/134089818)

Fehlerkorrekturen

  • Bei der Navigation unterdrückt jetzt die Animation, die beim Neuerstellen der Aktivität bei der Verarbeitung eines Deep-Links stattfindet, wodurch ein visuelles Blitzlicht behoben wird. (b/130362979)
  • Es wurde ein Fehler behoben, bei dem der Back-Stack der Navigation nicht synchron war, wenn ein Fragment beim Hinzufügen des anfänglichen Fragments per Pop-up angezeigt wurde. (b/133832218)

Version 2.1.0-alpha05

5. Juni 2019

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

API-Änderungen

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

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem der Back-Stack nach dem Aufrufen über den URI nicht korrekt war. (b/132509387)
  • Deeplinks, die automatisch von NavController verarbeitet werden, werden jetzt nur einmal ausgelöst. (b/132754763)

Version 2.1.0-alpha04

16. Mai 2019

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

Fehlerkorrekturen

  • NavHostFragment berücksichtigt app:defaultNavHost beim Abfangen der Systemereignisse der Zurück-Schaltfläche korrekt, wodurch eine Regression in Navigation 2.1.0-alpha03 behoben wird. b/132077777
  • DialogFragmentNavigator verarbeitet popBackStack()- und navigateUp()-Vorgänge jetzt korrekt. b/132576764
  • Das Problem IllegalStateException: unknown destination during restore beim wiederholten Wechseln zwischen verschachtelten Grafiken wurde behoben. b/131733658

Version 2.1.0-alpha03

7. Mai 2019

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

Bekannte Probleme

  • NavHostFragment fängt die Schaltfläche „Zurück“ des Systems trotz Verwendung von app:defaultNavHost="false" b/132077777 ab

Neue Funktionen

  • Sie können jetzt <dialog> Ziele erstellen, für die ein DialogFragment angezeigt wird, wenn Sie navigate aufrufen. NavHostFragment unterstützt standardmäßig Dialogziele. b/80267254
  • Sie können nicht nur navigate mit einer Ressourcen-ID oder einer NavDirections-Instanz aufrufen, sondern jetzt auch über eine Uri navigieren, die die <deepLink>, die Sie einem Ziel hinzugefügt haben, zum richtigen Ziel verwendet. b/110412864

Verhaltensänderungen

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

API-Änderungen

  • Die Methode createFragmentNavigator() von NavHostFragment wurde eingestellt und ihre Funktionen wurden in die neue Methode onCreateNavController() verschoben, um deutlicher zu machen, dass dies der richtige Einstiegspunkt für das Hinzufügen benutzerdefinierter Navigatoren ist, wenn Unterklassen von NavHostFragment erstellt werden. b/122802849
  • NavDestination wurde eine hasDeepLink()-Methode hinzugefügt, mit der Sie prüfen können, ob eine bestimmte Uri von diesem Ziel oder – im Fall einer 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-Back-Ereignisse mithilfe von OnBackPressedDispatcher ab, wodurch ein Problem bei der bedingten Navigation in Fragment-Lebenszyklusmethoden nach der Rückkehr zu einem Fragment behoben wird. b/111598096
  • Für sichere Argumente wird ein android:defaultValue=”@null” mit einer nicht angegebenen app:argType nun ordnungsgemäß als string-Argument abgeleitet. b/129629192

Version 2.1.0-alpha02

3. April 2019

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

Neue Funktionen

  • Sie können jetzt ViewModels erstellen, die auf Navigationsgrafikebene beschränkt sind. Verwenden Sie dazu den Attributdelegierung by navGraphViewModels() für Kotlin-Nutzer oder die getViewModelStore() API, die zu NavController hinzugefügt wurde. b/111614463

API-Änderungen

  • Du kannst einem <activity>-Ziel jetzt eine app:targetPackage hinzufügen, um den übereinstimmenden Paketnamen einzuschränken. Sie unterstützt app:targetPackage="${applicationId}" zur Beschränkung des Pakets auf Ihre eigene Anwendungs-ID. b/110975456

Fehlerkorrekturen

  • Die android:name für <activity>-Ziele werden zum Zeitpunkt der Inflation nicht mehr in eine Klasse geparst, wodurch ClassNotFoundExceptions bei der Verwendung dynamischer Funktionen verhindert werden. b/124538597

Version 2.1.0-alpha01

19. März 2019

Dies ist die erste Alphaversion von Navigation 2.1.0.

Abhängigkeitsänderungen

  • Die Navigation hängt jetzt von androidx.core:core:1.0.1 und androidx.fragment:fragment:1.1.0-alpha05 ab. In diesem Release wird auch die Abhängigkeit von androidx.legacy:legacy-support-core-utils:1.0.0 aufgehoben. b/128632612

API-Änderungen

  • Als Alternative zum Erstellen eines Klick-Listeners mit einer Ressourcen-ID und einem Bundle wurde die neue Methode Navigation.createNavigateOnClickListener(NavDirections) hinzugefügt. b/127631752
  • FragmentNavigator.instantiateFragment wurde verworfen. In der Standardimplementierung wird jetzt FragmentFactory zur Instanziierung von Fragmenten verwendet. b/119054429

Fehlerkorrekturen

  • Navigation sendet keinen Null-Bundle mehr, wenn Argumente an ein Ziel angehängt sind. Dadurch wird ein Problem bei der Verwendung von android:defaultValue="@null" behoben. b/128531879
  • Sichere Args hängen jetzt von KotlinPoet 1.1.0 ab, wodurch ein Problem mit extrem langen Paketnamen behoben wird. b/123654948

Version 2.0.0

Version 2.0.0

14. März 2019

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

Version 2.0.0-rc02

6. März 2019

Navigation 2.0.0-rc02 stellt neue Artefakte mit der Gruppen-ID androidx.navigation bereit und ändert ihre Abhängigkeiten in die AndroidX-Äquivalente.

Das Verhalten von 2.0.0-rc02 entspricht dem Verhalten von Navigation 1.0.0-rc02. Es sollten keine Änderungen an Ihrem Code erforderlich sein, um von 1.0.0-rc02 zu aktualisieren. Abgesehen von der Aktualisierung Ihrer Abhängigkeiten, um den neuen Abhängigkeiten zu entsprechen.

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

Abhängigkeiten vor AndroidX

Für die Versionen vor AndroidX von Navigation sind folgende Abhängigkeiten erforderlich:

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 sichere Argumente den folgenden classpath in die build.gradle-Datei der obersten 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 wurde ohne Änderungen gegenüber 1.0.0-rc02 veröffentlicht.

Version 1.0.0-rc02

26. Februar 2019

Dies ist der zweite Releasekandidat für die stabile Version 1.0.0 von Navigation. Diese Version enthält eine Reihe von Fehlerbehebungen.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, bei dem popBackStack() ignoriert wurde, wenn die Stammgrafik keine ID b/126251695 hatte.
  • navigateUp() verarbeitet jetzt korrekt die Navigation zurück zur Aufgabe Ihrer App, wenn sie nach der Verarbeitung eines Deeplinks ohne FLAG_ACTIVITY_NEW_TASK aufgerufen wird. b/126082008
  • Es wurde ein Problem behoben, bei dem ActivityNavigator.applyPopAnimationsToPendingTransition nicht die richtige Pop-Exit-Animation angewendet hat (b/126237567).
  • Kotlin-Code, der von Safe Args generiert wird, maskiert Kotlin-Keywords wie in und fun jetzt korrekt im Paketnamen, der mit der R-Klasse verknüpft ist. b/126020455

Version 1.0.0-rc01

21. Februar 2019

Dies ist ein Releasekandidat 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 b/124294805 wurde behoben.

Version 1.0.0-beta02

12. Februar 2019

Diese Version enthält eine Reihe kleinerer Verbesserungen und wichtiger Fehlerkorrekturen.

Neue Funktionen

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

Verhaltensänderungen

  • 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 Back-Stack per POP geladen wird. Dadurch wird eine in 1.0.0-beta01 eingeführte Regression behoben. b/123933201
  • Die Navigation legt den ClassLoader jetzt korrekt fest, wenn der Status der gespeicherten Instanz wiederhergestellt wird. Dadurch werden Probleme bei der Verwendung von benutzerdefinierten Klassen im gespeicherten Status Navigator oder in Argumenten vermieden, die an ein NavDestination gesendet werden. b/123893858
  • Von Safe Args generierte NavArgs-Klassen stürzen nicht mehr ab, wenn ein Parcelable[]-Argument aus dem Status der gespeicherten Instanz wiederhergestellt wird. b/123963545
  • „Safe Args“ bereinigt jetzt unnötige, generierte Kotlin-Klassen ordnungsgemäß. b/124120883

Version 1.0.0-beta01

4. Februar 2019

Dies ist die erste Betaversion von Navigation. Von nun an wird die Navigation API voraussichtlich bis zur nächsten Version stabil bleiben, sofern kein kritisches Problem auftritt. Diese Version enthält einige Fehlerbehebungen und Verhaltensänderungen.

Verhaltensänderungen

  • Die Navigation stellt jetzt sicher, dass Standardwerte von Argumenten zur Laufzeit und über sichere Args identisch behandelt werden. Daher können nur Argumente mit einem app:argType="reference" einen Standardwert haben, der auf eine andere Ressource verweist (z. B. @color/colorPrimary). Der Versuch, einen Referenzstandardwert mit einem anderen app:argType zu verwenden, führt zu einer Ausnahme beim Parsen der Navigations-XML. b/123551990
  • "Sichere Args" hängt jetzt vom Android-Gradle-Plug-in 3.3.0 ab aosp/888413
  • Sichere Args hängen jetzt von Kotlin 1.3.20 ab aosp/888414

Fehlerkorrekturen

  • Sichere Args können jetzt in Bibliotheks- und Funktionsmodulen aller Versionen des Android-Gradle-Plug-ins verwendet werden. b/121304903
  • Es wurde eine Regression behoben, bei der ein einzelner popBackStack()-Vorgang dazu führte, dass alle Kopien eines Ziels aus dem oberen Bereich des Back-Stacks entfernt wurden und nicht nur ein einzelnes Ziel. b/123552990
  • Es wurde ein Problem behoben, bei dem der Status FragmentNavigator mit dem Status NavController desynchronisiert wurde, was zu einem IllegalStateException führte, wenn versucht wurde, den Back-Stack wiederherzustellen. b/123803044
  • Es wurde ein Problem behoben, bei dem der Zurück-Pfeil bei NavigationUI bei Verwendung von ProGuard mit Verschleierung nicht angezeigt wurde. b/123449431
  • Der von Safe Args generierte Code verarbeitet jetzt ordnungsgemäß die Verwendung eines app:argType, der auf eine statische innere Klasse im Format .OuterClass$InnerClass verweist. b/123736741
  • Der von Safe Args generierte Java-Code verarbeitet jetzt globale Aktionen und tief verschachtelte Ziele ordnungsgemäß. b/123347762

Version 1.0.0-alpha11

23. Januar 2019

Dies ist eine Hotfix-Version von 1.0.0-alpha10, die ein Problem mit sicheren Args behebt.

Fehlerkorrekturen

  • Behebt ein Problem, bei dem Safe Args die mit globalen Aktionen verknüpften Directions-Klassen nicht importieren konnten. b/123307342

Version 1.0.0-alpha10

23. Januar 2019

Bekannte Probleme

  • Sichere Args kann die mit globalen Aktionen verknüpften Directions-Klassen nicht importieren. b/123307342

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

Neue Funktionen

  • Kotlin-Nutzer können jetzt den Property-Delegaten by navArgs() verwenden, um verzögert einen Verweis 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 wurde speziell für Kotlin-Module erstellt und verwendet Standardargumente und unveränderliche Klassen anstelle des Builder-Musters, das noch über das vorherige androidx.navigation.safeargs-Plug-in verfügbar ist. b/110263087

Änderungen im Verhalten

  • Übereinstimmende Deeplinks werden jetzt nach dem Deeplink mit den meisten übereinstimmenden Argumenten bevorzugt. b/118393029
  • Durch den Aufruf von setGraph() auf einem NavController wird jetzt der Back-Stack zurückgesetzt. b/111450672
  • Unbekannte Deeplinks lösen kein IllegalStateException mehr aus, werden aber ignoriert. Dadurch werden Probleme mit verschachtelten oder mehreren NavHostFragments behoben. b/121340440

Nicht abwärtskompatible Änderungen

  • Die Methode NavOptions.applyPopAnimationsToPendingTransition() zum Anwenden von Pop-Animationen auf eine Aktivität wurde zu ActivityNavigator verschoben. b/122413117
  • Sichere Args vermeiden jetzt das Duplizieren identischer Klassen für Aktionen ohne Argumente. Der Rückgabetyp für Methoden ohne Argument in generierten NavDirections-Klassen ist jetzt NavDirections. b/123233147
  • Über sichere Args generierte Directions-Klassen haben keinen öffentlichen Konstruktor mehr. Sie sollten nur mit den generierten statischen Methoden interagieren. b/123031660
  • Über sichere Args generierte 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 dem getArguments() von NavDirections ist jetzt als @NonNull und nicht als @Nullable gekennzeichnet. b/123243957

Fehlerkorrekturen

  • NavDeepLinkBuilder verarbeitet jetzt mehrere gleichzeitige PendingIntents am selben Ziel korrekt, indem die von Ihnen übergebenen Argumente zur Bestimmung der Eindeutigkeit verwendet werden. b/120042732
  • NavController verarbeitet popBackStack()-Vorgänge jetzt korrekt, wenn ein verschachteltes NavHostFragment oder andere untergeordnete Fragmente mit einem Back Stack verwendet werden. b/122770335
  • NavigationUI legt die Inhaltsbeschreibung der Schaltfläche „Nach oben“ jetzt korrekt fest. b/120395362
  • Von sicheren Args generierte Directions-Klassen verarbeiten jetzt globale Aktionen korrekt, die dieselbe ID wie eine Aktion an einem Ziel haben. b/122962504
  • Von sicheren Args generierte NavDirections-Klassen haben jetzt korrekt dieselben hashCode()-Werte, wenn equals() „true“ zurückgeben würde. b/123043662
  • FragmentNavigator gibt jetzt eine bessere Fehlermeldung aus, wenn du versuchst, ein benutzerdefiniertes FragmentTransactions in den FragmentManager der NavHostFragment auszuführen. Sie sollten immer getChildFragmentManager() verwenden. b/112927148

Version 1.0.0-alpha09

18. Dezember 2018

Diese Version enthält wichtige 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 als hilfreich erwiesen hat, empfehlen wir dringend alternative Teststrategien wie das Mocken der NavController-Instanz, um zu prüfen, ob die richtigen navigate()-Aufrufe ausgeführt werden. Dieser Ansatz wird im Single Activity Talk beim AndroidDevSummit 2018 ausführlich erläutert. Wir arbeiten an einer zusätzlichen Dokumentation speziell zum Testen mit Navigation.

Neue Funktionen

  • MenuItem-Objekte mit menuCategory="secondary" können nicht mehr als Back-Stack verwendet werden, wenn sie mit NavigationUI-Methoden verwendet werden. b/120104424
  • Mit AppBarConfiguration können Sie jetzt eine Fallback-OnNavigateUpListener-Instanz festlegen, die aufgerufen wird, wenn navController.navigateUp() den Wert false zurückgibt. b/79993862 b/120690961

Nicht abwärtskompatible Änderungen

  • Wenn ein <argument> mit einem argType="reference" verwendet wird, parst Navigation nicht mehr die Referenz, sondern gibt die Rohressourcen-ID selbst an. b/111736515
  • onNavDestinationSelected() wird jetzt standardmäßig zum Startziel des Navigationsdiagramms zurückgegeben, sodass sie mit den setup-Methoden konsistent sind. Füge menuCategory="secondary" zu deinem MenuItem hinzu, damit der Back-Stack nicht gelöscht wird. aosp/852869
  • Die fromBundle()-Methoden der generierten Args-Klassen verwenden jetzt einen Bundle-Wert, der nicht null ist, anstelle eines Bundle, in dem Nullwerte zulässig sind.aosp/845616

Fehlerkorrekturen

  • Argumente werden jetzt korrekt aus Deeplinks als korrekte argType und nicht immer als Strings geparst b/110273284.
  • Navigation exportiert seine öffentlichen Ressourcen jetzt korrekt b/121059552
  • Safe Args ist jetzt mit 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 wichtige API-Änderungen. Weitere Informationen finden Sie unten im Abschnitt Nicht abwärtskompatible Änderungen.

Neue Funktionen

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

Nicht abwärtskompatible Änderungen

  • OnNavigatedListener wurde in OnDestinationChangedListener umbenannt b/118670572
  • OnDestinationChangedListener übergibt jetzt auch den 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 der Grafik, um alle Ziele aus dem Back-Stack zu entfernen. b/119628354
  • ActivityNavigator.Extras verwendet jetzt ein Builder-Muster und bietet die Möglichkeit, alle Intent.FLAG_ACTIVITY_-Flags festzulegen (aosp/828140).
  • NavController.onHandleDeepLink wurde in handleDeepLink aosp/836063 umbenannt
  • Viele Klassen und Methoden, die nicht für abgeleitete Klassen bestimmt sind, z. B. NavOptions, NavInflater, NavDeepLinkBuilder und AppBarConfiguration, wurden zu final aosp/835681 gemacht.
  • Die verworfene Methode NavHostFragment.setGraph() wurde entfernt (aosp/835684).
  • Die verworfene Methode NavigationUI.navigateUp(DrawerLayout, NavController) wurde entfernt. aosp/835684
  • Die Fragmenterstellung wurde zu FragmentNavigator verschoben, damit die Fragmenterstellung einfacher an eine FragmentFactory delegiert werden kann. b/119054429
  • Der Konstruktor für NavGraphNavigator nimmt keinen Context aosp/835340 mehr an.
  • NavigatorProvider ist jetzt eine Klasse und keine Schnittstelle. Die Funktionalität der von getNavigatorProvider() zurückgegebenen NavigatorProvider hat sich nicht geändert. aosp/830660
  • NavDestination.navigate() wurde entfernt. Rufe stattdessen navigate() im Navigator auf. aosp/830663
  • Erhebliche Refaktorierung von Navigator, sodass OnNavigatorNavigatedListener nicht mehr erforderlich ist und navigate stattdessen das NavDestination zurückgibt, zu dem aufgerufen wurde.
  • Navigator-Instanzen können keine Pop-Ereignisse mehr an NavController senden. Erwägen Sie die Verwendung eines OnBackPressedCallback, um das Drücken der Schaltfläche „Zurück“ abzufangen und navController.popBackStack() aufzurufen. aosp/833716

Fehlerkorrekturen

  • popUpTo funktioniert jetzt konsistent, wenn das Ziel ein <navigation>-Element ist. b/116831650
  • Es wurden einige Fehler behoben, die bei der Verwendung verschachtelter Grafiken zu einem IllegalArgumentException führten b/118713731 b/113611083 b/113346925 b/113305559
  • Das Attribut dataPattern von <activity>-Zielen füllt jetzt Argumente aus Nicht-String-Argumenten, indem toString() b/120161365 aufgerufen wird.

Sichere Argumente

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

Version 1.0.0-alpha07

29. Oktober 2018

Neue Funktionen

  • Mit der neuen Klasse AppBarConfiguration können Sie anpassen, welche Ziele als Ziele der obersten Ebene betrachtet werden sollen. Weitere Informationen finden Sie in der aktualisierten Dokumentation. b/117333663
  • Sie können jetzt Argumente an das Startziel der Grafik b/110300470 übergeben.
  • Für Deeplinks werden jetzt benutzerdefinierte Schemas mit Punkten, Bindestrichen und Pluszeichen unterstützt. b/112806402

Nicht abwärtskompatible Änderungen

  • Das Modul navigation-testing-ktx wurde in die navigation-testing artifact integriert und wird nicht mehr veröffentlicht.
  • Das Artefakt navigation-testing ist jetzt von der Kotlin-Standardbibliothek abhängig. Die API wurde so geändert, dass sie den Kotlin-Konventionen entspricht. Sie können sie jedoch 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

  • In Deeplinks werden Suchparameter jetzt korrekt geparst. b/110057514
  • Bei Aktivitätszielen werden jetzt alle Animationen zum Ein- und Ausblenden korrekt angewendet. b/117145284
  • Ein Absturz behoben, der nach Konfigurationsänderungen bei der Verwendung von benutzerdefinierten Navigatoren auftrat, wurde behoben. b/110763345

Sichere Argumente

  • Sichere Argumente haben jetzt eine feste Abhängigkeit vom Android-Gradle-Plug-in 3.2.1. b/113167627
  • Es können jetzt Routen für innere Klassen generiert werden. b/117407555
  • Ein Problem beim Generieren von Routen in einer <include>-Grafik wurde behoben. b/116542123

Version 1.0.0-alpha06

20. September 2018

Neue Funktionen

API-Änderungen

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

Fehlerkorrekturen

  • NavigationUI.setupWithNavController() gibt keine Aufrufe mehr frei, wenn er mit Aufrufen einzelner Ziele verwendet wird b/111961977
  • Navigator onSaveState() wird jetzt nur noch einmal aufgerufen b/112627079

Sichere Argumente

  • Die „Directions“-Klassen für Navigationsziele erweitern jetzt die „Directions“-Klasse der übergeordneten Elemente, sofern vorhanden. b/79871405
  • Directions- und Args-Klassen 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 Backstack-Verhalten führt. b/111907708
  • Ein Fehler in equals() von generierten Args-Klassen wurde behoben. b/111450897
  • Build-Fehler in sicheren Args beheben. b/109409713
  • Konvertierung von Ressourcenkennungen in Java-Namen korrigieren b/111602491
  • Fehlermeldungen zur Null-Zulässigkeit im Plug-in „Safe Args“ wurden behoben.
  • Fügen Sie fehlende Anmerkungen für die Null-Zulässigkeit hinzu.

Version 1.0.0-alpha04

July 19, 2018

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

API-/Verhaltensänderungen

  • NavHostFragment legt immer das aktuelle Fragment als primäres Navigationsfragment fest, um sicherzustellen, dass untergeordnete Fragmentmanager vor dem äußeren NavController-Element platziert werden. b/111345778

Sichere Argumente

  • Nicht abwärtskompatible Änderung: app:type wurde zu app:argType geändert, um Konflikte mit anderen Bibliotheken wie ConstraintLayout 2.0.0-alpha1 b/111110548 zu vermeiden.
  • Fehlermeldungen von sicheren Args sind jetzt anklickbar b/111534438
  • Die Args-Klassen bestätigen jetzt, dass NonNull-Attribute tatsächlich nicht null sind. b/111451769
  • Zusätzliche NonNull-Annotationen wurden den von NavDirections und Args generierten Klassen b/111455455 b/111455456 hinzugefügt.

Fehlerkorrekturen

  • Ein Problem mit der Schaltfläche "Zurück" des Systems nach einem Deeplink zu einem Fragmentziel wurde behoben b/111515685.

Version 1.0.0-alpha03

12. Juli 2018

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

API-/Verhaltensänderungen

  • Eine NavigationUI.setupWithNavController-Methode für die Toolbar wurde hinzugefügt: b/109868820
  • Die NavigationUI.setupWithNavController-Methode für "CollapsingToolbarLayout" wurde hinzugefügt: b/110887183
  • popBackStack() gibt jetzt „false“ zurück, wenn der Back Stack leer ist oder die angegebene Ziel-ID sich nicht im Back Stack befindet. b/110893637
  • FragmentNavigator ignoriert nun Navigationsvorgänge, nachdem FragmentManager den Status gespeichert hat, sodass die Ausnahmen "Diese Aktion kann nach onSaveInstanceState nicht ausgeführt werden können" vermieden werden b/110987825.

Sichere Argumente

  • Nicht abwärtskompatible Änderung:Nicht alphanumerische Zeichen in Aktions- und Argumentnamen werden in den Namen der entsprechenden NavDirections-Methoden durch die Camel-Case-Schreibweise ersetzt.
    • Beispiel: DemoController.index wird zu setDemoControllerIndex b/79995048
    • Beispiel: action_show_settings wird zu actionShowSettings b/79642240
  • Nicht abwärtskompatible Änderung:Argumente werden jetzt standardmäßig als ungleich null betrachtet. Fügen Sie app:nullable="true" b/79642307 hinzu, um Nullwerte für String- und parzellierbare Argumente zuzulassen.
  • Sie können jetzt app:type="long" mit Standardwerten im Format „123L“ verwenden. b/79563966
  • Ab jetzt werden abparbare Argumente unterstützt, bei denen ein vollständig qualifizierter Klassenname für app:type verwendet wird. Der einzige unterstützte Standardwert ist "@null" b/79563966
  • Args-Klassen implementieren jetzt equals() und hashCode() b/79642246
  • Das Plug-in "Safe Args" kann jetzt auf Bibliotheksprojekte angewendet werden b/80036553
  • Das Plug-in "Safe Args" kann jetzt auf Feature-Projekte angewendet werden b/110011752

Fehlerkorrekturen

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

Version 1.0.0-alpha02

7. Juni 2018

Änderungen im Verhalten

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

  • Navigation URLDecodiert jetzt Argumente, die von Deeplinks-URLs geparst wurden. b/79982454

Fehlerkorrekturen

  • Es wurde ein IllegalStateException-Fehler behoben, der beim Aufrufen von Navigation von Fragment-Lebenszyklusmethoden ausstieg. b/79632233

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

  • Ein IllegalArgumentException bei Verwendung von "defaultNavHost="true" als untergeordnetes Fragment" wurde behoben. b/79656847

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

  • Ein IllegalArgumentException-Fehler beim Zurückkehren zu einer verschachtelten Grafik wurde behoben. b/80453447

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

  • Die Navigation erstellt jetzt den richtigen synthetischen Back-Stack für verschachtelte Grafiken. b/79734195

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

API-Änderungen

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

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

Version 1.0.0-alpha01

8. Mai 2018

Die Navigation stellt ein Framework für die Erstellung der In-App-Navigation bereit. Diese erste Version ist 1.0.0-alpha01.