Navigation
Letzte Aktualisierung | Stabile Version | Release Candidate | Beta-Ausgabe | Alphaversion |
---|---|---|---|---|
11. Dezember 2024 | 2.8.5 | - | - | 2.9.0-alpha04 |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von Navigation hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle
für Ihre App oder Ihr Modul die Abhängigkeiten für die erforderlichen Artefakte hinzu:
Groovy
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.8.4" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.8.4" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Safe Args
Wenn Sie Ihrem Projekt Safe Args hinzufügen möchten, fügen Sie der build.gradle
-Datei auf oberster Ebene die folgende classpath
hinzu:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.4" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.4" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Außerdem müssen Sie eines der beiden verfügbaren Plug-ins anwenden.
Wenn Sie Java-Code generieren möchten, der für Java- oder gemischte Java- und Kotlin-Module geeignet ist, fügen Sie der build.gradle
-Datei Ihrer App oder Ihres Moduls diese Zeile hinzu:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Alternativ können Sie Kotlin-Code generieren, der für reine Kotlin-Module geeignet ist. Fügen Sie dazu Folgendes hinzu:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
Gemäß der Anleitung Zu AndroidX migrieren muss android.useAndroidX=true
in Ihrer gradle.properties
-Datei enthalten sein.
Weitere Informationen zur Verwendung von Kotlin-Erweiterungen finden Sie in der ktx-Dokumentation.
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Bitte teilen Sie uns mit, wenn Sie neue Probleme feststellen oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können einem vorhandenen Problem Ihre Stimme geben, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Version 2.9
Version 2.9.0-alpha04
11. Dezember 2024
androidx.navigation:navigation-*:2.9.0-alpha04
wird veröffentlicht. Version 2.9.0-alpha04 enthält diese Commits.
Neue Funktionen
- Die typsicheren APIs, auf die zuvor nur über
reified
-Methoden zugegriffen werden konnte, d.h. Fürcomposable<YourScreen>
gibt es jetzt nicht reified Versionen, die direkt eineKClass
-Instanz annehmen.(Ia7eed, Id2879, Ibf244, I17d79, Id09d2, I54696, Ia47be, I93281, Ic1bf0, Iba4ee, If56a5, Icf969, I67644, I6f788, b/382094941, b/366291612, b/381938808)
In der folgenden Tabelle finden Sie die reified und KClass APIs.
reified | KClass |
---|---|
composable<TestClass> { } |
composable(TestClass::class) { } |
navigation<NestedGraph>(startDestination = TestClass::class) |
navigation(route = NestedGraph::class, startDestination = TestClass::class) |
dialog<TestClass> {} |
dialog(TestClass::class) {} |
navDeepLink<TestClass>(baseUri) |
navDeepLink(TestClass::class, baseUri) |
NavDeepLink.Builder.setUriPattern<TestClass>(baseUri) |
NavDeepLink.Builder.setUriPattern(TestClass::class, baseUri) |
NavDestinationBuilder.deepLink<TestDeepLink>(baseUri) { } |
NavDestinationBuilder.deepLink(TestDeepLink::class, baseUri) { } |
navController.getBackStackEntry<TestClass>() |
navController.getBackStackEntry(TestClass::class) |
navController.popBackStack<TestClass>(true) |
navController.popBackStack(TestClass::class, true) |
navController.clearBackStack<TestClass>() |
navController.clearBackStack(TestClass::class) |
NavOptions.setPopUpTo<TestClass>() |
NavOptions.setPopUpTo(TestClass::class) |
navOptions { popUpTo<TestClass> {...} } |
navOptions { popUpTo(TestClass::class) {...} } |
NavGraph.setStartDestination<TestClass>() |
NavGraph.setStartDestination(TestClass::class) |
NavGraph.findNode<TestClass>() |
NavGraph.findNode(TestClass::class) |
backStackEntry.toRoute<TestClass>() |
backStackEntry.toRoute(TestClass::class) |
savedStateHandle.toRoute<TestClass>() |
savedStateHandle.toRoute(TestClass::class) |
API-Änderungen
- Die kotlinspezifische
NavGraph.setStartDestination
-Überladung für die Typsicherheit ist für Java-Quellen ausgeblendet. (Ic640c, b/364634035)
Fehlerkorrekturen
- Unter Navigation
2.8.5
: Es wurde ein Problem behoben, bei demNavHost
inPredictiveBackHandler
eine Ausnahme auslösen konnte, wenn der Rückstapel auf einen Eintrag reduziert wurde und im selben Frame ein Systemrückschritt ausgelöst wurde. (I1a429, b/375343407) - Unter Navigation
2.8.5
:NavDestination
NullPointerException
wurde beim Aktualisieren desstartDestination
eines Diagramms korrigiert. (I99421, b/361560785)
Version 2.9.0-alpha03
13. November 2024
androidx.navigation:navigation-*:2.9.0-alpha03
wird veröffentlicht. Version 2.9.0-alpha03 enthält diese Commits.
Neue Funktionen
- Die Navigationstypsicherheit unterstützt jetzt Wertklassen als Route oder als Argumenttyp einer Route. (I9344a, b/374347483)
Fehlerkorrekturen
- Ein
ConcurrentModificationException
wurde behoben, das auftreten konnte, wenn einLifecycleObserver
, das an einNavBackStackEntry
angehängt ist, eine Änderung am Backstack auslöst, wenn der Host-LifecycleOwner
, z. B. die enthaltene Aktivität oder das Fragment, seinen Lebenszyklusstatus ändert. (Ia9494)
Version 2.9.0-alpha02
30. Oktober 2024
androidx.navigation:navigation-*:2.9.0-alpha02
wird veröffentlicht. Version 2.9.0-alpha02 enthält diese Commits.
Externer Beitrag
- Neue gängige
NavController.handleDeepLink(request: NavDeepLinkRequest)
-Methode. Viele Grüße Konstantin Tskhovrebov (I3e228)
Version 2.9.0-alpha01
16. Oktober 2024
androidx.navigation:navigation-*:2.9.0-alpha01
wird veröffentlicht. Version 2.9.0-alpha01 enthält diese Commits.
Neue Funktionen
- Benutzerdefinierte Navigationsoberflächen können jetzt ihre Ziele als Implementierung der
SupportingPane
-Benutzeroberfläche kennzeichnen. Dadurch wird derNavController
mitgeteilt, dass diese Ziele neben anderen Zielen angezeigt werden. Mit dieser Oberfläche können beispielsweise mehrere Ziele gleichzeitigRESUMED
sein. (Id5559) - Unter Navigation
2.8.3
: Es wurden neue Lint-Prüfungen für die Modulenavigation-common
,navigation-runtime
undnavigation-compose
hinzugefügt, um typsichere Routen zu identifizieren, die nicht korrekt mit@Serializable
annotiert sind. Diese Prüfung wird auf alleNavGraphBuilder
- undNavDeepLinkBuilder
-Erweiterungsfunktionen angewendet. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - Unter Navigation
2.8.3
: Es wurden neue Lint-Prüfungen für die Modulenavigation-common
,navigation-runtime
undnavigation-compose
hinzugefügt, um typsichere Routen mit Enum-Argumenten zu identifizieren, die nicht korrekt mit@Keep
annotiert sind. Diese Prüfung wird auf alleNavGraphBuilder
- undNavDeepLinkBuilder
-Erweiterungsfunktionen angewendet. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
Verhaltensänderungen
- Wenn Sie versuchen, eine
NavController
zu verwenden, die zuvorDESTROYED
war, wird jetzt eineIllegalStateException
ausgegeben. (I520da, b/369616172)
Fehlerkorrekturen
- Die Ausnahme „Enumerationsklasse nicht gefunden“ wurde aktualisiert, um die Verwendung der
@Keep
-Anmerkung vorzusehen, falls die Enumerationsklasse in minimierten Builds gelöscht wird. (I90e79, b/358137294)
Bekannte Probleme
- Die neuen Lint-Regeln, die in
Navigation 2.8.*
hinzugefügt wurden, verursachen beim Ausführen von Lint mit dem Android Gradle-Plug-in 8.4 und höher einenObsolete custom lint check
-Fehler. (b/368070326, b/371463741)
Version 2.8
Version 2.8.5
11. Dezember 2024
androidx.navigation:navigation-*:2.8.5
wird veröffentlicht. Version 2.8.5 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das
NavHost
inPredictiveBackHandler
eine Ausnahme auslösen konnte, wenn der Rückstapel auf einen Eintrag reduziert wurde und im selben Frame ein Systemrückschritt ausgelöst wurde. (I1a429, b/375343407) - Fehler beim Aktualisieren der
startDestination
einer Grafik mitNavDestination
NullPointerException
behoben. (I99421, b/361560785) - Ein Problem wurde behoben, durch das bei Verwendung von Navigation Compose und Aufrufen von „navigate“ im selben Frame, in dem die aktuelle Animation endet, eine unerwartete Skalierungsanimation verursacht wurde. (I26cb1, b/353294030)
- Ein
ConcurrentModificationException
wurde behoben, das auftreten konnte, wenn einLifecycleObserver
, das an einNavBackStackEntry
angehängt ist, eine Änderung am Backstack auslöst, wenn der HostLifecycleOwner
, z. B. die enthaltene Aktivität oder das Fragment, seinen Lebenszyklusstatus ändert. (Ia9494)
Version 2.8.4
13. November 2024
androidx.navigation:navigation-*:2.8.4
wird veröffentlicht. Version 2.8.4 enthält diese Commits.
Neue Funktionen
- Bei Navigation
2.9.0-alpha03
: Die Sicherheit des Navigationstyps unterstützt jetzt die Werteklasse als Route oder als Argumenttyp einer Route (I9344a, b/374347483)
Fehlerkorrekturen
- Unter Navigation
2.9.0-alpha01
: Wenn Sie versuchen, eineNavController
zu verwenden, die zuvorDESTROYED
war, wird jetzt eineIllegalStateException
ausgegeben. (I520da, b/369616172)
Version 2.8.3
16. Oktober 2024
androidx.navigation:navigation-*:2.8.3
wird veröffentlicht. Version 2.8.3 enthält diese Commits.
Neue Funktionen
- Es wurden neue Lint-Prüfungen für die Module
navigation-common
,navigation-runtime
undnavigation-compose
hinzugefügt, um typsichere Routen zu identifizieren, die nicht korrekt mit@Serializable
annotiert sind. Diese Prüfung wird auf alleNavGraphBuilder
- undNavDeepLinkBuilder
-Erweiterungsfunktionen angewendet. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - Neue Lint-Prüfungen für die Module
navigation-common
,navigation-runtime
undnavigation-compose
hinzugefügt, um typsichere Routen mit Enum-Argumenten zu identifizieren, die nicht korrekt mit@Keep
annotiert sind. Diese Prüfung wird auf alleNavGraphBuilder
- undNavDeepLinkBuilder
-Erweiterungsfunktionen angewendet. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
Fehlerkorrekturen
- Behoben wurde ein Problem, bei dem die neuen Lint-Regeln, die in
Navigation 2.8.*
hinzugefügt wurden, beim Ausführen von Lint mit dem Android Gradle-Plug-in 8.4 und höher einenObsolete custom lint check
-Fehler verursachten. (I1be3d, b/368070326, b/371463741)
Bekannte Probleme
- Beim Versuch, Lint mit Lint 16 (AGP 8.7) oder höher auszuführen, wird von Navigation Lint der Fehler „Obsolete custom lint check“ ausgegeben. (b/371926651)
Version 2.8.2
2. Oktober 2024
androidx.navigation:navigation-*:2.8.2
wird veröffentlicht. Version 2.8.2 enthält diese Commits.
Neue Funktionen
- Die Navigationstypsicherheit unterstützt jetzt serialisierbare Klassen, die
Double
,Double?
,DoubleArray
,DoubleArray?
,List<Double>
undList<Double>?
enthalten, ohne dass eine benutzerdefinierteNavType
erforderlich ist. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)
Fehlerkorrekturen
- Die Fehlermeldung wurde verbessert, wenn die Navigation das Argument einer Route nicht einem
NavType
zuordnen kann. Die neue Fehlermeldung enthält den Argumentnamen, den voll qualifizierten Argumentnamen und den voll qualifizierten Namen der Route. (Id8416, b/346264232)
Version 2.8.1
18. September 2024
androidx.navigation:navigation-*:2.8.1
wird veröffentlicht. Version 2.8.1 enthält diese Commits.
Neue Funktionen
- Es wurde eine neue Lint-Regel hinzugefügt, um die Verwendung der
popBackStack
-Funktion zu erzwingen, die einen reifierten Klassentyp annimmt, wenn versucht wird,popBackStack
mit typsicheren APIs zu verwenden. (Ief161, b/358095343)
Fehlerkorrekturen
- Für die Navigation ist jetzt erforderlich, dass die an die
startDestination
einesNavGraph
übergebene Route die Werte für alle erforderlichen Argumente enthält. Dazu gehören auch Argumente, die nicht null sein dürfen und keinen Standardwert haben. (I18e74, b/362594265) - Für Navigationsargumente, die für die Navigation sicher sind, wurde die Unterstützung für nicht nullwertige Strings hinzugefügt. „Null“-Werte werden jetzt so geparst und im Bundle gespeichert, wie sie sind. Das unterscheidet sich vom bisherigen Verhalten, bei dem „Null“-Werte in ein Nullobjekt geparst wurden. Diese Änderung gilt nur für Stringtypen, die nicht null sein dürfen. Nullbare Strings bleiben unverändert. (I08b4a, b/348936238)
- Ein
NavDestination
kann nur noch über einen Deeplink aufgerufen werden, der dem Ziel explizit hinzugefügt wurde. Das bedeutet auch, dass Sie nur mit der Überladung der Navigationsfunktion, die eine Stringroute annimmt, zu einer Route eines Ziels navigieren können. Dadurch wird eine Sicherheitslücke geschlossen, die es ermöglichte, Deeplinks zu einem potenziell geschützten Ziel zu erstellen. (Ie30e6)
Abhängigkeitsupdate
- Navigation Safe Args sind jetzt nicht mehr von Kotlin 2.X, sondern von Kotlin 1.9.24 abhängig. So müssen Entwickler nicht zwangsweise ein Update durchführen. (a4129a)
- Die Navigation „Schreiben“ hängt jetzt von Schreiben
1.7.2
ab.
Version 2.8.0
4. September 2024
androidx.navigation:navigation-*:2.8.0
wird veröffentlicht. Version 2.8.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.7.0
Typsicherheit der Kotlin-DSL für die Navigation
- Navigation bietet jetzt Typsicherheit für die Kotlin-DSL (von Navigation Compose verwendet) mit Kotlin-Serialisierung, damit Sie Ziele in Ihrem Navigationsgraphen über typsichere Objekte und Datenklassen definieren können:
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
Weitere Informationen finden Sie im Blogpost Navigation Compose meet Type Safety.
Navigation Compose Predictive Back
- Navigation Compose unterstützt jetzt die Vorhersage der In-App-Rückkehr über die neuen
SeekableTransitionState
APIs von compose-animation. So können Sie mit der Zurück-Geste das vorherige Ziel mit Ihrer benutzerdefinierten Überleitung aufrufen, bevor Sie sich entscheiden, die Transaktion über die abgeschlossene Geste zu bestätigen oder abzubrechen.
Navigationsfragment – Composeable
- Es wurde ein neues
navigation-fragment-compose
-Artefakt hinzugefügt, das eineComposableNavHostFragment
-Alternative zuNavHostFragment
enthält. Damit können Sie Ihren Navigations-XML-Dateien zusammensetzbare Ziele hinzufügen. Jedecomposable
-Zieladresse muss als@Composable
-Methode auf oberster Ebene ohne Argument angegeben werden, deren vollständig qualifizierter Name alsandroid:name
-Attribut für jedes Ziel verwendet wird. Wenn Sie zu einem dieser Ziele wechseln, wird ein enthaltendes Fragment erstellt, um die zusammensetzbaren Inhalte anzuzeigen.
// In HomeScreen.kt
@Composable
fun HomeScreen() {
// Your Composable content here
}
// In your navigation.xml
<composable
android:id="@+id/home_screen"
android:name="com.example.HomeScreenKt\$HomeScreen" />
Weitere Änderungen
- Navigation Compose hängt jetzt von Compose 1.7.0 ab.
- Für die Navigation gibt es jetzt eine neue
CollectionNavType<T>
-Klasse, eine Unterklasse vonNavType<T>
für sammlungsbasierte Argumente wie Listen, Arrays und Maps. Alle Standard-NavType
-Arrays (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
undStringArrayType
) werden jetzt von dieser neuen Klasse abgeleitet. NavType
bietet jetzt integrierte Unterstützung für Listen von Ganzzahlen, Strings, Booleschen Werten, Gleitkommazahlen und Ganzzahlen vom Typ „Long“.
Version 2.8.0-rc01
21. August 2024
androidx.navigation:navigation-*:2.8.0-rc01
wird veröffentlicht. Version 2.8.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Behebung eines Navigationsabsturzes, der beim Übergeben von Enumerationsklassen der obersten Ebene als typsichere Argumente auftrat. (I0ba76, b/358137294)
- Navigation 2.8 funktioniert jetzt richtig mit SDK 34 und wird erst mit der 2.9-Version zusammen mit den restlichen AndroidX-Bibliotheken auf SDK 35 umgestellt. (b/358798728)
Version 2.8.0-beta07
7. August 2024
androidx.navigation:navigation-*:2.8.0-beta07
wird veröffentlicht. Version 2.8.0-beta07 enthält diese Commits.
Bekannte Probleme
- Aufgrund von b/358137294 werden nur in einer anderen Klasse verschachtelte Enums standardmäßig unterstützt. Enums der obersten Ebene werden in der nächsten Version unterstützt.
Fehlerkorrekturen
- Bei der Navigation zu doppelten oder gemeinsamen Zielen wird das Ziel ausgewählt, das dem aktuellen Standort im Graphen am nächsten ist. (Ic89a4, b/352006850)
- Für die Navigation in sicheren Argumenten wurde jetzt ein neues
NavType.EnumType
hinzugefügt. Das bedeutet, dass fürEnum
-Typen keine benutzerdefiniertenNavType
mehr erforderlich sind. DerSerialName
derEnum
muss der standardmäßige voll qualifizierte Name sein. (I66d22, b/346475493) - Für die Navigation in sicheren Argumenten wurde die Unterstützung für typisierte Argumente mit Nullwert wie
Int?
,Long?
,Float?
,Boolean?
undEnum<*>?
hinzugefügt. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) - Für die
startDestination
vonNavGraph
werden jetzt die Standardargumentwerte verwendet, wenn die anNavGraph
übergebenestartDestination
-Route genau mitstartDestination.route
übereinstimmt. (I13762, b/354046047)
Version 2.8.0-beta06
24. Juli 2024
androidx.navigation:navigation-*:2.8.0-beta06
wird veröffentlicht. Version 2.8.0-beta06 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem die
WrongStartDestinationType
-Lint-Prüfungen nicht auf Companion-Objekte für den übergebenen Klassentyp geprüft wurden, wodurch der Fehler von Lint nicht erkannt wurde. (I92b09)
Version 2.8.0-beta05
10. Juli 2024
androidx.navigation:navigation-*:2.8.0-beta05
wird veröffentlicht. Version 2.8.0-beta05 enthält diese Commits.
Fehlerkorrekturen
- Behebung des Absturzes der
singleTop
-Navigation, wenn verschachtelteNavGraphs
dieselbestartDestination
-Route teilen. (I17b94, b/294408596)
Version 2.8.0-beta04
26. Juni 2024
androidx.navigation:navigation-*:2.8.0-beta04
wird veröffentlicht. Version 2.8.0-beta04 enthält diese Commits.
Fehlerkorrekturen
- Die Navigation unterstützt jetzt die Navigation mit leeren Strings in Pfadargumenten. (Ic5dbd, b/339481310)
- Die Fehlermeldung für benutzerdefinierte Serializer, die direkt über
@Serializable(with =...)
in Klassenfeldern deklariert werden, wurde verbessert, um klarzustellen, dass diese Funktion derzeit nicht unterstützt wird. (I052b0, b/341319151) - Die
SavedStateHandleFactory
-Test-API kann jetzt auch in nicht-Android-Tests verwendet werden. Dazu muss Robolectric das Argument-Parsing mit Bundles unterstützen. (I76cdc, b/340966212) - Der Absturz beim Wiederherstellen des Status beim Fortsetzen der App nach dem Prozesstod bei Verwendung der typsicheren Navigation in Compose wurde behoben. (Ia8f38, b/341801005)
- Ein Problem in der Navigationsleiste wurde behoben, bei dem nach dem Abbrechen der Vorhersage-Geste zum Zurückkehren der Nutzer nicht zum Lebenszyklusstatus
RESUMED
zurückkehrte.NavBackStackEntry
Außerdem wird dadurch sichergestellt, dass das Ziel beim Zurückspringen richtig animiert wird, anstatt nach einem Wischen an seine Position zu springen. (I97a0c, b/346608857) - Wenn Sie die Funktion „Vorhersage zurück“ mit Navigation Compose verwenden, hat das eingeblendete Ziel jetzt die richtige Z-Reihenfolge und wird richtig über dem eingehenden Ziel animiert. (I2077b, b/345993681)
Version 2.8.0-beta03
12. Juni 2024
androidx.navigation:navigation-*:2.8.0-beta03
wird veröffentlicht. Version 2.8.0-beta03 enthält diese Commits.
API-Änderungen
CollectionNavType
hat eine neue abstrakteemptyCollection()
-Methode. Überschreiben Sie dies, um eine leere Sammlung zu verarbeiten, die als Argument übergeben wird. (Ie4d84, b/341723133)
Fehlerkorrekturen
- Die Dokumentation zu
NavType.serializeAsValue
undserializeAsValues
wurde ergänzt, um darauf hinzuweisen, dass die endgültigen Ausgaben URI-codiert sein sollten. (Ida6bd, b/344943214) - Ein Absturz beim Aufrufen von
toRoute<T>
mit einem Null-Argument fürCollectionNavType
wurde behoben. Wenn Sie mit einem Nullwert fürCollectionNavType
navigieren, ist das Ausgabeargument der in Ihrer serialisierbaren Klasse deklarierte Standardwert oder der Rückgabewert vonemptyCollection()
, falls kein Standardwert vorhanden ist. (I84158, Id630f, b/342672856)
Version 2.8.0-beta02
29. Mai 2024
androidx.navigation:navigation-*:2.8.0-beta02
wird veröffentlicht. Version 2.8.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Behobener Absturz von
ClassCastException
bei Verwendung vonNavBackStackEntry.toRoute
mit einem benutzerdefiniertenNavType
, das Nullwerte zulassen kann. (I1c29b, b/342239473) - Probleme beim Wiederherstellen des Navigations-Backstack-Status wurden behoben, die beim Versuch aufgetreten sind, einen Backstack-Eintrag wiederherzustellen, der vom aktuellen Ziel aus nicht über die ID erreichbar ist. Da Routen von IDs unterstützt werden, waren auch Ziele betroffen, die mit Routen erstellt wurden. Außerdem wird ein Absturz behoben, der durch den Aufruf von
clearBackStack()
verursacht wurde und auf demselben zugrunde liegenden Problem beruhte. (I423c3, b/339908057)
Version 2.8.0-beta01
14. Mai 2024
androidx.navigation:navigation-*:2.8.0-beta01
wird veröffentlicht. Version 2.8.0-beta01 enthält diese Commits.
API-Änderungen
- Für benutzerdefinierte Argumenttypen wird jetzt ein
typeMap
-Parameter fürSavedStateHandle.toRoute()
verwendet. (Ie39fb, b/339026523) navigation-testing
wurde eine Test-API hinzugefügt, um einSavedStateHandle
aus einem serialisierbaren Kotlin-Objekt zu erstellen. (Id4867, b/339080702)
Fehlerkorrekturen
- Die Dokumentation zu fehlenden Parametern für Navigations-Kotlin-DSL-Funktionen wurde hinzugefügt. (I26a36)
Version 2.8.0-alpha08
1. Mai 2024
androidx.navigation:navigation-*:2.8.0-alpha08
wird veröffentlicht. Version 2.8.0-alpha08 enthält diese Commits.
Safe Args in Navigation Compose
- Die Arbeiten zur Unterstützung der Typsicherheit bei der Kompilierung für Navigation Compose und Nutzer der Navigation Kotlin DSL basierend auf der Kotlin-Serialisierung sind abgeschlossen. Die zuvor experimentellen APIs sind jetzt stabil. (Iea94d, I0eb0d, I873b7, I3a64b, I6c3a2, I11f0b, Ic3032, I8d394, I95710, Ice060, Id0e55, I45f8b, Idcdaf, If5380, I08b23, Ia5c59, b/188693139)
Bei dieser Funktion wird die Kotlin-Serialisierung verwendet, um Ziele in Ihrem Navigationsgraphen über typsichere Objekte und Datenklassen zu definieren:
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
Weitere Informationen finden Sie im Blogpost Navigation Compose meet Type Safety.
Neue Funktionen
- Das
navigation-fragment-compose
-Artefakt bietet jetzt eineLocalFragment
-Komposition, die lokal für kombinierbare Methoden innerhalb einerComposableFragment
gilt. (If35e5) NavType
bietet jetzt integrierte Unterstützung für Listen von Ganzzahlen, Strings, Booleschen Werten, Gleitkommazahlen und Ganzzahlen vom Typ „Long“. (I4b6dd, Ia914c, b/188693139)
Version 2.8.0-alpha07
17. April 2024
androidx.navigation:navigation-*:2.8.0-alpha07
wird veröffentlicht. Version 2.8.0-alpha07 enthält diese Commits.
Neue Funktionen
Es wird ein neues
navigation-fragment-compose
-Artefakt hinzugefügt, das eineComposableNavHostFragment
-Alternative zuNavHostFragment
enthält. Damit können Sie Ihren Navigations-XML-Dateiencomposable
-Ziele hinzufügen. Jedecomposable
-Zieladresse muss als@Composable
-Methode auf oberster Ebene ohne Argument angegeben werden, deren vollständig qualifizierter Name alsandroid:name
-Attribut für jedes Ziel verwendet wird. Wenn Sie zu einem dieser Ziele wechseln, wird ein enthaltendes Fragment erstellt, um die zusammensetzbaren Inhalte anzuzeigen. (I0ef2e, b/265480755)// In HomeScreen.kt @Composable fun HomeScreen() { // Your Composable content here }
// In your navigation.xml <composable android:id="@+id/home_screen" android:name="com.example.HomeScreenKt\$HomeScreen" />
API-Änderungen
- Die Unterstützung von Safe Args in Navigation Compose mit einem Ansatz, der auf der Kotlin-Serialisierung basiert, wurde fortgesetzt. Diese APIs sind noch nicht fertiggestellt und sind mit der Anmerkung
ExperimentalSafeArgsApi
gekennzeichnet. Diese Anmerkung wird entfernt, sobald die gesamte API-Oberfläche in einer zukünftigen Version fertig ist. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)
Version 2.8.0-alpha06
3. April 2024
androidx.navigation:navigation-*:2.8.0-alpha06
wird veröffentlicht. Version 2.8.0-alpha06 enthält diese Commits.
API-Änderungen
- Die Unterstützung für Safe Args in Navigation Compose mit einem Ansatz, der auf der Kotlin-Serialisierung basiert, wurde eingeführt. Diese APIs sind noch nicht fertiggestellt und sind mit der Anmerkung
ExperimentalSafeArgsApi
gekennzeichnet. Diese Anmerkung wird entfernt, sobald die gesamte API-Oberfläche in einer zukünftigen Version fertig ist. (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, If9e14, Ibb13e, If44d3, Icb70f, I8972f, I1d432, Icf32b, I20a14, I262aa, I7de99, I35990, I1033d, b/188693139)
Fehlerkorrekturen
NavHost
verwendet jetztAlignment.TopStart
als Standardargument für „contentAlignment“. Dadurch entspricht sie dem Standard fürAnimatedContent
und einige Fälle mit unerwarteter Skalierung beim Übergang von der Mitte werden behoben. (I09e72, b/330111602)- Wenn Sie beim Verwenden von Navigation Compose die Geste für die Vorhersage der Rückwärtsnavigation ausführen, wird die benutzerdefinierte Überleitung jetzt korrekt abgeschlossen, anstatt sofort zu enden.
NavHost
(I99017, b/327292110)
Version 2.8.0-alpha05
20. März 2024
androidx.navigation:navigation-*:2.8.0-alpha05
wird veröffentlicht. Version 2.8.0-alpha05 enthält diese Commits.
Neue Funktionen
- Sie können jetzt Argumente direkt in der
startDestination
-Route anstartDestination
vonNavGraph
übergeben, ohnedefaultValue
verwenden zu müssen. Das gilt auch für verschachtelteNavGraph
startDestinations
. (I0e0b5, b/109505019, b/188693139)
API-Änderungen
- Neue abstrakte
CollectionNavType<T>
-Klasse hinzugefügt, eine Unterklasse vonNavType<T>
für sammlungsbasierte Argumente wie Listen, Arrays und Maps. (Ic6d63, b/188693139) - Alle Standard-
NavType
-Arrays (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
undStringArrayType
) haben jetzt den TypCollectionNavType
(Idcf79, b/188693139) NavType
bietet jetzt eine neue offenevalueEquals
API, mit der ermittelt wird, ob zwei Werte desselben Typs gleich sind. (I6cb97, b/327229511)
Fehlerkorrekturen
- Für Abfrageparameter in Deeplinks sind jetzt Werte in Form von geschweiften Klammern um den Argumentnamen (z.B.
{argName}
) als gültige Werte für stringbasierteNavTypes
zulässig. Dadurch wird ein Problem behoben, bei dem ein solcher Wert für alle Typen als ungültig (oder als fehlender Wert) betrachtet wurde. (I18302, b/327274038) NavController
-Funktionen, die Routen wienavigate
oderpopBackStack
unterstützen, können jetzt Routen mit Argumenten des ArraysNavTypes
richtig abgleichen. (Iea805, b/327229511)
Version 2.8.0-alpha04
6. März 2024
androidx.navigation:navigation-*:2.8.0-alpha04
wird veröffentlicht. Version 2.8.0-alpha04 enthält diese Commits.
Neue Funktionen
- Sie können die
SizeTranform
für Ihre Übergänge jetzt in Navigation Compose angeben, indem Sie sie als Teil der Initialisierung für die Funktionencomposable
und/odernavigation
definieren. (I91062, b/296912651)
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das bei der Navigation in der Compose-Ansicht mit der Schaltfläche „Zurück“ des Systems ohne Geste der Übergang nicht richtig angezeigt wurde.
NavHost
(Iceeae, b/325998468)
Version 2.8.0-alpha03
21. Februar 2024
androidx.navigation:navigation-*:2.8.0-alpha03
wird veröffentlicht. Version 2.8.0-alpha03 enthält diese Commits.
API-Änderungen
NavBackStackEntry.savedStateHandle
ist jetzt als@MainThread
gekennzeichnet, da darin Code verwendet wird, der ohnehin im Hauptthread vorhanden sein muss. (Ibb988, b/299523245)
Fehlerkorrekturen
- Ein Problem in der Navigation wurde behoben, durch das
NavGraph
-ViewModels zu frühDESTROYED
wurden, weil dieViewModel
des zugehörigen Eintrags nicht Teil des gespeicherten Zustands war. (Ib6bb7, b/317581849)
Abhängigkeitsupdate
- Navigation Compose hängt jetzt von Compose 1.7.0-alpha03 ab.
Version 2.8.0-alpha02
7. Februar 2024
androidx.navigation:navigation-*:2.8.0-alpha02
wird veröffentlicht. Version 2.8.0-alpha02 enthält diese Commits.
Neue Funktionen
- Navigation Compose unterstützt jetzt die Vorhersage der In-App-Rückkehr über die neuen
SeekableTransitionState
APIs von compose-animation. So können Sie mit der Zurück-Geste das vorherige Ziel mit Ihrer benutzerdefinierten Überleitung aufrufen, bevor Sie sich entscheiden, die Transaktion über die abgeschlossene Geste zu bestätigen oder abzubrechen. (I8b8e9)
Version 2.8.0-alpha01
24. Januar 2024
androidx.navigation:navigation-*:2.8.0-alpha01
wird veröffentlicht. Version 2.8.0-alpha01 enthält diese Commits.
Fehlerkorrekturen
- Behoben wurde ein
BackStackState
-Leak, bei dem mehreresaveState
-Aufrufe für ein Ziel dazu führten, dass mehrere Status gespeichert wurden, aber nur der erste wiederhergestellt werden konnte. (I598b0, b/309559751) - Ein Problem wurde behoben, durch das Argumente, die keine Strings sind, nicht richtig angezeigt wurden, wenn die
NavigationUI
-Hilfsfunktionen zum Ausfüllen des Titels von App-Leisten verwendet wurden. (#636, b/316676794)
Abhängigkeitsupdate
- Die Navigationsfunktion „Compose“ hängt jetzt von Compose
1.7.0-alpha01
ab, da ein Problem behoben wurde, das zu einer unerwarteten Skalierungsanimation führen konnte. (b/297258205)
Externer Beitrag
- Vielen Dank an SimonMarquis für die Behebung des Anzeigeproblems bei nicht stringbasierten Argumenten, wenn der Titel von App-Leisten mithilfe der
NavigationUI
-Hilfsfunktionen ausgefüllt wird.
Version 2.7.7
Version 2.7.7
7. Februar 2024
androidx.navigation:navigation-*:2.7.7
wird veröffentlicht. Version 2.7.7 enthält diese Commits.
Fehlerkorrekturen
- Backport aus Navigation
2.8.0-alpha01
: BehobenerBackStackState
-Leak, bei dem mehreresaveState()
-Aufrufe für eine einzelneNavBackStackEntry
dazu führten, dass mehrere Zustände gespeichert wurden, aber nur der erste gespeicherte Zustand wiederhergestellt werden konnte. (I598b0, b/309559751) - Backport aus Navigation
2.8.0-alpha01
: Ein Problem wurde behoben, bei dem Argumente, die keine Strings sind, nicht richtig angezeigt wurden, wenn der Titel von App-Leisten mithilfe derNavigationUI
-Hilfsfunktionen ausgefüllt wurde. (#636, b/316676794)
Externer Beitrag
- Vielen Dank an SimonMarquis für die Behebung des Anzeigeproblems bei nicht stringbasierten Argumenten, wenn der Titel von App-Leisten mithilfe der
NavigationUI
-Hilfsfunktionen ausgefüllt wird.
Version 2.7.6
Version 2.7.6
13. Dezember 2023
androidx.navigation:navigation-*:2.7.6
wird veröffentlicht. Version 2.7.6 enthält diese Commits.
Fehlerkorrekturen
- Bei der Funktion
NavGraph
equals()
werden jetzt die Knoten des anderen Graphen korrekt berücksichtigt, nicht nur der aufrufende Graph. Dadurch werden Graphen mit Knoten mit unterschiedlichen IDs nicht mehr als gleich betrachtet (I401cb, b/311414915).
Version 2.7.5
Version 2.7.5
1. November 2023
androidx.navigation:navigation-*:2.7.5
wird veröffentlicht. Version 2.7.5 enthält diese Commits.
Leistungsverbesserungen
- Die Leistung beim Vergleichen von zwei Diagrammen wurde erheblich verbessert (sowohl in Bezug auf Zeit als auch Anzahl der Zuordnungen). Das bedeutet, dass Aufrufe wie
setGraph
, bei denen die neue Grafik intern mit der vorhandenen verglichen wird, viel schneller sind und zu weniger übersprungenen Frames führen. Vielen Dank an Michał Z für die gründliche Analyse, die zu dieser Verbesserung geführt hat. (I6ad62) NavHost
rendert jetzt das Startziel im ersten Compose-Pass, anstatt auf den zweiten Pass zu warten, um den aktualisierten Status zu lesen. (I439a7, b/304852206)
Fehlerkorrekturen
- Es wurde ein Problem behoben, bei dem der Rückstapel entfernt wurde, wenn
setGraph
mehrmals mit dem exakt gleichen Diagramm aufgerufen wurde, nur wenn es in Ihrem Diagramm ein Ziel gab, das eine Aktion enthielt, die zwei Ziele verknüpfte. (Ieaed7) - Dialoge, die in schneller Folge aufgerufen und geschlossen wurden, werden nicht mehr in die Liste der
NavController.visibleEntries
aufgenommen. (I67586, b/287969970) - Wenn ein Eintrag entfernt wird und eine Konfigurationsänderung folgt, wird
ViewModel
des Eintrags jetzt richtig gelöscht, wennsaveState
falsch ist. (Idf242, b/298164648) - Es wurde ein Problem behoben, bei dem
NavController
denselben Deeplink mehrmals verarbeiten konnte, wenn der Backstack vor einer Konfigurationsänderung vollständig leer war, odersetGraph
nur dann aufgerufen wurde, wenn das FlagFLAG_ACTIVITY_NEW_TASK
für den eingehenden Intent festgelegt war. (I73c7f)
Abhängigkeitsupdates
- 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 vonclearBackStack
nicht gelöscht wurden.
Version 2.7.4
Version 2.7.4
4. Oktober 2023
androidx.navigation:navigation-*:2.7.4
wird veröffentlicht. Version 2.7.4 enthält diese Commits.
Neue Funktionen
- Für
popUpTo
wurde die Unterstützung für Routen mit Argumenten hinzugefügt, um zu einem bestimmten Eintrag zurückzukehren, der genau diese Argumente verwendet. Diese Funktion entspricht der Unterstützung inpopBackStack
. (I731f4, b/299255572)
Fehlerkorrekturen
- Problem behoben, bei dem die Unterbrechung einer Navigation durch eine andere Navigation mit
popUpTo
zum Absturz vonFragmentNavigator
führte. (I3c848, b/301887045) - Ein Problem wurde behoben, durch das die
currentDestination
nach dem Drücken der Rücktaste nicht richtig aktualisiert wurde, um dem angezeigten Fragment zu entsprechen. (Id0d6c, b/289877514) - Der
DialogFragment
-Lebenszyklus wechselt jetzt korrekt in den StatusRESUMED
, wenn das darüber liegende Dialogfeld geschlossen wird. (I88f0d, b/301811387)
Version 2.7.3
Version 2.7.3
20. September 2023
androidx.navigation:navigation-*:2.7.3
wird veröffentlicht. Version 2.7.3 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem bei der Navigation mit Fragmenten wurde behoben, durch das die Liste
visibleEntries
falsche Einträge enthielt. (I5caa9, b/288520638) - Ein Problem wurde behoben, bei dem für das Ziel „Floating Window“ (z. B.
Dialogs
,Bottomsheets
usw.) nie einRESUMED
-Lebenszyklusereignis zurückgegeben wurde. (I3b866, b/287505132)
Version 2.7.2
Version 2.7.2
6. September 2023
androidx.navigation:navigation-*:2.7.2
wird veröffentlicht. Version 2.7.2 enthält diese Commits.
Fehlerkorrekturen
- Die Navigation hängt jetzt vom Lebenszyklus
2.6.2
ab. Dadurch wird eine Interaktion zwischenrememberSaveable
undNavHost
von Navigation Compose behoben, die dazu geführt hätte, dass derrememberSaveable
-Status von Zielen und alleSavedStateHandle
-Instanzen, die zuViewModel
gehören, nach dem Beenden und Neustarten des Prozesses nicht richtig wiederhergestellt wurden. (b/298059596, b/289436035) - Ein Problem wurde behoben, bei dem bei der gleichzeitigen Anzeige mehrerer Dialogfelder in Navigation Compose die teilweise verdeckten Dialogfelder (z.B. nicht das oberste Dialogfeld) den Lebenszyklusstatus
CREATED
stattSTARTED
hatten. (aosp/2728520, b/289257213) - Ein Problem wurde behoben, bei dem beim gleichzeitigen Anzeigen mehrerer Dialogfelder in Navigation Compose das oberste Dialogfeld geschlossen wurde, wodurch das neue oberste Dialogfeld im Lebenszyklusstatus
STARTED
hängen blieb, anstatt korrekt zuRESUMED
zu wechseln. (aosp/2629401, b/286371387) - Bei Navigation Safe Args wird die Aufgabe nicht mehr sofort instanziiert, wenn sie nicht tatsächlich ausgeführt wird. (I0e385, b/260322841)
Abhängigkeitsupdate
- Navigation Compose hängt jetzt von Compose 1.5.1 ab.
Version 2.7.1
Version 2.7.1
23. August 2023
androidx.navigation:navigation-*:2.7.1
wird veröffentlicht. Version 2.7.1 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem bei der Navigation mit Compose wurde behoben, bei dem bei Verwendung einer
Scaffold
ein Fehler beim Zugriff auf eineLifecycle.State.DESTROYED
ViewModel
ausgegeben werden konnte. (I1dc11, b/268422136)
Version 2.7.0
Version 2.7.0
9. August 2023
androidx.navigation:navigation-*:2.7.0
wird veröffentlicht. Version 2.7.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.6.0
Animationen von Accompanist
Da AnimatedContent
jetzt stabil ist, konnten wir den Code aus der Navigationsanimation für Begleiter wieder in Navigation Compose verschieben.
Das bedeutet, dass alle Funktionen zum Festlegen benutzerdefinierter Übergänge, die in AnimatedNavHost
verfügbar waren, in NavHost
direkt unterstützt werden.
An der Navigationsanimation von Accompanist werden keine weiteren Änderungen vorgenommen. Wir werden sie bald offiziell einstellen und eine Anleitung zur Migration zurück zu Navigation Compose veröffentlichen. Diese Anleitung ist jedoch genau umgekehrt wie die im Migrationsleitfaden beschriebene und es sind keine weiteren API-Änderungen erforderlich, wenn Sie bereits die neueste Alphaversion von Accompanist (0.31.2-alpha
) verwenden. (b/197140101)
Fehlerkorrekturen
- Der NavHost in Navigation Compose fängt jetzt Systemrückrufe auch dann korrekt ab, wenn die Aktivität angehalten und fortgesetzt wurde. (Icb6de, b/279118447)
Abhängigkeitsupdates
- Die Navigation hängt jetzt von „
1.5.0
zusammenstellen“ von1.1.0
ab.
Version 2.7.0-rc01
26. Juli 2023
androidx.navigation:navigation-*:2.7.0-rc01
wird veröffentlicht. Version 2.7.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem die im Rahmen der
NavHost
erstelltenEnterTransition
- undExitTransition
-Lambdas möglicherweise im Arbeitsspeicher verbleiben, auch nachdem dieNavHost
aus der Komposition entfernt wurde. (I893d0)
Bekannte Probleme
- Bei Navigation 2.6.x kann es beim Navigieren mit „popUpTo“ zu einem
IllegalArgumentException
kommen. Möglicherweise lässt sich diese Ausnahme vermeiden, indem Sie Ihren Graphen umstrukturieren. Hier finden Sie entsprechende Tipps. (b/287133013)
Version 2.7.0-beta02
28. Juni 2023
androidx.navigation:navigation-*:2.7.0-beta02
wird veröffentlicht. Version 2.7.0-beta02 enthält diese Commits.
Fehlerkorrekturen
- Die Navigations-Funktion „Compose“ hat jetzt die richtige Z-Reihenfolge für benutzerdefinierte Übergänge, bei denen die Option „navigate“ mit der Taste
popUpTo
verwendet wird.(/Ib1c3a, b/285153947)
Version 2.7.0-beta01
7. Juni 2023
androidx.navigation:navigation-*:2.7.0-beta01
wird veröffentlicht. Version 2.7.0-beta01 enthält diese Commits.
Fehlerkorrekturen
NavHost
in Navigation Compose fängt jetzt Systemrückrufe auch dann korrekt ab, wenn dieActivity
STOPPED
undRESUMED
wurde. (Icb6de, b/279118447)
Version 2.7.0-alpha01
24. Mai 2023
androidx.navigation:navigation-*:2.7.0-alpha01
wird veröffentlicht. Version 2.7.0-alpha01 enthält diese Commits.
Animationen von Accompanist
Da AnimatedContent
jetzt stabil ist, konnten wir den Code aus der Navigationsanimation für Begleiter wieder in Navigation Compose verschieben.
Das bedeutet, dass alle Funktionen zum Festlegen benutzerdefinierter Übergänge, die in AnimatedNavHost
verfügbar waren, in NavHost
direkt unterstützt werden.
An der Navigationsanimation von Accompanist werden keine weiteren Änderungen vorgenommen. Wir werden sie bald offiziell einstellen und eine Anleitung zur Migration zurück zu Navigation Compose veröffentlichen. Diese Anleitung ist jedoch genau umgekehrt wie die im Migrationsleitfaden beschriebene. Wenn Sie bereits die neueste Alphaversion von Accompanist (0.31.2-alpha
) verwenden, sind keine weiteren API-Änderungen erforderlich. (b/197140101)
Fehlerkorrekturen
- Unter Navigation
2.6.0-rc02
: Ein Problem mit der Navigation in Fragmenten wurde behoben. Wenn Sie mitpopUpTo
navigiert und ein Fragment aus dem Backstack entfernt haben, ohne die Ansicht neu zu erstellen, funktionierte das System nicht mehr. (Ieb8d4, b/281726455)
Abhängigkeitsupdates
- Die Navigation hängt jetzt von „Compose“
1.5.0-beta01
ab.
Version 2.6.0
Version 2.6.0
7. Juni 2023
androidx.navigation:navigation-*:2.6.0
wird veröffentlicht. Version 2.6.0 enthält diese Commits.
Wichtige Änderungen an der Navigation seit Version 2.5.0
- Die
arguments
vonNavBackStackEntry
und diearguments
, die an eineOnDestinationChangedListener
übergeben werden, sind jetzt nur noch eine Kopie der unveränderlichen Argumente, die beim Aufrufen des Ziels erstellt wurden. Das bedeutet, dass alle Änderungen an diesen Bundles nicht bei nachfolgenden Zugriffen auf diearguments
- oder andereOnDestinationChangedListener
-Instanzen berücksichtigt werden. NavDeepLink
unterstützt jetzt Standardwerte für Arrays. Dadurch können wiederholte Abfrageparameter unterstützt werden, die dem Arraytyp des Arguments zugeordnet werden.NavType
enthält jetzt auch eine Standardmethode, die überschrieben werden kann, um zwei geparste Werte zu kombinieren.- Benutzerdefinierte Unterklassen von
NavType
können jetztserializeAsValue
überschreiben, um einen Wert in einen String zu serialisieren. So können sowohl die Serialisierung als auch die Deserialisierung (überparseValue
) vollständig in derNavType
-Klasse gekapselt werden.StringType
überschreibt diese Methode jetzt, umUri.encode
für den angegebenenString
aufzurufen.
Wichtige Änderungen an Navigation Compose seit Version 2.5.0
- In der Vorschau eines
NavHost
-kompositables wird jetzt standardmäßig diestartDestination
des Navigationsgraphen angezeigt. NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
undNavController.clearBackStack(route)
unterstützen jetzt alle Routen mit teilweise oder vollständig ausgefüllten Argumenten. Die Argumente müssen genau mit den Argumenten des Eintrags übereinstimmen.- Wenn Sie versuchen, mit der
navDeepLink
Kotlin DSL eine leereNavDeepLink
zu erstellen, wird jetzt eine Lint-Warnung ausgegeben, dass ein Deeplink eine gültige URI, Aktion und/oder einen gültigen MIME-Typ haben muss.
Wichtige Änderungen an der Navigation mit Fragmenten seit Version 2.5.0
NavHostFragment
greift nicht mehr auf die Schaltfläche „Zurück“ des Systems zu. So kann die zugrunde liegendeFragmentManager
den Systemrückgang verarbeiten. So können mit Fragment1.7.0-alpha01
und höher eine In-App-Animation für die Vorhersage der Rückwärtsnavigation auf Android U-Geräten bereitgestellt werden.- Wenn Sie die Navigation mit Fragmenten verwenden und versuchen, manuell eine
FragmentTransaction
auszuführen, die dem Backstack derFragmentManager
ein Fragment hinzufügt, wird jetzt eineIllegalArgumentException
geworfen. Sie sollten Fragmente immer über dienavigate()
API hinzufügen. - Wenn Sie den genauen String
${applicationId}
als Platzhalter in den Attributenapp:data
undapp:dataPattern
im Aktivitätselement einer Navigations-XML-Datei verwenden, wird der Platzhalter beim Aufblasen automatisch mit dempackageName
des Kontexts ausgefüllt. - Die
FragmentNavigator
verwendet jetzt die Transition APIs, wennNavBackStackEntries
aufgerufen und minimiert wird. Das bedeutet, dass dieNavBackStackEntry
Lifecycle
jetzt wartet, bis die Spezialeffekte für das Ein- und Ausblenden des Fragments abgeschlossen sind, bevor sie die endgültigeLifecycle.State
verschiebt. - Die
DialogFragmentNavigator
verwendet jetzt die Transition APIs, wennNavBackStackEntries
aufgerufen und minimiert wird. Das bedeutet, dass dieNavBackStackEntry
Lifecycle
jetzt darauf wartet, dass dieDialogFragment
Lifecycle
zuDESTROYED
wechselt, bevor sie selbst zuDESTROYED
wechselt. - Mit
NavHostFragment
können Sie dieNavController
jetzt abrufen, sobald dieNavHostFragment
an dieFragmentManager
angehängt ist, und nicht erst nachonCreate()
. - Die Navigationsunterstützung für dynamische Funktionsmodule hängt jetzt von der detaillierten Play Feature Delivery Library ab.
- Navigation Safe Args ist jetzt von der Android Gradle-Plug-in-Version 7.3.0 abhängig. Das bedeutet, dass es jetzt nur noch mit Versionen ab 7.3.0 kompatibel ist.
Wichtige Änderungen an NavigationUI seit Version 2.5.0
- Wenn die ID eines Navigationsgraphen an
AppBarConfiguration
übergeben wird (z. B. über eineMenu
), betrachtetNavigationUI
jetzt nur das Startziel dieses Navigationsgraphen als Ziel der obersten Ebene, anstatt fälschlicherweise jedes Ziel innerhalb des Graphen als Ziel der obersten Ebene zu kennzeichnen. Das Übergeben der ID eines einzelnen Ziels bleibt unverändert. Diese Funktion ist auch für Ihren eigenen Code über die neueisTopLevelDestination
-Funktion aufAppBarConfiguration
verfügbar. - Bei den
setupWithNavController
-Integrationen inNavigationUI
für die Arbeit mit der oberen App-Leiste werdenR.string
-Werte fürReferenceType
-Argumente inandroid:label
jetzt in ihre Stringwerte geparst, anstatt die automatisch generierte Ressourcenganzzahl auszugeben. NavigationUI
stellt jetzt Protokolle bereit, wenn die Navigation über eine ausgewählteMenuItem
fehlschlägt.
Version 2.6.0-rc02
24. Mai 2023
androidx.navigation:navigation-*:2.6.0-rc02
wird veröffentlicht. Version 2.6.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem mit der Navigation in Fragmenten wurde behoben, bei dem das System nicht mehr funktionierte, wenn mit
popUpTo
navigiert und ein Fragment aus dem Backstack entfernt wurde, ohne die Ansicht neu zu erstellen. (Ieb8d4, b/281726455)
Version 2.6.0-rc01
10. Mai 2023
androidx.navigation:navigation-*:2.6.0-rc01
wird veröffentlicht. Version 2.6.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem bei der Navigation mit Fragmenten wurde behoben, bei dem das Entfernen eines Fragments über „navigate with
popUpTo
“ imonResume()
-Lebenszyklus-Callback zu einerIllegalStateException
führte. (I21884, b/279644470)
Version 2.6.0-beta01
19. April 2023
androidx.navigation:navigation-*:2.6.0-beta01
wird veröffentlicht. Version 2.6.0-beta01 enthält diese Commits.
Neue Funktionen
NavBackStackEntry
bietet jetzt eine benutzerdefiniertetoString
-Implementierung. (Iff00b)
Fehlerkorrekturen
- Wenn Sie die Navigation mit Fragmenten verwenden und versuchen, manuell eine
FragmentTransaction
auszuführen, die dem Backstack derFragmentManager
ein Fragment hinzufügt, wird jetzt eineIllegalArgumentException
geworfen. Sie sollten Fragmente immer über dienavigate()
API hinzufügen. (I6d38e) - Wenn es einen
navigate
gibt, der einen Eintrag hinzufügt, und einenpopBackStack
, der ihn im selben Frame entfernt, gelangt der resultierende oberste Eintrag im Backstack jetzt immer wieder zumRESUMED
Lifecycle.State
. (Id8067, b/276495952)
Version 2.6.0-alpha09
5. April 2023
androidx.navigation:navigation-*:2.6.0-alpha09
wird veröffentlicht. Version 2.6.0-alpha09 enthält diese Commits.
Fehlerkorrekturen
- Die Prüfung auf ungültige Routen wurde korrigiert. Wenn eine
NavDestination
eine nicht nullwertigeNavArgument
enthält, muss die Route dieses Ziels Platzhalter für Argumente enthalten, die mit der nicht nullwertigenNavArgument
übereinstimmen. (Ic62bf, b/274697949) - Deeplink-Navigationen auf Grundlage von
Action/MimeType
schlagen jetzt fehl, wenn für den Navigationsvorgang eine nicht nullwertigeNavArgument
fehlt, die von derNavDestination
, mit der dieAction/MimeType
übereinstimmt, benötigt wird. (Ibfa17, b/271777424) - Wenn
NavController
ein Diagramm mit derselben Route und denselben Zielen wie das vorherige Diagramm festlegt, werden die aktuellen Diagrammknoten und die Ziele des Backstacks jetzt ordnungsgemäß durch neue Instanzen ersetzt. Dadurch wird ein Absturz behoben, der bei Verwendung vononLaunchSingleTop
ohne Speichern des Status in Navigation Compose auftritt. Außerdem wird ein Fehler behoben, bei dem beim Wechseln zu Zielen, die mit dem Stammgraphen verknüpft sind, ein falscher Backstack erstellt wird. (I5bc58, b/275258161, b/275407804)
Version 2.6.0-alpha08
22. März 2023
androidx.navigation:navigation-*:2.6.0-alpha08
wird veröffentlicht. Version 2.6.0-alpha08 enthält diese Commits.
Neue Funktionen
- Mit
NavHostFragment
können Sie dieNavController
jetzt abrufen, sobald dieNavHostFragment
an dieFragmentManager
angehängt ist, und nicht erst nachonCreate()
. (Ic6382, b/220186282)
Fehlerkorrekturen
- Ein
NullPointerException
-Fehler beim Pop-up eines verschachtelten Diagramms mit einem nicht nullwertigen Argument wurde behoben. (6b3581, b/249988437) - Wenn Sie nach der Navigation mit
popUpTo
die Schaltfläche „Zurück“ verwenden, wird der Status derNavController
auf den richtigen Eintrag gesetzt. (I3a8ec, b/270447657) FragmentNavigator
löst jetzt ordnungsgemäß Einträge aus, wenn der Rückstapel über das System-Back-Symbol oderpopBackStack()
geleert wird, unabhängig davon, ob die Transaktion Effekte für das Fragment verwendet. (I81bdf)- Das Hinzufügen von Fragmenten zum
FragmentNavigator
-FragmentManager
ohne Navigation führt nicht mehr zu einem Absturz. (b17204, b/274167493)
Abhängigkeitsupdates
- Die Navigation hängt jetzt vom Lifecycle
2.6.1
ab. (586fe7) - Die Navigation hängt jetzt von SavedState
1.2.1
ab. (078e4e) - Die Navigation hängt jetzt von ProfileInstaller
1.3.0
ab. (512f0c)
Version 2.6.0-alpha07
8. März 2023
androidx.navigation:navigation-*:2.6.0-alpha07
wird veröffentlicht. Version 2.6.0-alpha07 enthält diese Commits.
Fehlerkorrekturen
- Die
getBackStackEntry
-,popBackStack
- undclearBackStack
-API-Varianten, die Routen annehmen, unterstützen jetzt Routenmuster mit nicht beschreibbaren Argumenten und nicht beschreibbaren Abfrageparametern (I22294, b/269302500) - Ein Problem wurde behoben, durch das beim Aufrufen von
clearBackStack()
ausNavController
der gespeicherte Status im Fragmentmanager nicht gelöscht wurde, der mit dem gelöschten Rückstapel verknüpft ist. (Ic1cce, b/271190202) - Behoben wurde eine Regression in 2.6.0-alpha06, die dazu führte, dass beim Zurückgehen zwischen Tabs die falsche
MenuItem
in derBottomNavigationView
hervorgehoben wurde. (I634f6, b/270447657) - Behobene Regression in 2.6.0-alpha06, die dazu führte, dass
NavBackStackEntry
s bei Verwendung vonAnimation
s nicht in den Status „FORTGESETZT“ versetzt wurden. (Ib3589, b/269646882)
Version 2.6.0-alpha06
22. Februar 2023
androidx.navigation:navigation-*:2.6.0-alpha06
wird veröffentlicht. Version 2.6.0-alpha06 enthält diese Commits.
Neue Funktionen
- In der Vorschau eines
NavHost
-kompositables wird jetzt standardmäßig diestartDestination
des Navigationsgraphen angezeigt. (I2b89f)
API-Änderungen
- Alle
NavController
navigate
-Überladungen sind jetzt mit@MainThread
annotiert, damit sie im Hauptthread aufgerufen werden. (I2c0b0, b/263427111)
Fehlerkorrekturen
- Ein Absturz beim Navigieren mit der dynamischen Fragmentnavigation wurde behoben. (I3ee29, b/268360479)
- Ein Fehler wurde behoben, durch den die untere Leiste beim Wechseln zu einem anderen Fragment über die System-Schaltfläche „Zurück“ nicht mit dem korrekt ausgewählten Element aktualisiert wurde (If559f, b/269044426)
Bekannte Probleme
- Wenn Sie die Navigation mit Fragmenten verwenden, wird bei Verwendung von
Animation
APIs der Lifecycle vonNavBackStackEntry
nicht aufRESUMED
gesetzt. (b/269646882) - Wenn Sie die Navigation mit Fragmenten verwenden und mit
BottomNavigation
navigieren und versuchen, einen Backstack mit mehreren Einträgen wiederherzustellen, wird dieBottomMenuItem
nicht richtig aktualisiert. (b/270447657) - Wenn Sie die Navigation mit Fragmenten verwenden, wird nach dem Wiederherstellen des Status für
NavBackStackEntry
Lifecycle
nichtDESTROYED
zurückgegeben, wenn das FragmentDESTROYED
ist . (b/270610768)
Version 2.6.0-alpha05
8. Februar 2023
androidx.navigation:navigation-*:2.6.0-alpha05
wird veröffentlicht. Version 2.6.0-alpha05 enthält diese Commits.
Neue Funktionen
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
undNavController.clearBackStack(route)
unterstützen jetzt alle Routen mit teilweise oder vollständig ausgefüllten Argumenten. Die Argumente müssen genau mit den Argumenten des Eintrags übereinstimmen. (Iebd28, Ic678c, I3b37b, b/257514373)- Die
FragmentNavigator
verwendet jetzt die Transition APIs, wennNavBackStackEntries
aufgerufen und minimiert wird. Das bedeutet, dass dieNavBackStackEntry
Lifecycle
jetzt wartet, bis die Spezialeffekte für das Ein- und Ausblenden des Fragments abgeschlossen sind, bevor sie die endgültigeLifecycle.State
verschiebt. (I3cb19, b/238686802) - Die
DialogFragmentNavigator
verwendet jetzt die Transition APIs, wennNavBackStackEntries
aufgerufen und minimiert wird. Das bedeutet, dass dieNavBackStackEntry
Lifecycle
jetzt darauf wartet, dass dieDialogFragment
Lifecycle
zuDESTROYED
wechselt, bevor sie selbst zuDESTROYED
wechselt. (I53ee5, b/261213893)
API-Änderungen
NavigatorState
stellt jetzt dieprepareForTransition
API bereit, damitNavigator
sNavBackStackEntries
in ZwischenLifecycle.State
s verschieben können. (I42c21, b/238686802)- Sie können jetzt über eine
backstack
-Property auf den Backstack zugreifen, der mit einerNavGraphNavigator
- oderComposeNavigator
-Property verknüpft ist.ComposeNavigator
stellt jetzt auch denonTransitionComplete()
-Callback bereit, um eineNavBackStackEntry
, die einen Navigations- oderpopBackStack
-Vorgang ausgeführt hat, als abgeschlossen zu markieren. (I02062, I718db, b/257519195)
Fehlerkorrekturen
- Der Navigationsstatus ist jetzt inaktiv, wenn die
push/popWithTransition
APIs verwendet werden und der Eintrag bereits verarbeitet wird. (Iadbfa, b/261213893) - Wenn Sie
launchSingleTop
mit einem verschachteltenNavGraph
verwenden, werden alle Ziele vom ursprünglichen Ziel bis zu seinerstartDestination
nur richtig oben im Backstack hinzugefügt. (Id4bea, b/253256629) - Bei der Navigation wird die
DialogFragment
-Instanz jetzt richtig ersetzt, wenn das Ziel mit dem FlaglaunchSingleTop
festgelegt ist. (I45b5a, b/149572817) - Navigation SafeArgs führen nicht mehr zu einem Kompilierungsfehler, wenn Argumente verwendet werden, die genau 19 Zeichen lang sind. (Id60bc, b/257110095)
Version 2.6.0-alpha04
9. November 2022
androidx.navigation:navigation-*:2.6.0-alpha04
wird veröffentlicht. Version 2.6.0-alpha04 enthält diese Commits.
Neue Funktionen
- Benutzerdefinierte Unterklassen von
NavType
können jetztserializeAsValue
überschreiben, um einen Wert in einen String zu serialisieren. So können sowohl die Serialisierung als auch die Deserialisierung (überparseValue
) vollständig in derNavType
-Klasse gekapselt werden.StringType
überschreibt diese Methode jetzt, umUri.encode
für den angegebenenString
aufzurufen. (Ie5213, b/247637434) NavigationUI
stellt jetzt Protokolle bereit, wenn die Navigation über eine ausgewählteMenuItem
fehlschlägt. (I2af5a, b/247730357)
Fehlerkorrekturen
- Navigations-Deeplinks werden jetzt verzögert und nicht bei der Grapheninitialisierung geparst. Dadurch kann die App-Leistung beim Start verbessert werden. (Iab0ab)
- Ein Absturz wurde behoben, der durch das Scrollen nach oben nach dem Deeplink zu einem Ziel mit null Standardargumenten verursacht wurde. (I51c24, b/243183636)
Abhängigkeitsupdate
- Die Navigationsunterstützung für dynamische Funktionsmodule hängt jetzt von der detaillierten Play Feature Delivery Library ab. (Ib4ddc)
- Navigation Safe Args ist jetzt von der Android Gradle-Plug-in-Version 7.3.0 abhängig. 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
wird veröffentlicht. Version 2.6.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Unter Navigation
2.5.3
:NavHost
führt nicht mehr zu einerNoSuchElementException
, wenn kein Ziel für dieCrossfade
zum Verfassen verfügbar ist. Die Komposition wird jetzt einfach übersprungen. (Ieb46e, b/253299416) - Unter Navigation
2.5.3
: Ein Problem wurde behoben, durch das gespeicherte Zustände des Compose-Modus (z.B. Verwendungen vonrememberSaveable
) nicht vergessen und entfernt wurden, wenn ein Ziel aus dem Backstack entfernt wurde. (I64949)
Abhängigkeitsupdates
- Die Navigation hängt jetzt von Fragment
1.5.4
ab. (Icd424)
Version 2.6.0-alpha02
5. Oktober 2022
androidx.navigation:navigation-*:2.6.0-alpha02
wird veröffentlicht. Version 2.6.0-alpha02 enthält diese Commits.
Verhaltensänderungen
- Wenn die ID eines Navigationsgraphen an
AppBarConfiguration
übergeben wird (z. B. über eineMenu
), betrachtetNavigationUI
jetzt nur das Startziel dieses Navigationsgraphen als Ziel der obersten Ebene, anstatt fälschlicherweise jedes Ziel innerhalb des Graphen als Ziel der obersten Ebene zu kennzeichnen. Das Übergeben der ID eines einzelnen Ziels bleibt unverändert. Diese Funktion ist auch für Ihren eigenen Code über die neueisTopLevelDestination
-Funktion inAppBarConfiguration
verfügbar. (Ie936e, b/238496771)
Fehlerkorrekturen
- Die
navigation:navigation-fragment
-Komponente hängt jetzt von der Fragmentversion1.5.2
ab. (I00ba4) - Der ausgewählte Menüpunkt wird nicht mehr aktualisiert, wenn Sie zu einem
FloatingWindow
-Ziel wie einem Dialogfeld wechseln. (I4cde8, b/240308330)
Version 2.6.0-alpha01
7. September 2022
androidx.navigation:navigation-*:2.6.0-alpha01
wird veröffentlicht. Version 2.6.0-alpha01 enthält diese Commits.
Neue Funktionen
- Bei den
setupWithNavController
-Integrationen inNavigationUI
für die obere App-Leiste werdenR.string
-Werte fürReferenceType
-Argumente, die in Ihrerandroid:label
gefunden werden, jetzt in ihre Stringwerte geparst, anstatt die automatisch generierte Ressourcenganzzahl auszugeben. (I5f803, b/167959935) NavDeepLink
unterstützt jetzt Standardwerte für Arrays. Dadurch können wiederholte Abfrageparameter unterstützt werden, die dem Arraytyp des Arguments zugeordnet werden.NavType
enthält jetzt auch eine Standardmethode, die überschrieben werden kann, um zwei geparste Werte zu kombinieren. (Id68c3, b/209977108)- Wenn Sie den genauen String
${applicationId}
als Platzhalter in den Attributenapp:data
undapp:dataPattern
im Aktivitätselement einer Navigations-XML-Datei verwenden, wird der Platzhalter beim Aufblasen automatisch mit dempackageName
des Kontexts ausgefüllt. (Iaabde, b/234223561) - Wenn Sie versuchen, mit der
navDeepLink
Kotlin DSL eine leereNavDeepLink
zu erstellen, wird jetzt eine Lint-Warnung ausgegeben, dass ein Deeplink eine gültige URI, Aktion und/oder einen gültigen MIME-Typ haben muss. (I08d2f, b/154038883)
API-Änderungen
- Neue Erweiterungsfunktion
NavDestination
hinzugefügt, um dynamische Labels mit Argumenten in Form vonandroid:label="{arg}"
in einen String zu parsen. UnterstütztReferenceType
-Argumente, indemR.string
-Werte in ihre Stringwerte geparst werden. (I07d89, b/236269380)
Verhaltensänderungen
- Die
arguments
von NavBackStackEntry und diearguments
, die an eineOnDestinationChangedListener
übergeben werden, sind jetzt nur noch eine Kopie der unveränderlichen Argumente, die beim Wechseln zum Ziel erstellt wurden. Das bedeutet, dass alle Änderungen an diesen Bundles nicht bei nachfolgenden Zugriffen auf diearguments
- oder andereOnDestinationChangedListener
-Instanzen berücksichtigt werden. (I676f5)
Fehlerkorrekturen
- Unter Navigation
2.5.2
: Bei der dynamischen Navigation wird jetzt richtig versucht, Aktivitätsziele aus anderen Modulen zu installieren, bevor sie aufgerufen werden. (Ia2c16, b/240292838) - Navigation
2.5.2
: Die Navigation ersetzt jetzt die Fragmentinstanz richtig, wenn sie zum selben Ziel navigiert und das FlaglaunchSingleTop
auf „wahr“ gesetzt wird. (I5a2f1, b/237374580) - Unter Navigation
2.5.2
:IllegalStateException
wurde behoben, das durch die Navigation zu einem doppelt verschachtelten Diagramm verursacht wurde, das ein übergeordnetes Element mit einem neuen eingeblendeten Startziel teilt. (I9f7cb, b/243778589)
Version 2.5
Version 2.5.3
24. Oktober 2022
androidx.navigation:navigation-*:2.5.3
wird veröffentlicht. Version 2.5.3 enthält diese Commits.
Fehlerkorrekturen
NavHost
führt nicht mehr zuNoSuchElementException
, wenn kein Ziel für dieCrossfade
verfügbar ist. Die Komposition wird jetzt einfach übersprungen. (Ieb46e, b/253299416)- Ein Problem wurde behoben, durch das gespeicherte Zustände des Compose-Modus (z.B. Verwendungen von
rememberSaveable
) nicht vergessen und entfernt wurden, wenn ein Ziel aus dem Backstack entfernt wurde. (I64949)
Version 2.5.2
7. September 2022
androidx.navigation:navigation-*:2.5.2
wird veröffentlicht. Version 2.5.2 enthält diese Commits.
Fehlerkorrekturen
- Bei der dynamischen Navigation wird jetzt richtig versucht, Aktivitätsziele aus anderen Modulen zu installieren, bevor die Navigation zu ihnen erfolgt. (Ia2c16, b/240292838)
- Bei der Navigation wird die Fragmentinstanz jetzt richtig ersetzt, wenn Sie zum selben Ziel navigieren und das Flag
launchSingleTop
auf „wahr“ setzen. (I5a2f1, b/237374580) - Behoben wurde ein
IllegalStateException
, das durch das Aufrufen einer doppelt verschachtelten Grafik verursacht wurde, die ein übergeordnetes Element mit einem neuen Pop-up-Startziel teilt. (I9f7cb, b/243778589)
Abhängigkeitsupdate
- Navigation
2.5.2
hängt jetzt von Fragment1.5.2
ab. (aosp/2178734)
Version 2.5.1
27. Juli 2022
androidx.navigation:navigation-*:2.5.1
wird veröffentlicht. Version 2.5.1 enthält diese Commits.
Fehlerkorrekturen
Navigation Safe Args
löst bei Verwendung benutzerdefinierter Argumenttypen, die in einerBundle
gespeichert sind, keine Warnungen zur Einstellung mehr in generierten Klassen aus. (Id86ed, b/237725966)
Abhängigkeitsupdates
- Die Navigationsbibliothek hängt jetzt von Lifecycle
2.5.1
ab. (Ib4451) - Die Navigationsbibliothek hängt jetzt von Aktivität
1.5.1
ab. (I3efe8) - Die Navigationsbibliothek hängt jetzt von Fragment
1.5.1
ab. (I56177)
Version 2.5.0
29. Juni 2022
androidx.navigation:navigation-*:2.5.0
wird veröffentlicht. Version 2.5.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.4.0
- Integration von CreationExtras:
Navigation
kann jetzt über dieCreationExtras
von Lifecycle2.5.0
einen zustandslosenViewModelProvider.Factory
bereitstellen.
Navigation SafeArgs
- In
Navigation Safe Args
wurde die Abhängigkeit vonAndroid Gradle Plugin
auf7.0.4
umgestellt. Die Kompatibilität mit AGP-Versionen vor7.0
wurde eingestellt. - Das Attribut „build.gradle“ wird jetzt anstelle von „applicationId“ unterstützt.
Weitere Änderungen
- Die
visibleEntries
API ist nicht mehr experimentell und bietet eine Funktion zum Abrufen aller Einträge, deren Ziel gemäß derNavController
derzeit sichtbar ist.
Version 2.5.0-rc02
15. Juni 2022
androidx.navigation:navigation-*:2.5.0-rc02
wird veröffentlicht. Version 2.5.0-rc02 enthält diese Commits.
Fehlerkorrekturen
- Ein Absturz, der durch schnelles Wechseln zwischen Zielen unten bei Verwendung der Navigationsfunktion „Compose“
NavHost
verursacht wurde, wurde behoben. (I3979a, b/234054916) Navigation SafeArgs
stürzt nicht mehr ab, wenn einapplicationIdSuffix
und ein Namespace verwendet werden, in dem entweder keineapplicationId
vorhanden ist oder sichapplicationId
und Namespace unterscheiden. (I754b1, b/233119646)NavArgument
hat jetzt eine benutzerdefiniertetoString()
-Funktion, mit der die internen Werte des Arguments angezeigt werden. (I900a8)
Version 2.5.0-rc01
11. Mai 2022
androidx.navigation:navigation-*:2.5.0-rc01
wird veröffentlicht. Version 2.5.0-rc01 enthält diese Commits.
Neue Funktionen
- Es wurde eine neue Lint-Regel hinzugefügt, die vor dem Einfügen von
<deeplink>
-Elementen in<activity>
-Elemente in Ihrernavigation.xml
-Datei warnt.(Ic15a5, b/178403185)
Fehlerkorrekturen
- Composeable-Scopes in
NavHost
undDialogHost
werden jetzt in der erwarteten Reihenfolge entsorgt, d.h. innere Composeables werden vor äußeren Composeables entsorgt. (I157e6) - Navigation SafeArgs verwendet jetzt
PathSensitivity.RELATIVE
inArgumentsGenerationTask
, um die Verschiebbarkeit des Caches zu ermöglichen. Das bedeutet, dass der Cacheeintrag jetzt von einem CI-Build für einen lokalen Build wiederverwendet werden kann. (I5f67c, b/173420454) - Die
UnrememberedGetBackStackEntryDetector
-Lint-Regel wurde aktualisiert, damit derremember
-Aufruf um den Aufruf vongetBackStackEntry()
herum auch einNavBackStackEntry
-Objekt als Schlüssel übergibt.(Ib7081, b/227382831)
Version 2.5.0-beta01
20. April 2022
androidx.navigation:navigation-*:2.5.0-beta01
wird veröffentlicht. Version 2.5.0-beta01 enthält diese Commits.
Fehlerkorrekturen
DialogNavigator
verwendet jetztpopWithTransition
, wenn eindismiss()
-Aufruf ausgeführt wird. Dadurch wird eine Race-Condition bei Verwendung einesViewModel
innerhalb einesdialog
-Ziels behoben, die zu einerIllegalStateException
führt, wenn der Dialog entweder über die Systemrück-Schaltfläche oder durch Tippen außerhalb des Dialogfelds geschlossen wird. (Id7376, b/226552301)
Abhängigkeitsupdates
- Die Navigation hängt jetzt vom Nutzerlebenszyklus
2.5.0-beta01
ab. Wenn Sie mehrere Backstacks verwenden, wird einIllegalStateException
fixiert, wenn Sie einenNavHost
in einem anderenNavHost
in einem nicht primären Tab für die Navigation unten verschachteln.
Version 2.5.0-alpha04
6. April 2022
androidx.navigation:navigation-*:2.5.0-alpha04
wird veröffentlicht. Version 2.5.0-alpha04 enthält diese Commits.
API-Änderungen
visibleEntries
befindet sich nicht mehr in der Testphase. (I4829f, b/225394514)
Fehlerkorrekturen
- NavHost hängt jetzt von
visibleEntries
aus derNavController
ab, um zu bestimmen, welche Einträge erstellt werden sollen. Das bedeutet, dass bei Verwendung eines verschachtelten NavHost die innereNavHost
jetzt richtig animiert werden sollte. (I4ba2b, b/225394514) - Die von
NavController
bereitgestelltevisibleEntries
StateFlow
basiert jetzt auf dem maximalen Lebenszyklusstatus des Eintrags anstelle des aktuellen Lebenszyklusstatus. Das bedeutet, dass die Liste der sichtbaren Einträge auch dann unverändert bleibt, wenn der Host-Lebenszyklus dernavController
unter „STARTED“ fällt. (I9e2a8, b/225394514) SavedStateViewFactory
unterstützt jetzt die Verwendung vonCreationExtras
, auch wenn es mit einerSavedStateRegistryOwner
initialisiert wurde. Wenn Extras angegeben werden, werden die initialisierten Argumente ignoriert. (I6c43b, b/224844583)NavDeepLink
kann jetzt URIs mit einem einzelnen Abfrageparameter ohne Wert parsen. (I0efe8, b/148905489)- Leere Strings gelten jetzt als gültige Argumente in Deeplinks. (I70a0d, b/217399862)
Navigation Safe Args
stürzt nicht mehr ab, wenn Namespaces verwendet werden und keinAndroidManifest.xml
vorhanden ist. (I17ccf, b/227229815)
Version 2.5.0-alpha03
23. Februar 2022
androidx.navigation:navigation-*:2.5.0-alpha03
wird veröffentlicht. Version 2.5.0-alpha03 enthält diese Commits.
API-Änderungen
- Sie können jetzt
CreationExtras
bisby navGraphViewModels
übergeben, um eineViewModel
zu erstellen. (I29217, b/217618359)
Fehlerkorrekturen
NavDeepLinks
codierte Zeilenumbruchzeichen, die in Routen-/Deeplink-URIs eingebettet sind, werden jetzt korrekt unterstützt. (I513d1, b/217815060)CreationExtras
funktioniert jetzt richtig, wenn es mitNavBackStackEntries
zum Erstellen von ViewModels verwendet wird. (I69161, b/217617710)- Navigation Safe Args unterstützt jetzt die Verwendung des in der
build.gradle
definierten Namespace anstelle des Pakets im AndroidManifest. (I659ef, b/217414933)
Version 2.5.0-alpha02
9. Februar 2022
androidx.navigation:navigation-*:2.5.0-alpha02
wird veröffentlicht. Version 2.5.0-alpha02 enthält diese Commits.
Fehlerkorrekturen
- Unter Navigation
2.4.1
: DieNavHostFragment
legt jetzt bei Verwendung von View-Binding mit verschachtelten Diagrammen dieOnBackPressedDispatcher
richtig fest. (Ifbb51, b/214577959) - Navigation
2.4.1
: Wenn Sie über mehrere verschachtelteNavGraph
s per Deeplink auf eine Seite zugreifen, enthält der Backstack jetzt korrekt Zwischenziele. (I504c0, b/214383060)
Version 2.5.0-alpha01
26. Januar 2022
androidx.navigation:navigation-*:2.5.0-alpha01
wird veröffentlicht. Version 2.5.0-alpha01 enthält diese Commits.
Neue Funktionen
NavBackStackEntry
kann jetzt mit ViewModel CreationExtras verwendet werden, die im Rahmen von Lifecycle2.5.0-alpha01
eingeführt wurden. (Ib9fe2, b/207012490)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem der Zugriff auf eine
ViewModel
, die überby navGraphViewModels()
aus deronCreate()
eines Fragments erstellt wurde, mit einerIllegalStateException
fehlgeschlagen ist. (I8a14d) NavDeepLink
s decodieren Argumente nicht mehr unnötig zweimal. Das bedeutet, dass die richtigen Argumente jetzt an das endgültige Ziel übergeben werden. (I31b0a, b/210711399)
Safe Args
- Safe Args ist jetzt auf die Version 7.0.4 des Android Gradle-Plug-ins angewiesen. Navigation Safe Args sind also nicht mehr mit Android Studio-Versionen vor 7.0 kompatibel, aber mit dem Android Gradle-Plug-in 7.1.0 und höher. (I41c88, b/213086135, b/207670704)
Version 2.4.2
Version 2.4.2
6. April 2022
androidx.navigation:navigation-*:2.4.2
wird veröffentlicht. Version 2.4.2 enthält diese Commits.
Fehlerkorrekturen
- Backport aus Navigation
2.5.0-alpha03
:NavDeepLinks
unterstützt jetzt korrekt codierte Zeichen für neue Zeilen, die in Routen-/Deeplink-URIs eingebettet sind. (I513d1, b/217815060) - Backport aus Navigation
2.5.0-alpha03
: Navigation SafeArgs unterstützt jetzt die Verwendung des imbuild.gradle
definierten Namespace anstelle des Pakets im AndroidManifest. (I659ef, b/217414933) - Backport aus Navigation
2.5.0-alpha04
:Navigation Safe Args
stürzt nicht mehr ab, wenn Namespaces verwendet werden und keinAndroidManifest.xml
vorhanden ist. (I17ccf, b/227229815) - Backport aus Navigation
2.5.0-alpha04
: Leere Strings werden jetzt als gültige Argumente in Deeplinks betrachtet. (I70a0d, b/217399862)
Version 2.4.1
Version 2.4.1
9. Februar 2022
androidx.navigation:navigation-*:2.4.1
wird veröffentlicht. Version 2.4.1 enthält diese Commits.
Fehlerkorrekturen
- Bei Verwendung von Viewbinding mit verschachtelten Diagrammen wird die
OnBackPressedDispatcher
jetzt korrekt durch dieNavHostFragment
festgelegt. (Ifbb51, b/214577959) - Bei Deeplinks über mehrere verschachtelte
NavGraph
s enthält der Backstack jetzt korrekt Zwischenziele. (I504c0, b/214383060) - Backport aus Navigation
2.5.0-alpha01
: Ein Problem wurde behoben, bei dem der Zugriff auf ein ViewModel, das überby navGraphViewModels()
aus deronCreate()
eines Fragments erstellt wurde, mit einerIllegalStateException
fehlgeschlagen ist. (I8a14d) - Backport aus Navigation
2.5.0-alpha01
:NavDeepLink
s decodieren Argumente nicht mehr unnötigerweise zweimal. Das bedeutet, dass die korrekt decodierten Argumente jetzt an das endgültige Ziel übergeben werden. (I31b0a, b/210711399) - Backport aus Navigation
2.5.0-alpha01
: Safe Args hängt jetzt vom Android Gradle-Plug-in in Version 7.0.4 ab. Navigation Safe Args sind also nicht mehr mit Android Studio-Versionen vor 7.0 kompatibel, aber mit dem Android Gradle-Plug-in 7.1.0 und höher. (I41c88, b/213086135, b/207670704)
Version 2.4.0
Version 2.4.0
26. Januar 2022
androidx.navigation:navigation-*:2.4.0
wird veröffentlicht. Version 2.4.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.3.0
- Alle Navigationsartefakte wurden in Kotlin neu geschrieben. Dadurch wurde die Nullbarkeit von Klassen mit Generiken (z. B.
NavType
-Unterklassen) verbessert. Alle Kotlin-Erweiterungsfunktionen, die zuvor Teil der-ktx
-Artefakte waren, wurden in die jeweiligen Hauptartefakte verschoben. Die-ktx
-Artefakte werden weiterhin veröffentlicht, sind aber völlig leer. - Das
navigation-fragment
-Artefakt enthält jetzt eine vorkonfigurierte Implementierung eines zweispaltigen Layouts über die neueAbstractListDetailFragment
. In diesem Fragment wird einSlidingPaneLayout
verwendet, um einen Listenbereich (der von Ihrer Unterklasse bereitgestellt wird) und einen Detailbereich zu verwalten, der eineNavHostFragment
als Implementierung verwendet, wie in unserer Beispielimplementierung zu sehen. - Die
currentBackStackEntryAsFlow()
-Methode vonNavController
liefert eineFlow
, die jedes Mal ausgegeben wird, wenn sich der aktuelleNavBackStackEntry
ändert. Dieser Ablauf kann als Alternative zur manuellen Verwaltung einerOnDestinationChangedListener
verwendet werden. - Über die experimentelle Eigenschaft
visibleEntries
können Sie jetzt mit dem NavController eine Liste aller sichtbarenNavBackStackEntry
-Instanzen alsStateFlow
abrufen. - Es ist jetzt möglich, die
NavType
-Klasse zu erweitern, um benutzerdefinierte NavTypes zu erstellen. Benutzerdefinierte Typen werden nur unterstützt, wenn Sie den Navigationsgraphen programmatisch erstellen, z. B. über die Navigationsgraph-Kotlin-DSL. Für die Navigation gibt es jetzt die APIs
findStartDestination()
undgetHierarchy()
, mit denen sich eine benutzerdefinierte Navigations-UI implementieren lässt.findStartDestination()
ist eine Erweiterungsfunktion vonNavGraph
, mit der das tatsächliche Startziel ermittelt wird, das angezeigt wird, wenn Sie zum Diagramm wechseln, auch wenn diestartDestination
selbst eine verschachtelteNavGraph
ist.getHierarchy()
ist eine Funktion inNavDestination
, mit der überprüft werden kann, ob sich ein bestimmtes Ziel in der Hierarchie eines anderen befindet.val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
NavigationUI
-Methoden, die einBottomNavigationView
als Argument erwarteten, wurden aktualisiert, sodass stattdessen die Superklasse verwendet wird, die in Material1.4.0
,NavigationBarView
eingeführt wurde. So können diese Methoden mit derNavigationRailView
verwendet werden.Wenn ein
<action>
-Element über XML maximiert wird, können Animationen Attribute verwenden, die mithilfe derapp:enterAnim="?attr/transitionEnter"
-Syntax aus Ihrem Design gezogen werden.Safe Args generiert jetzt eine
fromSavedStateHandle()
-Methode für jedeNavArgs
-Klasse. (#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
Navigationsrouten und die Kotlin-DSL
In früheren Versionen der Navigation hatte jedes Ziel eine konstante Ganzzahl-ID, die es eindeutig von seinen übergeordneten Zielen unterscheiden und es ermöglichen würde, direkt oder über eine Aktion zu diesem Ziel zu navigate()
. Das ist zwar weiterhin gültig und nützlich, insbesondere wenn Sie Ihren Navigationsgraphen in XML definieren und automatisch generierte R.id
-Konstanten oder Safe Args verwenden können (mit denen diese Konstanten zur Generierung von Code zur Buildzeit verwendet werden), aber dieses System eindeutiger Ganzzahlen erfasste nicht die semantische Bedeutung und Ausdruckskraft, die für die Unterstützung vollständig dynamischer Graphen erforderlich ist, die programmatisch zur Laufzeit über die Navigation Kotlin DSL erstellt werden.
In dieser Version wird eine neue Option eingeführt, mit der ein Ziel in einem Navigationsgraphen anhand seiner Route eindeutig identifiziert werden kann. Eine Route ist eine String
, die den eindeutigen Pfad zu einem Ziel definiert. Alle Kotlin-DSL-Methoden, die eine Ziel-ID annahmen, wurden eingestellt und durch eine entsprechende API ersetzt, die eine Route annimmt.
Jede Route sollte als „path“-Teil eines Uri
behandelt werden, das dieses Ziel definiert, z.B. home
, profile/{userId}
, profile/{userId}/friends
usw. Wenn die Identität eines Ziels mit einem bestimmten Inhalt verknüpft ist, sollten diese dynamischen Argumente Teil der Route sein und denselben Regeln wie implizite Deeplinks folgen.
Alle NavController
APIs, für die bisher nur eine ID verwendet wurde, haben jetzt eine Überladung, die eine Route String
annimmt. Dazu gehören navigate()
, popBackStack()
, popUpTo()
und getBackStackEntry()
.
Das hat einige Auswirkungen auf APIs:
- Die Kotlin-Eigenschaft
popUpTo
in der Kotlin-DSL wurde zugunsten vonpopUpToId
eingestellt. - Die
getStartDestination()
API wurde zugunsten vongetStartDestinationId()
eingestellt.
Im Gegensatz zur Navigation per ID folgt die Navigation per Route denselben Regeln wie implizite Deeplinks, da Sie direkt zu einem beliebigen Ziel in einem verschachtelten Diagramm wechseln können. So können diese Routen in mehrmoduligen Projekten verwendet werden, ohne dass jedem Ziel explizit ein extern sichtbarer Deeplink hinzugefügt werden muss.
Navigation – Verfassen
Das navigation-compose
-Artefakt ermöglicht die Integration der Navigationskomponente in Jetpack Compose. Dabei werden @Composable
-Funktionen als Ziele in Ihrer Anwendung verwendet.
Dieser Release bietet Folgendes:
- Ein
NavHost
-Komposit, mit dem Sie Ihren Navigationsgraphen über eine Kotlin-DSL mitcomposable
- unddialog
-Zielen erstellen können, sowie Unterstützung für optionale Navigationselemente wie die aus dem Material zur Navigation mit Begleitern. - Erforderliche Unterstützung für Crossfading zwischen Zielen. Mit der Begleitnavigationsanimation können Sie die Ein- und Ausblendübergänge mithilfe experimenteller Compose APIs steuern.
- Zuweisung eines
Lifecycle
zu jedem zusammensetzbaren Ziel Jedes Ziel erreicht den StatusRESUMED
nur, wenn alle eingehenden Übergänge abgeschlossen sind, und fällt sofort aufSTARTED
, wenn ein ausgehender Übergang beginnt. So können Sie alleIllegalStateException
- und Multitouch-Probleme vermeiden, indem Sie nur dann einennavigate
-Aufruf auslösen, wenn derLifecycle
-StatusRESUMED
ist. - Bereichsdefinition für
ViewModel
(über dieviewModel()
API von Lifecycle ViewModel Compose2.4.0
oderhiltViewModel()
von Hilt Navigation Compose1.0.0
auf Zielebene, die einen Bereich bietet, der Konfigurationsänderungen übersteht und sich im Backstack befindet (wenn Ihre Composable-Inhalte anderweitig entsorgt werden) und ein Signal in deronCleared()
des ViewModels, das die dauerhafte Entsorgung und Bereinigung des mit dieserNavBackStackEntry
verknüpften Zustands angibt. - Der
rememberSaveable
-Status wird auf Zielebene festgelegt, damit der gesamte Composeable-Status automatisch gespeichert und wiederhergestellt wird, wenn Sie zu einem Ziel zurückkehren. - Vollständige Unterstützung für das Speichern und Wiederherstellen des Status von
NavController
und des Status des Ziels nach dem Beenden und Neustarten des Prozesses. - Automatische Integration in die Schaltfläche „Zurück“ des Systems
Unterstützung für das Übergeben von Argumenten, das Anhängen von Deeplinks an Ziele und das Zurückgeben eines Ergebnisses an vorherige Ziele.
Erstellen Sie spezielle Helpers in
rememberNavController()
undcurrentBackStackEntryAsState()
, um den Status zu heben und dieNavController
mit Composeables außerhalb derNavHost
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 im Leitfaden zum Erstellen von Navigationselementen.
Mehrere Backstacks
Der NavController ist für die Verwaltung des Backstacks der Ziele verantwortlich. Er fügt dem Backstack Ziele hinzu, wenn Sie navigate()
zu ihnen aufrufen, und entfernt sie, wenn Sie popBackStack()
aufrufen oder die Schaltfläche „Zurück“ des Systems auslösen. Die vorhandene NavOptions
-Klasse und die Einbindung in <action>
-Elemente im Navigationsgraphen-XML wurden erweitert, um das Speichern und Wiederherstellen des Rückstapels zu unterstützen.
Im Rahmen dieser Änderung wird der Status der eingeblendeten Ziele jetzt automatisch von den NavigationUI
-Methoden von onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
und NavigationView.setupWithNavController()
gespeichert und wiederhergestellt. So wird die Unterstützung mehrerer Backstacks ohne Codeänderungen ermöglicht. Wenn Sie die Navigation mit Fragmenten verwenden, ist dies die empfohlene Methode, um mehrere Backstacks zu integrieren.
Die zugrunde liegenden APIs zum Speichern und Wiederherstellen des Zustands sind über verschiedene Oberflächen verfügbar:
In Navigation XML können im Element
<action>
jetzt die booleschen Attributeapp:popUpToSaveState
undapp:restoreState
verwendet werden, um den Status aller überapp:popUpTo
eingeblendeten Ziele zu speichern und den Status des Ziels wiederherzustellen, das alsapp: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 der
navOptions
Kotlin DSL können Sie die booleschen PropertiesrestoreState
undsaveState
zumpopUpTo
-Builder hinzufügen:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
Wenn Sie ein
NavOptions
-Objekt manuell überNavOptions.Builder
erstellen, können Sie diesetRestoreState()
- und die neue Überladung fürsetPopUpTo()
verwenden, die einen zusätzlichensaveState
-Parameter annimmt.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ätzlichensaveState
-Parameter enthalten.Mit der Methode
clearBackStack()
können Sie den Status löschen, der mitpopBackStack()
oderpopUpToSaveState
gespeichert wurde.
In allen Fällen speichert und stellt NavController
den Status jeder NavBackStackEntry
wieder her, einschließlich aller ViewModel
-Instanzen auf Navigationszielebene. Die Navigator
APIs wurden aktualisiert, damit jedes Navigator
seinen eigenen Status speichern und wiederherstellen kann.
Geändertes Verhalten
NavDeepLinkBuilder
fügt jetztPendingIntent.FLAG_IMMUTABLE
zu den voncreatePendingIntent()
zurückgegebenenPendingIntent
hinzu, damit diese API bei Ausrichtung auf Android 12 wie erwartet funktioniert.- Die Navigation hängt jetzt vom Lifecycle
2.3.1
ab undsetGraph()
,popBackStack()
,navigateUp()
undnavigate()
, die Methoden, mit denen dieNavBackStackEntry
Lifecycle
aktualisiert wird, werden jetzt als@MainThread
gekennzeichnet. Damit wird die Navigation an die in Lifecycle2.3.0
eingeführte Erzwingung des Hauptthreads angepasst. - Bei Deeplinks wird jetzt geprüft, ob alle erforderlichen Argumente (ohne Standardwerte) in
Uri
vorhanden sind. - Bei der Analyse von
NavDeepLink
-Argumenten werden Rautezeichen jetzt genauso wie Fragezeichen als Trennzeichen zwischen Pfadsegmenten verwendet, damit ein Argument nicht über das Rautezeichen hinausreicht. - Beim Generieren von Aktionen werden Argumente ohne Standardwerte jetzt vor denen mit Standardwerten als Parameter in Kotlin-Code eingefügt, der aus Safe Args generiert wurde.
- Beim Generieren von Argumenten werden mit Safe Args jetzt Parameter ohne Standardwerte vor Parametern mit Standardwerten eingefügt.
- Safe-Args hängt jetzt vom Android Gradle-Plug-in 4.2.0 ab. Sie sollten also keine Warnung mehr erhalten, wenn Sie
applicationIdTextResource
verwenden.
Bekannte Probleme
- Behoben in Navigation
2.5.0-alpha01
: Der Zugriff auf eineViewModel
, die überby navGraphViewModels()
aus deronCreate()
eines Fragments erstellt wurde, schlägt mit einerIllegalStateException
fehl. (b/213504272) - Behoben in Navigation
2.5.0-alpha01
: Safe Args 2.4.0 ist nicht mit dem Android Gradle-Plug-in 7.1.0 und höher kompatibel. (b/213086135) - Bei Deeplinks mit mehreren verschachtelten Navigationsgrafiken 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
wird veröffentlicht. Version 2.4.0-rc01 enthält diese Commits.
Geändertes Verhalten
- Bei der Analyse von
NavDeepLink
-Argumenten werden Hashzeichen jetzt genauso wie Fragezeichen als Trennzeichen zwischen Argumenten verwendet. (I21309, b/180042703)
Fehlerkorrekturen
- Bei Deeplinks werden Argumente mit Werten, die mit dem Namen des Platzhalters übereinstimmen, nicht mehr ignoriert. (If8017, b/207389470)
NavController
stürzt nicht mehr ab, wenn ein verschachteltes Ziel mithilfe von Übergängen eingeblendet wird, nachdemNavController
wiederhergestellt wurde. (I0f7c9, b/205021623)- Die Fehlermeldung bei Verwendung einer ungültigen
startDestination
verweist jetzt standardmäßig auf die Route des Startziels, sofern verfügbar. (I86b9d, b/208041894)
Fehlerkorrekturen für die Navigation und das Verfassen von Nachrichten
- Behoben wurde ein möglicher Absturz, der durch schnelles Wechseln zwischen dem Startziel und einem anderen Ziel über die Menüpunkte in der unteren Navigationsleiste verursacht wurde. (Ic8976, b/208887901)
- Das Dialogziel wird nach Konfigurationsänderungen oder dem Ende eines Prozesses jetzt wieder korrekt oben auf dem Bildschirm wiederhergestellt. (I4c0dc, b/207386169)
- Das Problem wurde behoben, dass der Abruf einer
ViewModel
aus derNavBackStackEntry
eines Dialogfelds fehlgeschlagen ist, wenn das Dialogfeld geschlossen wurde. (I6b96d, b/206465487) - Ein Problem wurde behoben, bei dem die Verwendung von
activity
-Zielen mitNavHost
von Navigation Compose zu einer endlosen Neuzusammensetzung führte. (I8f64c) - Ein Leck in Navigation Compose wurde behoben, bei dem nach einer Konfigurationsänderung oder dem Ende eines Prozesses eine Referenz auf die alte Aktivität beibehalten wurde. (I4efcb, b/204905432)
Fehlerkorrekturen für Safe Args
SafeArgs
stürzt nicht mehr ab, wenn versucht wird, benutzerdefinierte Parcelable-Arrays nach dem Absturz des Prozesses wiederherzustellen. (I618e8, b/207315994)- Ein Fehler in sicheren Argumenten wurde behoben, durch den boolesche Arrays keinen
null
-Wert haben konnten. (I8c396, b/174787525)
Version 2.4.0-beta02
3. November 2021
androidx.navigation:navigation-*:2.4.0-beta02
wird veröffentlicht. Version 2.4.0-beta02 enthält diese Commits.
API-Änderungen
- Bei der Verarbeitung sowohl expliziter als auch impliziter Deeplinks wird beim Wechseln zu einer anderen Grafik jetzt automatisch das Flag
saveState
hinzugefügt. So wird sichergestellt, dass Code wieNavigationUI.setupWithNavController
und Code mit mehreren Backstacks wie erwartet funktioniert. (Ic8807)
Verhaltensänderungen
- Deeplink-Muster werden jetzt in NavDeepLink statt während der Inflation träge kompiliert. Dadurch sollte sich die Inflationszeit von Navigationsgrafiken mit Deeplinks verbessern. (b8d257, b/184149935)
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das NavBackStackEntries nach dem Wechsel zu
Lifecycle.State.STARTED
nachLifecycle.State.CREATED
verschoben wurden, wenn dieNavHost
direkt dersetContent()
der Aktivität hinzugefügt wird. (Ia5ac1, b/203536683) - Es wurde eine Race-Condition behoben, bei der ein
DialogFragment
-Ziel aus dem Rückstapel entfernt wurde, bevor das Dialogfeld tatsächlich angezeigt wurde. Das Dialogfeld wurde dadurch nicht geschlossen, was zu einem Absturz führte, wenn das fehlerhafte Dialogfeld vom Nutzer manuell geschlossen wurde. (I687e5) - Behoben: Die
onNavDestinationSelected
API aufNavigationUI
gabtrue
zurück, auch wenn Sie nicht tatsächlichnavigate()
zu diesem Navigationsgraphennavigate()
. Es wird jetzt dieselbe Logik verwendet, die intern vonsetupWithNavController
verwendet wird, um nur dasMenuItem
auszuwählen, das mit dem aktuellen Ziel verknüpft ist, und zwar anhand deshierarchy
des Ziels. (I2b053)
Version 2.4.0-beta01
27. Oktober 2021
androidx.navigation:navigation-*:2.4.0-beta01
wird veröffentlicht. Version 2.4.0-beta01 enthält diese Commits.
Neue Funktionen
- Sie können jetzt
by navGraphViewModel
mit einer Route als Alternative zur Verwendung einer ID verwenden, um die Verwendung der Navigation Kotlin DSL mit Fragmenten besser zu unterstützen. (I901e3, b/201446416)
API-Änderungen
- Die
visibleEntries
API befindet sich derzeit in der Testphase. (I93f6f)
Fehlerkorrekturen
- ViewModels werden nicht mehr zerstört, wenn Übergänge unterbrochen werden, indem zwischen denselben Bildschirmen hin- und hergewechselt wird (Id52d8, b/200817333)
- Für änderbare
NavDeepLink
-Argumente ist beim Hinzufügen von Deeplinks zuNavDestination
s kein Standardwert mehr erforderlich. (I5aad4, b/201320030) - NavBackStackEntries mit unterschiedlichen Lebenszyklen werden jetzt nicht mehr als gleich betrachtet. Das bedeutet, dass NavHost alle Ziele bei der Navigation mit „singleTop“ und beim erneuten Auswählen von Menüpunkten unten korrekt neu zusammensetzt. (I1b351, b/196997433)
- Ein Problem mit
AbstractListDetailFragment
wurde behoben, durch das die Attributelayout_width
undlayout_weight
im Listenbereich, der vononCreateListPaneView()
zurückgegeben wird, falsch verarbeitet oder ignoriert wurden. (f5fbf3) - Der visuelle Status von Dialog-Zielen bleibt jetzt korrekt mit dem Status von
DialogFragmentNavigator
synchronisiert. Das bedeutet, dass beim manuellen Aufruf der asynchronendismiss()
API fürDialogFragment
jetzt alle Dialogziele über dem jetzt geschlossenen Dialogfeld korrekt gelöscht werden. Das gilt nicht, wenn Sie das Dialogfeld mitpopUpTo
oderpopBackStack()
schließen. (I77ba2) AbstractAppBarOnDestinationChangedListener
enthält jetzt klarere Fehlermeldungen füronDestinationChanged()
. (Ie742d)
Version 2.4.0-alpha10
29. September 2021
androidx.navigation:navigation-*:2.4.0-alpha10
wird veröffentlicht. Version 2.4.0-alpha10 enthält diese Commits.
Neue Funktionen
- Der NavController bietet jetzt die Möglichkeit, über den
visibleEntries
-Statusfluss eine Liste aller sichtbarenNavBackStackEntry
-Instanzen abzurufen (Ia964e) - Für
rememberNavController()
wird jetzt ein optionaler Satz vonNavigator
-Instanzen verwendet, der der zurückgegebenenNavController
hinzugefügt wird, um optionale Navigationselemente wie die aus dem Material zur Navigation für Begleiter besser zu unterstützen. (I4619e)
Fehlerkorrekturen
- Die dynamische Navigation stürzt nicht mehr ab, wenn die Aktivität neu erstellt wird. (Ifa6a3, b/197942869)
- Ein Problem mit der Schaltfläche „Zurück“ des Systems wurde behoben, das nur auftrat, wenn man zu einem zusammensetzbaren Ziel mit einer
NavHost
zurückkehrte. (3ed148, b/195668143) - SafeArgs generiert die Argumente für
fromBundle()
undfromSavedStateHandle()
jetzt in der richtigen Parameterreihenfolge. (I824a8, b/200059831)
Version 2.4.0-alpha09
15. September 2021
androidx.navigation:navigation-*:2.4.0-alpha09
wird veröffentlicht. Version 2.4.0-alpha09 enthält diese Commits.
Neue Funktionen
- Mit der Methode
clearBackStack()
können Sie jetzt den Status löschen, der mitpopBackStack()
oderpopUpToSaveState
gespeichert wurde. (I80a0f) - Sie können jetzt eine Liste von Argumenten und/oder Deeplinks an den Builder Ihres verschachtelten Navigationsdiagramms übergeben. Diese werden dann automatisch dem resultierenden Diagramm hinzugefügt. (I8a470, b/182545357)
API-Änderungen
- Die Kotlin-DSL-Funktion
navArgument
ist jetzt Teil vonnavigation-common
stattnavigation-compose
. In diesem Fall müssen Sie die Importe aktualisieren, um diese Funktion weiterhin nutzen zu können. (I1d095)
Verhaltensänderungen
- Beim Generieren von Argumenten werden mit Safe Args jetzt Parameter ohne Standardwerte vor Parametern mit Standardwerten eingefügt. (I89709, b/198493585)
Fehlerkorrekturen
- Bei Verwendung von Navigation Compose sind NavGraphs erst dann
DESTROYED
, wenn alle untergeordneten ElementeDESTROYED
sind. (I86552, b/198741720) - Für Nullable-
NavDeepLink
-Argumente ist kein Standardwert mehr erforderlich. (Ia14ef, b/198689811) - Wenn
setGraph()
mit einer neuen Grafik aufgerufen wird, werden jetzt zusätzlich zu dem vorherigen Verhalten, bei dem der Rückstapel geleert wird, alle gespeicherten Rückstapel gelöscht. (I97f96) - Ein Problem wurde behoben, bei dem
OnDestinationChangedListener
-Instanzen und diecurrentBackStackEntryFlow
nicht benachrichtigt wurden, wennlaunchSingleTop
verwendet wurde. (Iaaebc)
Abhängigkeitsupdates
- Navigation Compose hängt jetzt von Activity Compose 1.3.1 ab. (I05829)
- Navigation Compose hängt jetzt von Lifecycle ViewModel Compose
2.4.0-beta01
ab. (Ib86a3)
Version 2.4.0-alpha08
1. September 2021
androidx.navigation:navigation-*:2.4.0-alpha08
wird veröffentlicht. Version 2.4.0-alpha08 enthält diese Commits.
Neue Funktionen
- Es ist jetzt möglich, die
NavType
-Klasse zu erweitern, um benutzerdefinierte NavTypes zu erstellen. Benutzerdefinierte Typen werden nur unterstützt, wenn Sie den Navigationsgraphen programmatisch erstellen, z. B. über die Navigationsgraph-Kotlin-DSL. (I78440, b/196871885)
Verhaltensänderungen
- Beim Generieren von Aktionen werden Argumente ohne Standardwerte jetzt vor denen mit Standardwerten als Parameter in Kotlin-Code eingefügt, der aus Safe Args generiert wurde. (Idb697, b/188855904)
- Bei Deeplinks wird jetzt geprüft, ob alle erforderlichen Argumente (ohne Standardwerte) in
Uri
vorhanden sind. (#204, b/185527157)
Fehlerkorrekturen
- Wenn Sie
getBackStackEntry
undpreviousBackStackEntry
in composable() in Verbindung mitremember()
verwenden, wird keine Ausnahme mehr ausgelöst, wenn sich kein Ziel im Backstack befindet. (I75138, b/194313238) - Navigation Compose wird jetzt richtig neu erstellt, wenn Stack-Argumente zurückgegeben und
launchSingleTop=true
verwendet wird. (Iebd69, b/186392337) - Wenn
setGraph
mit einem Graphen mit 13 oder 29 Zielen aufgerufen wird, wirdArrayIndexOutOfBoundsException
nicht mehr zurückgegeben. (I1a9f1, b/195171984) - Der Java-Generator „SafeArgs“ sollte beim Generieren von Args-Klassen keine Lint-Warnungen mehr verursachen. (I1a666, b/185843837)
Externer Beitrag
- Vielen Dank an ospixd, dass er dafür gesorgt hat, dass bei Deeplinks geprüft wird, ob alle erforderlichen Argumente (ohne Standardwerte) in der
Uri
vorhanden sind. (#204, b/185527157)
Version 2.4.0-alpha07
18. August 2021
androidx.navigation:navigation-*:2.4.0-alpha07
wird veröffentlicht. Version 2.4.0-alpha07 enthält diese Commits.
Fehlerkorrekturen
- In Navigation Compose wird der Status jetzt nach Konfigurationsänderungen und beim Wechseln von Diagrammen bei Verwendung der Funktion „Mehrere Backstacks“ korrekt gespeichert. (If5a3d, b/195141957)
- Wenn Sie bei der Navigationszusammenstellung mit mehreren Backstacks denselben Tab noch einmal auswählen, wird nicht mehr ein leerer Bildschirm angezeigt. (I860dc, b/194925622)
NavHost
prüft jetzt auf Änderungen amLifecycle.State
vonNavBackStackEntry
s. Das bedeutet, dass einNavHost
in einem Fragment jetzt bei Änderungen des Lebenszyklus korrekt neu zusammengesetzt wird, anstatt zu einem leeren Bildschirm zu führen. (I4eb85, b/195864489)- Ein Problem wurde behoben, durch das der Status
NavController
nach dem Erstellen Ihrer Aktivitäten (d.h. nach einer Konfigurationsänderung) nicht korrekt aktualisiert wurde, wenn Sie eineDialogFragment
-Benachrichtigung geschlossen hatten. (Icd72b) - Ein Problem wurde behoben, durch das die Systemrückspulen-Schaltfläche des NavControllers nicht aktualisiert wurde, wenn ein Dialogfeld geöffnet wurde. Dies führte möglicherweise dazu, dass der NavController die Rückspulen-Schaltfläche abfängt, obwohl kein Rückstapel vorhanden ist, der geöffnet werden kann. (If3b34)
- Safe-args generiert jetzt automatisch eine
toSavedStateHandle
-Methode für Argumente, mit der IhrViewModel
-Code getestet werden kann. (If1e2d, b/193353880)
Version 2.4.0-alpha06
4. August 2021
androidx.navigation:navigation-*:2.4.0-alpha06
wird veröffentlicht. Version 2.4.0-alpha06 enthält diese Commits.
API-Änderungen
- Die Methoden
requireSlidingPaneLayout()
undrequireDetailPaneNavHostFragment()
vonAbstractListDetailFragment
wurden ingetSlidingPaneLayout()
undgetDetailPaneNavHostFragment()
umbenannt. (I34a08)
Verhaltensänderungen
- Bei der Navigation mit Animationen (z. B.
Crossfade
) erreicht dieLifecycle
des neuen Ziels jetzt erst dieRESUMED
, wenn die Animation abgeschlossen ist. (If0543, b/172112072, b/194301889) - Mit der Navigationsleiste „Compose“ (Erstellen) wird jetzt mit
NavHost
der Graph als Teil der ersten Komposition festgelegt. (Ieb7be)
Fehlerkorrekturen
- Wenn das letzte Ziel eines Navigationsgraphen angezeigt wird, wird keine
ClassCastException
mehr ausgegeben. (If0543, b/172112072, b/194301889) - Ein
NullPointerException
wurde behoben, das beim Hinzufügen eines Deeplinks ohneUri
und beim Navigieren über eine Route oder einen Deeplink auftrat. (938a0c, b/193805425) - Ein Problem wurde behoben, bei dem ein Deeplink zu
NavBackStackEntry
den StatusRESUMED
nicht erreichte. (I192c5) - Ein Problem wurde behoben, durch das die Verarbeitung der Systemrückwärtsschaltfläche des NavControllers beim Aufrufen eines Dialogfelds nicht aktualisiert wurde. Dies führte möglicherweise dazu, dass der NavController die Rückwärtsschaltfläche abfängt, obwohl kein Rückstapel vorhanden ist, der aufgepoppt werden kann. (aosp/1782668)
Version 2.4.0-alpha05
21. Juli 2021
androidx.navigation:navigation-*:2.4.0-alpha05
wird veröffentlicht. Version 2.4.0-alpha05 enthält diese Commits.
Verhaltensänderungen
- Bei der Navigationsfunktion „Compose“ wird für
NavHost
jetzt immer ein Crossfade verwendet, wenn zwischen Zielen gewechselt wird. (I07049, b/172112072) - Sie können jetzt Änderungen am Graphen eines NavHost vornehmen. Graphen mit demselben Startziel und denselben Zielen im Graphen werden als gleich betrachtet und der
NavController
-Backstack wird nicht geleert. (I0b8db, b/175392262)
Fehlerkorrekturen
- Ein
NoSuchElementException
wurde behoben, das beim Aufrufen vonpopBackStack()
aus einemLifecycleObserver
aufgetreten ist, das an einNavBackStackEntry
angehängt ist. Das Problem wurde durch reentrante Updates des Status des NavControllers verursacht. (I64621) - Mit
AbstractListDetailFragment
können SieSlidingPaneLayout
jetzt vollständig aus Ihrem APK entfernen, wennAbstractListDetailFragment
nicht verwendet wird. (I611ad) NavGraph
undNavDestination
überschreiben jetzt die Gleichheitsmethode, sodass zwei Objekte mit denselben Werten als gleich betrachtet werden. (I166eb, b/175392262)
Version 2.4.0-alpha04
1. Juli 2021
androidx.navigation:navigation-*:2.4.0-alpha04
wird veröffentlicht. Version 2.4.0-alpha04 enthält diese Commits.
Neue Funktionen
- Das
navigation-fragment
-Artefakt enthält jetzt eine vorkonfigurierte Implementierung eines zweispaltigen Layouts über die neueAbstractListDetailFragment
. In diesem Fragment wird einSlidingPaneLayout
verwendet, um einen Listenbereich (der von Ihrer Unterklasse bereitgestellt wird) und einen Detailbereich zu verwalten, der eineNavHostFragment
als Implementierung verwendet, wie in unserer Beispielimplementierung zu sehen. (Iac4be, b/191276636) - Die
NavHost
desnavigation-compose
-Artefakts unterstützt jetzt nebencomposable
-Zielen auchdialog
-Zielvorhaben. Diese Dialogziele werden jeweils in einem zusammensetzbarenDialog
angezeigt, das über dem aktuellencomposable
-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
inNavigatorState
wurde inpush
umbenannt. Alle aktuellen Aufrufe vonadd()
müssen in „push()“ geändert werden. (Ie89fc, b/172112072) - Bei benutzerdefinierten
Navigator
-Instanzen können jetzt diepushWithTransaction
- undpopWithTransition
-APIs aufNavigatorState
verwendet werden, um ein Ziel asynchron zu pushen oder zu poppen. Diese APIs werden noch von keinem der enthaltenen Navigationselemente verwendet. (Ic4d7c, b/172112072)
Verhaltensänderungen
NavDeepLinkBuilder
fügt jetztPendingIntent.FLAG_IMMUTABLE
zu den voncreatePendingIntent()
zurückgegebenenPendingIntent
hinzu, damit diese API bei Ausrichtung auf Android 12 wie erwartet funktioniert. (If8c52)
Fehlerkorrekturen
- Ein Problem mit
<include-dynamic>
wurde behoben, bei dem Argumente, die an den Graphen übergeben wurden, nicht korrekt an den dynamisch eingebundenen Graphen übergeben wurden. (I3e115) - Ein Fehler bei
NullPointerException
wurde behoben, der beim Navigieren zu einem Ziel mit einemstring[]
-Argument mit dem Standardwert@null
auftrat. (I1fbe8) - ProGuard-Regeln für
@Navigator.Name
hinzugefügt, um Probleme bei der Verwendung des Vollmodus von R8 3.1 zu beheben (I2add9, b/191654433) - SafeArgs schlägt beim Erstellen Ihrer App mit
Kotlin
-Versionen vor1.5.0
nicht mehr fehl. (Icd1ff, b/190739257)
Version 2.4.0-alpha03
16. Juni 2021
androidx.navigation:navigation-*:2.4.0-alpha03
wird veröffentlicht. Version 2.4.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das zwei
navigate()
-Aufrufe erforderlich waren, um zu einem enthaltenen dynamischen Diagramm zu gelangen. (I7785c, b/188859835) - Es wurde eine Regression behoben, die in der Navigation
2.4.0-alpha01
aufgetreten ist. Dabei wurde das Symbol „Oben“ vonsetupActionBarWithNavController()
nicht richtig entfernt, wenn Sie sich auf einer Zielseite der obersten Ebene befanden. (I5d443, b/189868637) - Ein Fehler beim Aufrufen von
IllegalStateException
wurde behoben, wenn zuvor der Stammgraph des NavControllers gepoppt wurde.popBackStack()
(I2a330, b/190265699) - ProGuard-Regeln für
by navArgs()
werden jetzt richtig angewendet, wennnavigation-common
oder Artefakte verwendet werden, die davon abhängen. (I68800, b/190082521) - Ein
OnDestinationChangedListener
, dasnavigate()
zum ersten Mal aufruft, wenn es einen Callback erhält, erhält jetzt korrekt einen zweiten Callback mit dem Ziel, zu dem es weitergeleitet wurde. (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
- Wenn Sie Gradle
6.7.0
verwenden, schlägt Safe Args aufgrund einer Abhängigkeit von einer älteren Version von Kotlin mit dem FehlerUnable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
fehl. Sie können das Problem umgehen, indem Sie auf Gradle 7.0 umstellen. (b/190739257)
Version 2.4.0-alpha02
2. Juni 2021
androidx.navigation:navigation-*:2.4.0-alpha02
wird veröffentlicht. Version 2.4.0-alpha02 enthält diese Commits.
Neue Funktionen
- Routen werden jetzt für Aktivitäts-, Fragment- und Dialogziele sowie in der DynamicNavigation-Kotlin-DSL unterstützt. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
NavigationUI
hat vorübergehend experimentelle APIs hinzugefügt, mit denen Sie das Speichern Ihres Status deaktivieren können. Das Speichern des Status ist zwar das richtige Verhalten, es gibt aber immer noch Verwendungen von eingestellten Bibliotheken (d. h. beibehaltene Fragmente), die beim Speichern des Status nicht unterstützt werden können. Dies bietet Apps die Möglichkeit, nach und nach von nicht unterstützten APIs wegzukommen. (Idf93c)Für die Navigation gibt es jetzt die APIs
findDestination()
undgetHierarchy()
, mit denen sich eine benutzerdefinierte Navigations-UI implementieren lässt.findDestination()
ist eine Erweiterungsfunktion vonNavGraph
, mit der ein Ziel innerhalb des Graphen ermittelt wird.getHierarchy()
ist eine Funktion vonNavDestination
, mit der überprüft werden kann, ob sich ein bestimmtes Ziel in der Hierarchie eines anderen befindet.(I2932f, b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
NavigationUI-Methoden, die eine
BottomNavigationView
akzeptiert haben, wurden aktualisiert, sodass stattdessen die Superklasse verwendet wird, die in Material1.4.0
,NavigationBarView
eingeführt wurde. So können diese Methoden mit derNavigationRailView
verwendet werden. (Ib0b36, b/182938895)Wenn Sie ein
<action>
-Element über XML einfügen, können für Animationen Attribute verwendet werden, die mit derapp:enterAnim="?attr/transitionEnter"
-Syntax aus Ihrem Design gezogen werden. (I07bc1, b/178291654)
API-Änderungen
- Kotlin-DSL-Builder, die eine ID verwenden, wurden eingestellt und sollten durch Builder ersetzt werden, die Routen verwenden (I85b42, b/188816479) (I9f58f, b/188816479)
Fehlerkorrekturen
DialogFragmentNavigator
verwendet jetzt dieNavigatorState.pop()
API, umNavController
darüber zu informieren, wenn ein Dialogfeld durch Drücken der Schaltfläche „Zurück“ oder Klicken außerhalb des Dialogfelds geschlossen wird. So ist der Status vonNavController
immer mit dem Status des Navigators synchronisiert. (I2ead9)Bei der Navigation wird keine
ConcurrentModificationException
mehr ausgegeben, wenn die Liste derOnDestinationChangedListeners
über einenonDestinationChanged
-Callback manipuliert 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“ von „NavDestination“ ist jetzt korrekt mit
@IdRes
annotiert, sodass nur Ressourcen-IDs akzeptiert werden. (I69b80)Der int-Parameter von
findNode
ist jetztresId
anstelle vonresid
. (I7711d)
Abhängigkeitsupdate
- Safe-Args hängt jetzt vom Android Gradle-Plug-in 4.2.0 ab. Sie sollten also keine Warnung mehr erhalten, wenn Sie
applicationIdTextResource
verwenden. (I6d67b, b/172824579)
Version 2.4.0-alpha01
18. Mai 2021
androidx.navigation:navigation-*:2.4.0-alpha01
wird veröffentlicht. Version 2.4.0-alpha01 enthält diese Commits.
Neue Funktionen
- Die
currentBackStackEntryAsFlow()
-Methode vonNavController
liefert eineFlow
, die jedes Mal ausgegeben wird, wenn sich der aktuelleNavBackStackEntry
ändert. Dieser Ablauf kann als Alternative zur manuellen Verwaltung einerOnDestinationChangedListener
verwendet werden. (I19c4a, #89, b/163947280)
Mehrere Backstacks
Der NavController ist für die Verwaltung des Backstacks der Ziele verantwortlich. Er fügt dem Backstack Ziele hinzu, wenn Sie navigate()
zu ihnen aufrufen, und entfernt sie, wenn Sie popBackStack()
aufrufen oder die Schaltfläche „Zurück“ des Systems auslösen. Die vorhandene NavOptions
-Klasse und die Einbindung in <action>
-Einträge im Navigationsgraphen-XML wurden erweitert, um das Speichern und Wiederherstellen des Backstacks zu unterstützen. (b/80029773)
Im Rahmen dieser Änderung wird der Status der eingeblendeten Ziele jetzt automatisch von den NavigationUI
-Methoden von onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
und NavigationView.setupWithNavController()
gespeichert und wiederhergestellt. So wird die Unterstützung mehrerer Backstacks ohne Codeänderungen ermöglicht. Wenn Sie die Navigation mit Fragmenten verwenden, ist dies die empfohlene Methode, um mehrere Backstacks zu integrieren. (Ie07ca)
Die zugrunde liegenden APIs zum Speichern und Wiederherstellen des Zustands sind über verschiedene Oberflächen verfügbar:
In Navigation XML können im Element
<action>
jetzt die booleschen Attributeapp:popUpToSaveState
undapp:restoreState
verwendet werden, um den Status aller überapp:popUpTo
eingeblendeten Ziele zu speichern und den Status des Ziels wiederherzustellen, das alsapp: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 der
navOptions
Kotlin DSL können Sie die booleschen PropertiesrestoreState
undsaveState
zumpopUpTo
-Builder hinzufügen:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
Wenn Sie ein
NavOptions
-Objekt manuell überNavOptions.Builder
erstellen, können Sie diesetRestoreState()
- und die neue Überladung fürsetPopUpTo()
verwenden, die einen zusätzlichensaveState
-Parameter annimmt.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ätzlichensaveState
-Parameter enthalten.
In allen Fällen speichert und stellt NavController
den Status jeder NavBackStackEntry
wieder her, einschließlich aller ViewModel
-Instanzen auf Navigationszielebene. Die Navigator
APIs wurden aktualisiert, damit jedes Navigator
seinen eigenen Status speichern und wiederherstellen kann.
Die ComposeNavigator
, die für composable
-Ziele in Navigation Compose verwendet wird, und die FragmentNavigator
und DynamicFragmentNavigator
, die für <fragment>
-Ziele in Navigation with Fragments verwendet werden, wurden aktualisiert, um die neuen Navigator APIs zu verwenden und den Status zu speichern und wiederherzustellen.
Navigationsrouten
Eine Route ist eine String
, die ein Ziel eindeutig identifiziert. Dieses Konzept wurde bisher nur in Navigation Compose verwendet, ist jetzt aber Teil der Navigation APIs. Dies ist eine Alternative zur Verwendung von Ganzzahl-IDs beim Erstellen des Graphen über die Navigation Kotlin DSL. (b/172823546)
Alle APIs, die bisher nur eine ID akzeptiert haben, haben jetzt eine Überladung, die eine Route String
akzeptiert. Dazu gehören navigate()
, popBackStack()
, popUpTo()
und getBackStackEntry()
.
Das hat einige Auswirkungen auf APIs:
- Die Kotlin-Eigenschaft
popUpTo
in der Kotlin-DSL wurde zugunsten vonpopUpToId
eingestellt. (I59c73, b/172823546) - Die
getStartDestination()
API wurde zugunsten vongetStartDestinationId()
eingestellt. (I0887f, b/172823546)
Für Entwickler, die von früheren Versionen von Navigation Compose auf Navigation Compose 2.4.0-alpha01
umstellen, bedeutet das, dass die folgenden Importe von 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
auf NavDestination
ersetzt. So können Sie navBackStackEntry.destination.route
direkt aufrufen.
API-Änderungen
- Alle Navigationsartefakte wurden in Kotlin neu geschrieben. Dadurch wurde die Nullbarkeit von Klassen mit Generiken (z. B.
NavType
-Unterklassen) verbessert. Alle Kotlin-Erweiterungsfunktionen, die zuvor Teil der-ktx
-Artefakte waren, wurden in die jeweiligen Hauptartefakte verschoben. Die-ktx
-Artefakte werden weiterhin veröffentlicht, sind aber völlig leer. (b/184292145) NavDeepLinkBuilder
unterstützt jetzt das Hinzufügen mehrerer verschiedener Ziele zum generierten Rückstapel. (I3ee0d, b/147913689)- Standardfunktionen für
DynamicNavHostFragment
hinzufügen (Icd515, b/175222619) - Die eindeutige ID einer
NavBackStackEntry
wird jetzt als Teil der öffentlichen API freigegeben. (Ie033a) - Die Felder
name
undargument
sowie die Destrukturierungsfunktionen vonNamedNavArgument
sind jetzt öffentlich. (#174, b/181320559) - Es wurde eine neue
NavBackStackEntry#provideToCompositionLocals
-Erweiterung eingeführt, die dieNavBackStackEntry
den entsprechenden Kompositionsorts zur Verfügung stellt. (#175, b/187229439)
Safe Args
Safe Args generiert jetzt eine
fromSavedStateHandle()
-Methode für jedeNavArgs
-Klasse. (#122, b/136967621)class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
Safe Args wurde so aktualisiert, dass es von KotlinPoet
1.8.0
abhängt. (#172, b/183990444)
Verhaltensänderungen
- Die Navigation hängt jetzt vom Lifecycle
2.3.1
ab undsetGraph()
,popBackStack()
,navigateUp()
undnavigate()
, die Methoden, mit denen dieNavBackStackEntry
Lifecycle
aktualisiert wird, werden jetzt als@MainThread
gekennzeichnet. Damit wird die Navigation an die in Lifecycle2.3.0
eingeführte Erzwingung des Hauptthreads angepasst. (b/171125856) - Beim Parsen von Enum-Argumenten aus Deeplinks wird jetzt die Groß- und Kleinschreibung nicht berücksichtigt. So kann ein Deeplink wie
http://www.example.com/red
mit einem Deeplink vonwww.example.com/{color}
übereinstimmen, auch wenn das Enum den WertRED
hat. (#152, b/135857840)
Kompatibilität von Compose
androidx.navigation:navigation-compose:2.4.0-alpha01
ist nur mit Compose-Version1.0.0-beta07
und höher kompatibel.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem Platzhalter für nachgestellte Argumente Vorrang vor Deeplinks hatten, die mit einem genau übereinstimmenden Suffix versehen waren. (#153, b/184072811)
NavHostFragment
unterstützt jetzt benutzerdefinierte Navigationselemente, die dieselbe@Navigator.Name("dialog")
wie die StandardDialogFragmentNavigator
verwenden. (Ib1c2c, b/175979140)- Das Verhalten von
NavigatorProvider#addNavigator
wurde verbessert, damit wiederholte Aufrufe mit derselben Instanz keine Probleme verursachen. (#176, b/187443146)
Externe Beiträge
- Vielen Dank an simonschiller für die Unterstützung von Safe Args, die eine
fromSavedStateHandle()
-Methode für jedeNavArgs
-Klasse generiert. (#122, b/136967621) - Vielen Dank an Bradleycorn, der das Parsen von Enum-Argumenten aus Deeplinks jetzt unabhängig von der Groß- und Kleinschreibung ermöglicht. (#152, b/135857840)
- Vielen Dank an osipxd für die Behebung eines Problems, bei dem Platzhalter für nachgeordnete Argumente Vorrang vor Deeplinks hatten, die ein exakt übereinstimmendes Suffix haben. (#153, b/184072811)
- Vielen Dank an tatocaster, dass er Safe Args so aktualisiert hat, dass es von KotlinPoet
1.8.0
abhängt. (#172, b/183990444) - Vielen Dank an jossiwolf, der die Felder
name
undargument
sowie die Destrukturierungsfunktionen vonNamedNavArgument
veröffentlicht hat. (#174, b/181320559) - Vielen Dank an jossiwolf für die Einführung einer neuen
NavBackStackEntry#provideToCompositionLocals
-Erweiterung, die dieNavBackStackEntry
für die entsprechenden Kompositions-Locals bereitstellt. (#175, b/187229439) - Vielen Dank an jossiwolf, der das Verhalten von
NavigatorProvider#addNavigator
verbessert hat, damit wiederholte Aufrufe mit derselben Instanz keine Probleme mehr verursachen. (#176, b/187443146)
Navigation Compose Version 1.0.0
Version 1.0.0-alpha10
7. April 2021
androidx.navigation:navigation-compose:1.0.0-alpha10
wird veröffentlicht. Version 1.0.0-alpha10 enthält diese Commits.
API-Änderungen
NavHost
akzeptiert jetzt einModifier
, das an den Composeable-Container übergeben wird, der die Ziel-Composeables umschließt. (I85aca, b/175125483)
Fehlerkorrekturen
NavHost
funktioniert jetzt auch dann, wenn keinOnBackPressedDispatcherOwner
gefunden wird, z. B. in der Vorschau derNavHost
. (I7d8b4)- „Navigation Compose“ hängt jetzt von Navigation
2.3.5
ab. Dadurch wurde ein Problem behoben, das bei der Verwendung vonBackHandler
in einemNavHost
-Ziel aufgetreten ist. (I7e63b, b/182284739)
Version 1.0.0-alpha09
10. März 2021
androidx.navigation:navigation-compose:1.0.0-alpha09
wird veröffentlicht. Version 1.0.0-alpha09 enthält diese Commits.
API-Änderungen
LocalViewModelStoreOwner.current
gibt jetzt eine optionaleViewModelStoreOwner
zurück, um besser zu bestimmen, ob eineViewModelStoreOwner
in der aktuellen Komposition verfügbar ist. Bei APIs, für die eineViewModelStoreOwner
erforderlich ist, z. B.viewModel()
undNavHost
, wird weiterhin eine Ausnahme ausgelöst, wenn keineViewModelStoreOwner
festgelegt ist. (Idf39a)
Fehlerkorrekturen
- Navigation Compose hängt jetzt von Navigation 2.3.4 ab. Diese Version enthält eine Fehlerkorrektur für den Versuch, 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
wird veröffentlicht. Version 1.0.0-alpha08 enthält diese Commits.
Neue Funktionen
NavHost
füllt jetztLocalSavedStateRegistryOwner
CompositionLocal mit derNavBackStackEntry
dieses Ziels aus. So wird sichergestellt, dass jeder Status, der direkt inSavedStateRegistry
gespeichert wird, zusammen mit dem Ziel gespeichert und wiederhergestellt wird. (I435d7, b/179469431)
Version 1.0.0-alpha07
10. Februar 2021
androidx.navigation:navigation-compose:1.0.0-alpha07
wird veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.
Abhängigkeitsupdates
- Navigation Compose ist jetzt von Lifecycle ViewModel Compose 1.0.0-alpha01 abhängig, um
viewModel()
-Unterstützung fürcomposable
-Ziele bereitzustellen. (I7a374) NavHost
verwendet jetzt die neueLocalOnBackPressedDispatcherOwner
aus Activity-Compose 1.3.0-alpha01, um dieOnBackPressedDispatcher
abzurufen, die für dieNavController
festgelegt ist. (I65b12)
Version 1.0.0-alpha06
28. Januar 2021
androidx.navigation:navigation-compose:1.0.0-alpha06
wird veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.
API-Änderungen
- Es wurde eine
getBackStackEntry(route: String)
-Erweiterungsmethode fürNavController
hinzugefügt, die die zugehörigeNavBackStackEntry
zurückgibt. (If8931)
Version 1.0.0-alpha05
13. Januar 2021
androidx.navigation:navigation-compose:1.0.0-alpha05
wird veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
Aktualisiert, um von Compose 1.0.0-alpha10 abhängig zu sein.
Version 1.0.0-alpha04
16. Dezember 2020
androidx.navigation:navigation-compose:1.0.0-alpha04
wird veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
- Aktualisiert für die Kompatibilität mit Compose
1.0.0-alpha09
.
Version 1.0.0-alpha03
2. Dezember 2020
androidx.navigation:navigation-compose:1.0.0-alpha03
wird veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das
popBackStack()
undnavigateUp()
nach einer Konfigurationsänderung oder dem Beenden und Neustarten eines Prozesses nicht funktionierten. (Icea47, b/173281473) - Das Aufrufen eines verschachtelten Diagramms in Ihrem NavHost funktioniert jetzt ordnungsgemäß. (I0948d, b/173647694)
Version 1.0.0-alpha02
11. November 2020
androidx.navigation:navigation-compose:1.0.0-alpha02
wird veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
API-Änderungen
- Navigations-Compose-Elemente unterstützen jetzt NavOptions für die Verwendung von popUpTo- und launchSingleTop-Vorgängen (If96c3, b/171468994)
- Es wurde eine Navigationsfunktion hinzugefügt, die eine Route anstelle einer ID verwendet. So können Sie verschachtelte Graphen im Navigation Compose-DSL erstellen. (I1661d)
- „startDestination“ steht jetzt in der Liste der Parameter für einen NavHost vor der Route (Ie620e)
- Sie können jetzt einen Graphen erstellen, der die Route als Start- oder Ziel außerhalb eines NavHost-Kompositionselements verwendet. (Iceb75)
Version 1.0.0-alpha01
28. Oktober 2020
android.navigation:navigation-compose:1.0.0-alpha01
wird veröffentlicht. Version 1.0.0-alpha01 enthält diese Commits.
Neue Funktionen
Das navigation-compose
-Artefakt ermöglicht die Integration der Navigationskomponente in Jetpack Compose. Dabei werden @Composable
-Funktionen als Ziele in Ihrer Anwendung verwendet.
Diese erste Version bietet Folgendes:
- Ein
NavHost
-Komposit, mit dem Sie Ihren Navigationsgraphen über eine Kotlin-DSL erstellen können. - Begrenzung des Lebenszyklus, von
ViewModel
und des gespeicherten Status auf Zielebene. - Automatische Integration in die Schaltfläche „Zurück“ des Systems
- Unterstützung für das Übergeben von Argumenten, das Anhängen von Deeplinks an Ziele und das Zurückgeben eines Ergebnisses an vorherige Ziele.
- Erstellen Sie spezielle Helpers in
rememberNavController()
undcurrentBackStackEntryAsState()
, um den Status zu heben und dieNavController
mit Composeables außerhalb derNavHost
zu verbinden (z. B. eine untere Navigationsleiste).
Weitere Informationen finden Sie im Leitfaden zum Erstellen von Navigationselementen.
Version 2.3.5
Version 2.3.5
7. April 2021
androidx.navigation:navigation-*:2.3.5
wird veröffentlicht. Version 2.3.5 enthält diese Commits.
Neue Funktionen
- Wenn Sie mithilfe eines
NavDeepLinkRequest
oderUri
navigieren, können Sie jetzt auf denUri
, die Aktion und den Mime-Typ im resultierenden Ziel zugreifen, indem Sie die Absicht über Argumente überKEY_DEEP_LINK_INTENT
abrufen. Diese Funktion ist bereits für externe Deeplinks verfügbar. (I975c3, b/181521877)
Fehlerkorrekturen
OnBackPressedCallbacks
wurde einem Dispatcher mitNavBackStackEntry
als LifecycleOwner hinzugefügt. Jetzt wird nach dem AktivitätslebenszyklusSTOPPED
und dannSTARTED
richtig zurückgefiltert. (Iff94f, b/182284739)- Beim Parsen von Deeplink-Domains wird jetzt nicht mehr zwischen Groß- und Kleinschreibung unterschieden. So wird sichergestellt, dass
www.example.com
sowohl mitwww.example.com
als auch mitwww.Example.com
übereinstimmt. Bei Abfrageparameternamen wird weiterhin zwischen Groß- und Kleinschreibung unterschieden. (#144, b/153829033) - Ein
NullPointerException
wurde behoben, das auftreten konnte, wenn ein Ziel mehrere nicht nullwertige Standardargumente hat und Sie zu diesem Ziel wechseln, während Sie nur einen Teil dieser Argumente überschreiben. (aosp/1644827)
Abhängigkeitsupdates
- Das Gradle-Plug-in „Navigation Safe Args“ hängt jetzt vom Kotlin Gradle-Plug-in 1.4.31 ab. (aosp/1661058, b/181156413)
Externer Beitrag
- Vielen Dank an
bentrengrove
für den Pull-Request, durch den das Parsen von Deeplink-Domains jetzt unabhängig von der Groß- und Kleinschreibung erfolgt. (#144, b/153829033)
Version 2.3.4
Version 2.3.4
10. März 2021
androidx.navigation:navigation-*:2.3.4
wird veröffentlicht. Version 2.3.4 enthält diese Commits.
Neue Funktionen
ReferenceType
-Argumente können jetzt richtig geparst werden, wenn sie als Teil eines Deeplink-URIs gesendet werden. Es werden sowohl der Ganzzahlwert als auch Hexadezimalwerte mit dem Präfix0x
unterstützt. (#127, b/179166693)- Der Parameter
android:defaultValue
für ein Argument mitapp:argType="float"
unterstützt jetzt Ganzzahl-Standardwerte. Sie können alsoandroid:defaultValue="0"
anstelle von0.0
verwenden. (#117, b/173766247)
Fehlerkorrekturen
- Behebung eines Fehlers, bei dem der Installationsvorgang bei Verwendung der Navigationsunterstützung für dynamische Funktionen hängen blieb (Ib27a7, b/169636207)
- Wenn
setViewModelStore
odersetLifecycleOwner
mit demselben Objekt aufgerufen wird, das bereits festgelegt wurde, hat das jetzt keine Auswirkungen mehr (Idf491, b/177825470) - Safe-Args fügt bei Verwendung von Java jetzt Unterdrückungsanmerkungen zu den entsprechenden Methoden hinzu. (I8fbc5, b/179463137)
Externe Beiträge
- Vielen Dank an
JvmName
für den Pull-Request, durch denReferenceType
-Argumente jetzt richtig geparst werden können, wenn sie als Teil eines Deeplink-URIs gesendet werden. (#127, b/179166693) - Vielen Dank an
tatocaster
für den Pull-Request, mit demdefaultValue
für ein Argument zugelassen wird.app:argType=”float”
unterstützt jetzt Ganzzahl-Standardwerte. (#117, b/173766247)
Version 2.3.3
Version 2.3.3
27. Januar 2021
androidx.navigation:navigation-*:2.3.3
wird veröffentlicht. Version 2.3.3 enthält diese Commits.
Fehlerkorrekturen
- Es kommt nicht mehr zu einem Absturz, wenn eine
NavBackStackEntry
angezeigt wird, bevor ihreLifecycle
zuCREATED
verschoben wurde. (Ie3ba3) - Behobene Regression durch b/171364502, bei der das Aufrufen einer Aktivität mit einem Animationsressourcenwert von
0
zu einemResourceNotFoundException
führte. (I7aedb, b/176819931)
Version 2.3.2
Version 2.3.2
2. Dezember 2020
androidx.navigation:navigation-*:2.3.2
wird veröffentlicht. Version 2.3.2 enthält diese Commits.
Fehlerkorrekturen
- Eine Regression in
NavigationUI
wurde behoben, bei der bei Verwendung eines<activity>
-Ziels mitonNavDestinationSelected
nicht zur Aktivität gelangt wurde. (I22e34, b/171364502) - Ein Problem wurde behoben, durch das durch Drücken der Taste
navigation-dynamic-features-fragment
das neu installierte Ziel mehrmals aufgerufen wurde. (aosp/1486056, b/169636207) - Ein Problem wurde behoben, bei dem Standardargumente bei Verwendung von
launchSingleTop
nicht anOnDestinationChangedListener
-Instanzen gesendet wurden. (I2c5cb) - Ein Problem wurde behoben, durch das beim Wechsel zu einem verschachtelten Navigationsgraphen keine neue Graph-Instanz im Backstack erstellt wurde. (Ifc831)
- Ein Problem wurde behoben, bei dem bei Verwendung von
navigate()
mit einempopUpTo
, durch das das letzte Ziel in einem Navigationsgraphen entfernt wurde, der Navigationsgraph nicht sofort zerstört und aus dem Backstack entfernt wurde. (I910a3) - Für Navigation SafeArgs wird jetzt KotlinPoet Version 1.7.2 verwendet, 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-Dekoransicht eines DialogFragments. So können Sie Dialogfragmente testen, die die Navigation mitFragmentScenario
undNavigation.setViewNavController()
verwenden. (I69e0d)
Version 2.3.1
Version 2.3.1
14. Oktober 2020
androidx.navigation:navigation-*:2.3.1
wird veröffentlicht. Version 2.3.1 enthält diese Commits.
Neue Funktionen
- Der Navigationsoberfläche wurden Standard-Animator-Ressourcen hinzugefügt, die den Standard-Animationsressourcen vorgezogen werden sollten. (b/167430145)
- Die Methoden „hashcode“ und „equals“ werden jetzt von NavOptions überschrieben (b/161586466)
- Die Navigation enthält jetzt das aktuelle Ziel in der IllegalArgumentException „Kein Ziel mit ID“. Das sollte die Fehlerbehebung für Entwickler verbessern. (b/168311416)
Fehlerkorrekturen
- Safe Args bricht die Rückgabezeile nicht mehr um, auch wenn der generierte Name der Argumentklasse länger als 100 Zeichen ist. (b/168584987)
Änderungen an Abhängigkeiten
navigation-ui
ist jetzt von DrawerLayout 1.1.1 abhängig. So kannNavigationUI
die Leiste auch bei Verwendung vonLOCK_MODE_LOCKED_CLOSED
oderLOCK_MODE_LOCKED_OPEN
öffnen. (b/162253907)- Safe Args hängt jetzt von KotlinPoet 1.6.0 ab (aosp/1435911)
- Safe Args ist jetzt von AGP 4.0.1 (aosp/1442337) abhängig.
Version 2.3.0
Version 2.3.0
24. Juni 2020
androidx.navigation:navigation-*:2.3.0
wird veröffentlicht. Version 2.3.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.2.0
- Integration von Feature-Modulen: Mit den Artefakten
navigation-dynamic-features-runtime
undnavigation-dynamic-features-fragment
können Sie zu Zielen navigieren, die in Feature-Modulen definiert sind. Die Installation der Feature-Module wird bei Bedarf automatisch gesteuert. Weitere Informationen finden Sie unter Mithilfe von Funktionsmodulen navigieren. - Navigationstests: Das
navigation-testing
-Artefakt enthält einTestNavHostController
, mit dem Sie das aktuelle Ziel festlegen und den Backstack nach Navigationsvorgängen prüfen können. Weitere Informationen finden Sie unter Navigation testen. - Ergebnis zurückgeben: Über die
NavBackStackEntry
, die jedem Ziel im Navigationsrückstack zugeordnet ist, können Sie jetzt auf eineSavedStateHandle
zugreifen, die zum Speichern kleiner Mengen an gespeichertem Status geeignet ist, die einem bestimmten Backstack-Eintrag zugeordnet werden sollten. Weitere Informationen finden Sie unter Ergebnis an das vorherige Ziel zurückgeben. NavigationUI
-Unterstützung fürOpenable
: Alle Verwendungen vonDrawerLayout
inNavigationUI
wurden durch die allgemeinereOpenable
-Benutzeroberfläche ersetzt, die in CustomView1.1.0
hinzugefügt und vonDrawerLayout
in DrawerLayout1.1.0
implementiert wurde.- Unterstützung von Aktionen und MIME-Typen in Deeplinks: Die Deeplink-Funktion wurde erweitert, sodass jetzt neben
app:uri
auchapp:action
undapp:mimeType
unterstützt werden.NavController
unterstützt jetzt die Navigation über eine beliebige Kombination dieser Felder über die neueNavDeepLinkRequest
-Klasse. Weitere Informationen finden Sie unter Über NavDeepLinkRequest navigieren.
Bekannte Probleme
- Die Unterstützung für Deeplink-Aktionen und MIME-Typen ist im Manifest Merger noch nicht verfügbar. Bis dahin enthalten alle generierten
<intent-filter>
-Elemente aus dem<nav-graph>
-Element in deinem Manifest weder deinen Mime-Typ im<data>
-Element noch deine benutzerdefinierte<action>
. Sie müssen Ihrem Manifest manuell eine geeignete<intent-filter>
hinzufügen.
Version 2.3.0-rc01
10. Juni 2020
androidx.navigation:navigation-*:2.3.0-rc01
wird veröffentlicht. Version 2.3.0-rc01 enthält diese Commits.
Fehlerkorrekturen
- Ein
NullPointerException
wurde korrigiert, wenn eine Instanz eines Ziels ohne Argumente durch eine andere Instanz mit Argumenten mitsingleTop
ersetzt wurde. (b/158006669) - Alle von
NavController
geworfenendestination is unknown
-Ausnahmen enthalten jetzt zusätzliche Informationen zur Fehlerbehebung, die bei der Bestimmung des Status vonNavController
helfen. (b/157764916)
Version 2.3.0-beta01
20. Mai 2020
androidx.navigation:navigation-*:2.3.0-beta01
werden veröffentlicht. Version 2.3.0-beta01 enthält diese Commits.
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem die
Lifecycle
derNavBackStackEntry
nach dem Beenden des Prozesses nicht richtig aktualisiert wurde. (b/155218371) OnDestinationChangedListener
-Instanzen, die vor dem Aufruf vonsetGraph()
registriert wurden, werden nach einem Prozesstod jetzt ordnungsgemäß an das wiederhergestellte Ziel gesendet. (b/155218371)- Wenn Sie
singleTop
verwenden, werden die Argumente derNavBackStackEntry
jetzt korrekt aktualisiert und an alleOnDestinationChangeListener
-Instanzen gesendet. (b/156545508)
Abhängigkeitsupdates
- Das
NavigationUI
-Artefakt hängt jetzt von CustomView1.1.0-rc01
und DrawerLayout1.1.0-rc01
ab. (aosp/1309696)
Version 2.3.0-alpha06
29. April 2020
androidx.navigation:navigation-*:2.3.0-alpha06
wird veröffentlicht. (Version 2.3.0-alpha06 enthält diese Commits.)
Neue Funktionen
- Deeplinks werden jetzt zusätzlich zu den bisher verfügbaren
app:uri
auch fürapp:action
undapp:mimeType
unterstützt. Der NavController unterstützt jetzt über die neue KlasseNavDeepLinkRequest
die Navigation über eine beliebige Kombination dieser Felder. (b/136573074, b/135334841)
API-Änderungen
- Die Kotlin-DSL-Unterstützung für Ziele der dynamischen Navigation wurde stark erweitert. (b/148969800)
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das Deeplink-Intents bei Verwendung eines verschachtelten Startziels ignoriert wurden. (b/154532067)
Version 2.3.0-alpha05
15. April 2020
androidx.navigation:navigation-*:2.3.0-alpha05
wird veröffentlicht. Version 2.3.0-alpha05 enthält diese Commits.
Neue Funktionen
- Bei dynamischen Diagramm-Einschlüssen, für die
<include-dynamic>
verwendet wird, müssen Sieapp:graphPackage
nicht mehr angeben. Stattdessen wird ein Standardwert verwendet, indem Sie demapplicationId
nach einem Punkt das SuffixmoduleName
hinzufügen. Wenn Sie IhregraphPackage
anpassen möchten, wird jetzt ein${applicationId}
-Platzhalter unterstützt. (b/152696768) - Die Kotlin-DSL für Navigationsgraphen stellt jetzt ein
defaultArguments
-Map
für Aktionen bereit, was der Möglichkeit entspricht, Standardwerte für<action>
-Elemente in Navigations-XML-Dateien festzulegen. (b/150345605)
Fehlerkorrekturen
- In Navigation 2.2.2 wurde ein
IllegalStateException
-Fehler beim Deeplink zum Startziel Ihres Diagramms behoben, wenn Sie mehrereNavHostFragment
-Instanzen in Ihrer Aktivität haben. (b/147378752)
Abhängigkeitsupdates
- Die Navigation hängt jetzt von Fragment
1.2.4
ab. (aosp/1277325) - Die dynamische Navigation hängt jetzt von Play Core
1.7.2
ab. (aosp/1282257)
Version 2.3.0-alpha04
18. März 2020
androidx.navigation:navigation-*:2.3.0-alpha04
wird veröffentlicht. Version 2.3.0-alpha04 enthält diese Commits.
Neue Funktionen
- Unterstützung für Aktivitäts- und Fragmentziele von Feature-Modulen in der Navigations-Kotlin-DSL hinzugefügt. (b/148969800)
API-Änderungen
- Für die Klasse
DynamicExtras
wird kein Builder-Muster mehr verwendet. Sie kann jetzt direkt erstellt werden. (aosp/1253671) DynamicActivityNavigator
nimmt jetzt einenContext
in seinem Konstruktor anstelle einesActivity
an. (aosp/1250252)
Fehlerkorrekturen
- Leere Labels (d. h. Ziele mit
android:label=””
) werden vonNavigationUI
nicht mehr ignoriert. Der Titel wird jetzt korrekt als leere Zeichenfolge festgelegt. (b/148679860)
Abhängigkeitsupdates
- Die Artefakte für dynamische Navigationsfunktionen sind jetzt von Play Core
1.6.5
abhängig. (b/149556401)
Version 2.3.0-alpha03
4. März 2020
androidx.navigation:navigation-*:2.3.0-alpha03
wird veröffentlicht. Version 2.3.0-alpha03 enthält diese Commits.
API-Änderungen
- Anstatt auf die konkrete
DrawerLayout
-Klasse zu setzen, verwendetAppBarConfiguration
jetzt dieOpenable
-Schnittstelle, die in CustomView1.1.0-alpha02
eingeführt wurde (dieDrawerLayout
ab DrawerLayout1.1.0-alpha04
implementiert). So können Sie benutzerdefinierte Implementierungen vonOpenable
mitNavigationUI
verwenden. (b/129030452)
Fehlerkorrekturen
- Die
navigation-common-ktx
ProGuard-Regeln behalten jetzt nur die verwendetenNavArgs
-Klassen bei, anstatt alleNavArgs
-Instanzen. (b/150213558)
Änderungen an Abhängigkeiten
- Die Navigation ist jetzt wieder von Core
1.1.0
abhängig, da Entwickler nicht zu einer neueren Abhängigkeit wechseln müssen, wenn die Navigation nicht von neuen APIs in Core1.2.0
abhängt.1.2.0
Version 2.3.0-alpha02
19. Februar 2020
androidx.navigation:navigation-*:2.3.0-alpha02
wird veröffentlicht. Version 2.3.0-alpha02 enthält diese Commits.
Neue Funktionen
- Über
NavBackStackEntry
können Sie jetzt auf eineSavedStateHandle
zugreifen, die zum Speichern kleiner Mengen an gespeichertem Status geeignet ist, die mit einem bestimmten Backstack-Eintrag verknüpft werden sollen. Ein Anwendungsfall ist unter Ergebnis zurückgeben beschrieben. (b/79672220)
API-Änderungen
- Es wurden praktische Methoden für
getCurrentBackStackEntry()
undgetPreviousBackStackEntry()
hinzugefügt, um den Abruf einerNavBackStackEntry
für das aktuelle und vorherige Ziel zu vereinfachen. (b/79672220)
Fehlerkorrekturen
navigateUp()
übergibt jetzt die Argumente des aktuellen Ziels undKEY_DEEP_LINK_INTENT
an das vorherige Ziel, wenn Ihre App in Ihrem eigenen Task-Stack gestartet wird. (b/147456890)
Änderungen an Abhängigkeiten
- Die Navigation hängt jetzt von Core
1.2.0
ab.
Version 2.3.0-alpha01
5. Februar 2020
androidx.navigation:navigation-*:2.3.0-alpha01
wird veröffentlicht. Version 2.3.0-alpha01 enthält diese Commits.
Neue Funktionen
- Das neue
navigation-testing
-Artefakt enthält eineTestNavHostController
-Klasse. Diese Klasse bietet eine Alternative zur Verwendung eines Mock-NavController
beim Testen der Navigation. Damit können Sie das aktuelle Ziel festlegen und den Backstack nach Navigationsvorgängen überprüfen. (b/140884273) - Mit der neuen
navigation-dynamic-features-fragment
(und ihrer übertragbaren Abhängigkeitnavigation-dynamic-features-runtime
) können Sie Ziele oder ganze Navigationsgraphen (über<include-dynamic>
) aus Funktionsmodulen einbinden. So wird die Installation von On-Demand-Funktionsmodulen beim Aufrufen dieser Ziele nahtlos ermöglicht. Weitere Informationen finden Sie unter Mithilfe von Funktionsmodulen navigieren. (b/132170186)
Fehlerkorrekturen
- Unter Navigation
2.2.1
: Deeplinks ohne Suchparameter werden jetzt korrekt ignoriert, anstatt sie an nachfolgende{argument}
-Elemente anzuhängen oder nicht mit dem Deeplink abzugleichen. (b/147447512) - Unter Navigation
2.2.1
: Dienavigation-ui
ProGuard-Regeln fürDrawerArrowDrawable
wurden aktualisiert, damitandroid.enableJetifier=true
nicht mehr erforderlich ist. (b/147610424) - Unter Navigation
2.2.1
: Dasnavigation-common-ktx
-Modul hat jetzt einen eindeutigen Manifestpaketnamen, anstatt denselben Manifestpaketnamen wienavigation-runtime-ktx
zu verwenden. (aosp/1141947)
Abhängigkeitsupdates
- Navigation
2.2.1
: Navigation2.2.1
hängt jetzt von Lifecycle ViewModel SavedState2.2.0
und Fragment1.2.1
ab.
Version 2.2.2
Version 2.2.2
15. April 2020
androidx.navigation:navigation-*:2.2.2
werden veröffentlicht. Version 2.2.2 enthält diese Commits.
Fehlerkorrekturen
- Ein Fehler wurde behoben, der beim Deeplink zum Startziel Ihres Diagramms auftrat, wenn Ihre Aktivität mehrere
NavHostFragment
-Instanzen enthält.IllegalStateException
(b/147378752) - Leere Labels (d. h. Ziele mit
android:label=””
) werden vonNavigationUI
nicht mehr ignoriert. Der Titel wird jetzt korrekt als leere Zeichenfolge festgelegt. Diese Funktion wurde bereits in Navigation 2.3.0-alpha04 veröffentlicht. (b/148679860) - Die
navigation-common-ktx
ProGuard-Regeln behalten jetzt nur die verwendetenNavArgs
-Klassen bei, anstatt alleNavArgs
-Instanzen. Diese Funktion wurde bereits in Navigation 2.3.0-alpha03 veröffentlicht. (b/150213558
Abhängigkeitsupdates
- Die Navigation hängt jetzt von Fragment
1.2.4
ab. (aosp/1277325)
Version 2.2.1
Version 2.2.1
5. Februar 2020
androidx.navigation:navigation-*:2.2.1
wird veröffentlicht. Version 2.2.1 enthält diese Commits.
Fehlerkorrekturen
- Bei Deeplinks ohne Suchparameter werden Suchparameter jetzt korrekt ignoriert, anstatt sie an nachfolgende
{argument}
-Elemente anzuhängen oder nicht mit dem Deeplink abzugleichen. (b/147447512) - Die
navigation-ui
ProGuard-Regeln fürDrawerArrowDrawable
wurden aktualisiert, damitandroid.enableJetifier=true
nicht mehr erforderlich ist. (b/147610424) - Das
navigation-common-ktx
-Modul hat jetzt einen eindeutigen Manifestpaketnamen, anstatt denselben Manifestpaketnamen wienavigation-runtime-ktx
zu verwenden. (aosp/1141947)
Abhängigkeitsupdates
- Die Navigation
2.2.1
hängt jetzt vom Lifecycle ViewModel SavedState2.2.0
und vom Fragment1.2.1
ab.
Version 2.2.0
Version 2.2.0
22. Januar 2020
androidx.navigation:navigation-*:2.2.0
wird veröffentlicht. Version 2.2.0 enthält diese Commits.
Wichtige Änderungen seit Version 2.1.0
- NavBackStackEntry: Sie können jetzt
NavController.getBackStackEntry()
aufrufen und dabei die ID eines Ziels oder Navigationsgraphen im Backstack übergeben. Die zurückgegebeneNavBackStackEntry
enthält einLifecycleOwner
, einViewModelStoreOwner
(das gleiche, das vonNavController.getViewModelStoreOwner()
zurückgegeben wird) und einSavedStateRegistryOwner
, die alle von der Navigation gesteuert werden. Außerdem werden die Argumente angegeben, die zum Starten dieses Ziels verwendet wurden. - Integration von Lifecycle ViewModel SavedState:
SavedStateViewModelFactory
ist jetzt die Standard-Factory, die bei Verwendung vonby navGraphViewModels()
oder demViewModelProvider
-Konstruktor mit einemViewModelStoreOwner
verwendet wird, das vonNavController.getBackStackEntry()
oderNavController.getViewModelStoreOwner()
zurückgegeben wird. - Unterstützung von Abfrageparametern für Deeplinks: Für Deeplinks mit Abfrageparametern werden jetzt neu angeordnete Abfrageparameter unterstützt. Argumente mit einem Standardwert oder mit dem Attribut „nullable“ sind beim Abgleich von Deeplinks jetzt optional.
- Verbesserte Animation –
NavHostFragment
verwendet jetztFragmentContainerView
aus Fragment 1.2.0. Dadurch werden Probleme mit der Z-Reihenfolge von Animationen und Fenster-Inset-Zuweisungen an Fragmente behoben.
Version 2.2.0-rc04
18. Dezember 2019
androidx.navigation:navigation-*:2.2.0-rc04
wird veröffentlicht. Version 2.2.0-rc04 enthält diese Commits.
Fehlerkorrekturen
- Die Standard-Einblendungsanimationen von
navigation-ui
wurden an die angepassten Einblendungsanimationen in Fragment1.2.0-rc04
angepasst. (b/145769814)
Version 2.2.0-rc03
4. Dezember 2019
androidx.navigation:navigation-*:2.2.0-rc03
wird veröffentlicht. Version 2.2.0-rc03 enthält diese Commits.
Fehlerkorrekturen
- Es wurde ein Problem beim Parsen von Deeplinks behoben, das bei Verwendung von Abfrageparametern und einem Argument als letztem Teil des Pfads auftrat und verhinderte, dass mehr als ein Zeichen des letzten Pfadarguments geparst wurde. (b/144554689)
- Ein Problem beim Parsen von Deeplinks wurde behoben, bei dem optionale Parameter
"@null"
stattnull
erhielten. (b/141613546) NavHostFragment
stellt den Graphen jetzt nach einer Konfigurationsänderung wieder richtig wieder her, wenn er mitFragmentContainerView
verwendet wird. (b/143752103)
Änderungen an Abhängigkeiten
- Die Navigation hängt jetzt gegebenenfalls vom Lebenszyklus
2.2.0-rc03
, vom Lebenszyklus-ViewModel-Speicherstatus1.0.0-rc03
, von der Aktivität1.1.0-rc03
und vom Fragment1.2.0-rc03
ab.
Version 2.2.0-rc02
7. November 2019
androidx.navigation:navigation-*:2.2.0-rc02
wird veröffentlicht. Version 2.2.0-rc02 enthält diese Commits.
Änderungen an Abhängigkeiten
- Die Navigation hängt jetzt von androidx.lifecycle
2.2.0-rc02
ab.
Version 2.2.0-rc01
23. Oktober 2019
androidx.navigation:navigation-*:2.2.0-rc01
wird seit 2.2.0-beta01
unverändert veröffentlicht. Version 2.2.0-rc01 enthält diese Commits.
Version 2.2.0-beta01
9. Oktober 2019
androidx.navigation:navigation-*:2.2.0-beta01
wird veröffentlicht. Version 2.2.0-beta01 enthält diese Commits.
Neue Funktionen
NavDestination
und seine Unterklassen überschreiben jetzttoString()
, um bei der Fehlerbehebung hilfreichere Informationen bereitzustellen. (b/141264986)
Geändertes Verhalten
- Zusätzliche Suchparameter werden beim Abgleich von Deeplinks jetzt ignoriert, anstatt den Abgleich zu verhindern. (b/141482822)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem Argumente im Pfad eines Deeplinks ignoriert wurden, wenn auch Abfrageparameter angegeben wurden. (b/141505755)
- Die
navArgs()
-Kotlin-Erweiterung aufActivity
enthält jetzt eine bessere Fehlermeldung, wenn keine Extras vorhanden sind. (b/141408999) - Von Safe Args generierte
Directions
-Java-Klassen enthalten jetzt Standardwerte. (b/141099045) - Von Safe Args generierte
Args
-Java-Klassen enthalten jetzt Standardwerte. (b/140123727) - Wenn Sie ein
Toolbar
verwenden, wird die Textänderung bei einem Wechsel zwischen zwei Zielen der obersten Ebene nicht mehr vonNavigationUI
animiert. (b/140848160)
Version 2.2.0-alpha03
18. September 2019
androidx.navigation:navigation-*:2.2.0-alpha03
wird veröffentlicht. Version 2.2.0-alpha03 enthält diese Commits.
Geändertes Verhalten
- Wenn Sie
setViewModelStore()
nachsetGraph
aufrufen, wird jetztIllegalStateException
zurückgegeben. Dieser Wert sollte immer von derNavHost
im Rahmen der Ersteinrichtung festgelegt werden, damit alleNavBackStackEntry
-Instanzen einen einheitlichen Speicher fürViewModel
-Instanzen haben. (aosp/1111821)
Fehlerkorrekturen
- Ein
ConcurrentModificationException
-Problem bei der Verwendung vonViewModel
-Instanzen, die an mehrere unterschiedlicheViewModelStore
-Instanzen im Navigationsgraphen angehängt sind, wurde behoben. (aosp/1112257)
Version 2.2.0-alpha02
5. September 2019
androidx.navigation:navigation-*:2.2.0-alpha02
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Bei Deeplinks mit Abfrageparametern werden jetzt neu angeordnete Abfrageparameter unterstützt. Argumente mit einem Standardwert oder mit dem Attribut „nullable“ sind beim Abgleich von Deeplinks jetzt optional. (b/133273839)
- Sie können jetzt
NavController.getBackStackEntry()
aufrufen und dabei die ID eines Ziels oder Navigationsgraphen im Backstack übergeben. Die zurückgegebeneNavBackStackEntry
enthält einLifecycleOwner
, einViewModelStoreOwner
(das gleiche, das vonNavController.getViewModelStoreOwner()
zurückgegeben wird) und einSavedStateRegistryOwner
, die alle von der Navigation gesteuert werden. Außerdem werden die Argumente angegeben, die zum Starten dieses Ziels verwendet wurden. (aosp/1101691, aosp/1101710)
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das das Hinzufügen einer
NavHostFragment
zu einerViewPager2
mit einerIllegalArgumentException
fehlgeschlagen ist. (b/133640271) NavInflater
ruftgetResourceName()
jetzt nicht mehr unnötig auf, wodurch sich die Inflationszeit um bis zu 40 % verkürzt. (b/139213740)
Version 2.2.0-alpha01
7. August 2019
androidx.navigation:navigation-*:2.2.0-alpha01
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
SavedStateViewModelFactory
ist jetzt die Standard-Factory, die bei Verwendung vonby navGraphViewModels()
oder demViewModelProvider
-Konstruktor mit einem vonNavController.getViewModelStoreOwner()
zurückgegebenenViewModelStoreOwner
verwendet wird. (b/135716331)
API-Änderungen
- Unter Navigation
2.1.0-rc01
: Die veraltetegetViewModelStore()
API aufNavController
, die in2.1.0-alpha02
eingeführt wurde, wurde entfernt. (aosp/1091021)
Fehlerkorrekturen
NavHostFragment
verwendet jetztFragmentContainerView
. Dadurch werden Probleme mit der Z-Reihenfolge von Animationen und der Zustellung von Fenster-Inset-Elementen an Fragmente behoben. (b/137310379)
Version 2.1.0
Version 2.1.0
5. September 2019
androidx.navigation:navigation-*:2.1.0
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Wichtige Änderungen seit Version 2.0.0
- ViewModels auf Navigationsgraphenebene einschränken: Sie können jetzt ViewModels erstellen, die auf Navigationsgraphenebene eingeschränkt sind. Verwenden Sie dazu den
by navGraphViewModels()
-Property-Delegate für Kotlin-Nutzer mit den-ktx
-Bibliotheken oder diegetViewModelStoreOwner()
API, dieNavController
hinzugefügt wurde. Weitere Informationen finden Sie unter UI-bezogene Daten zwischen Zielen teilen. - Dialogziele: Sie können jetzt
<dialog>
-Ziele erstellen, bei denen einDialogFragment
angezeigt wird, wenn Sienavigate
.NavHostFragment
unterstützt standardmäßig Dialogziele. Weitere Informationen finden Sie unter Ziel aus einem DialogFragment erstellen. - Navigation per URI: Sie können jetzt
navigate
mit einemUri
verwenden. Dabei wird der<deepLink>
verwendet, den Sie einem Ziel hinzugefügt haben, um dorthin zu navigieren. Weitere Informationen finden Sie unter Über einen URI navigieren. - NavHostController: APIs, die speziell zum Erstellen einer benutzerdefinierten
NavHost
verwendet wurden, wurden zuNavHostController
verschoben. So können Implementierungen ihreNavController
mit den Hosting-LifecycleOwner
,OnBackPressedDispatcher
undViewModelStore
verbinden.
Version 2.1.0-rc01
7. August 2019
androidx.navigation:navigation-*:2.1.0-rc01
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
API-Änderungen
- Die eingestellte
getViewModelStore()
API aufNavController
, die 2014 eingeführt wurde, wurde entfernt.2.1.0-alpha02
(aosp/1091021)
Version 2.1.0-beta02
19. Juli 2019
androidx.navigation:*:2.1.0-beta02
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Fehlerkorrekturen
- Die unbeabsichtigte Jacoco-Abhängigkeit, die in
2.1.0-beta01
eingeführt wurde, wurde entfernt. (b/137782950)
Version 2.1.0-beta01
17. Juli 2019
androidx.navigation:*:2.1.0-beta01
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Bei
NavigationUI
wird jetzt die Entfernung der Schaltfläche „Nach oben“ animiert, wennsetupWithNavController()
mitToolbar
oderCollapsingToolbarLayout
verwendet wird. (b/131403621)
Fehlerkorrekturen
- Ein Timing-Problem bei der Verwendung mehrerer NavHostFragments mit demselben Container wurde mit
findNavController()
behoben. (b/136021571)
Version 2.1.0-alpha06
2. Juli 2019
androidx.navigation:*:2.1.0-alpha06
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Das von NavHostFragment verwendete Attribut
app:navGraph
wurde in dasnavigation-runtime
-Artefakt verschoben. Benutzerdefinierte Navigationselemente, die über XML hinzugefügt werden können, sollten dieses Attribut verwenden, um sie in den Navigationseditor einzubinden. (b/133880955)
API-Änderungen
- Die
getViewModelStore()
API aufNavController
wurde zugunsten der neuengetViewModelStoreOwner()
-Methode eingestellt, die einenViewModelStoreOwner
zurückgibt. (aosp/987010) - Die Implementierung von Zielen mit schwebendem Fenster, 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 jetztFloatingWindow
-Ziele. (b/133600763)
Geändertes Verhalten
- Der Navigationsstatus wird jetzt bei Verwendung eines
<dialog>
-Ziels korrekt mit dem angezeigten Inhalt synchronisiert. Daher werden<dialog>
-Ziele jetzt automatisch eingeblendet, wenn Sie zu einem Ziel ohne Dialogfeld und Aktivität wechseln, z. B. zu einem<fragment>
-Ziel. (b/134089818)
Fehlerkorrekturen
- Bei der Navigation wird jetzt die Animation unterdrückt, die beim Erstellen der Aktivität beim Umgang mit einem Deeplink auftritt. Dadurch wird ein visueller Blitz behoben. (b/130362979)
- Es wurde ein Fehler behoben, durch den der Navigationsrückstapel nicht synchron war, wenn ein Fragment beim Hinzufügen des ersten Fragments herausgepoppt wurde. (b/133832218)
Version 2.1.0-alpha05
5. Juni 2019
androidx.navigation:*:2.1.0-alpha05
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
API-Änderungen
- Hostbezogene APIs auf
NavController
wurden umbenannt und in eine neue Unterklasse vonNavController
,NavHostController
, verschoben. (aosp/966091) - Die Methode
NavController
setHostOnBackPressedDispatcherOwner()
wurde durch die MethodesetOnBackPressedDispatcher()
vonNavHostController
ersetzt. Vor dem Aufrufen vonsetHostOnBackPressedDispatcherOwner()
muss jetztsetLifecycleOwner()
aufgerufen werden. (aosp/965409) NavHostController
enthält jetzt eineenableOnBackPressed(boolean)
-Methode, die die KlasseNavHostOnBackPressedManager
ersetzt, die zuvor vonsetHostOnBackPressedDispatcherOwner()
zurückgegeben wurde. (aosp/966091)
Fehlerkorrekturen
- Ein Problem wurde behoben, durch das der Rückstapel nach der Navigation über einen URI nicht korrekt war. (b/132509387)
- Deeplinks, die vom NavController automatisch verarbeitet werden, werden jetzt nur noch einmal ausgelöst. (b/132754763)
Version 2.1.0-alpha04
16. Mai 2019
androidx.navigation:*:2.1.0-alpha04
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Fehlerkorrekturen
NavHostFragment
berücksichtigtapp:defaultNavHost
jetzt korrekt, wenn die Ereignisse der Rückwärtsschaltfläche des Systems abgefangen werden. Dadurch wurde eine Regression bei der Navigation2.1.0-alpha03
behoben. b/132077777DialogFragmentNavigator
verarbeitet jetztpopBackStack()
- undnavigateUp()
-Vorgänge korrekt. b/132576764- Ein
IllegalStateException: unknown destination during restore
-Problem beim wiederholten Wechseln zwischen verschachtelten Diagrammen wurde behoben. b/131733658
Version 2.1.0-alpha03
7. Mai 2019
androidx.navigation:*:2.1.0-alpha03
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Bekannte Probleme
- NavHostFragment fängt weiterhin die Schaltfläche „Zurück“ des Systems ab, obwohl
app:defaultNavHost="false"
b/132077777 verwendet wird
Neue Funktionen
- Sie können jetzt
<dialog>
-Ziele erstellen, bei denen einDialogFragment
angezeigt wird, wenn Sienavigate
.NavHostFragment
unterstützt standardmäßig Dialogziele. b/80267254 - Sie können
navigate
nicht nur mit einer Ressourcen-ID oder einerNavDirections
-Instanz aufrufen, sondern jetzt auch über eineUri
. Dabei wird die<deepLink>
verwendet, die Sie einem Ziel hinzugefügt haben, um zum richtigen Ziel zu gelangen. b/110412864
Geändertes Verhalten
- Die Standardanimationen von NavigationUI wurden von 400 ms auf 220 ms beschleunigt, um der Standardanimation von Aktivitäten und Fragmenten zu entsprechen. b/130055522
API-Änderungen
- Die
createFragmentNavigator()
-Methode vonNavHostFragment
wurde eingestellt und ihre Funktionalität in die neueonCreateNavController()
-Methode verschoben, um klarer zu machen, dass dies der richtige Einstiegspunkt zum Hinzufügen benutzerdefinierter Navigationselemente bei der Unterklasse vonNavHostFragment
ist. b/122802849 NavDestination
wurde die MethodehasDeepLink()
hinzugefügt, mit der Sie prüfen können, ob eine bestimmteUri
von diesem Ziel oder, im Fall einerNavGraph
, von einem beliebigen Ziel im Navigationsgraphen verarbeitet werden kann. b/117437718
Fehlerkorrekturen
- Standardargumente werden jetzt korrekt an
OnDestinationChangedListener
-Instanzen übergeben. b/130630686 NavHostFragment
fängt jetzt System-Back-Ereignisse mithilfe vonOnBackPressedDispatcher
ab. Dadurch wird ein Problem bei der bedingten Navigation in Fragment-Lifecycle-Methoden beim Zurückkehren zu einem Fragment behoben. b/111598096- Bei sicheren Argumenten wird ein
android:defaultValue=”@null”
mit einem nicht angegebenenapp:argType
jetzt korrekt alsstring
-Argument abgeleitet. b/129629192
Version 2.1.0-alpha02
3. April 2019
androidx.navigation:*:2.1.0-alpha02
wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.
Neue Funktionen
- Sie können jetzt ViewModels erstellen, die auf Navigationsgraphebene gelten. Verwenden Sie dazu den
by navGraphViewModels()
-Property-Delegate für Kotlin-Nutzer oder diegetViewModelStore()
API, dieNavController
hinzugefügt wurde. b/111614463
API-Änderungen
- Sie können einem
<activity>
-Ziel jetzt einapp:targetPackage
hinzufügen, um den Abgleich des Paketnamens einzuschränken. Es unterstütztapp:targetPackage="${applicationId}"
, um das Paket auf Ihre eigene Anwendungs-ID zu beschränken. b/110975456
Fehlerkorrekturen
- Die
android:name
für<activity>
-Ziele wird beim Inflieren nicht mehr in eine Klasse geparst. Dadurch werden ClassNotFoundExceptions bei der Verwendung dynamischer Funktionen verhindert. b/124538597
Version 2.1.0-alpha01
19. März 2019
Dies ist die erste Alphaversion von Navigation 2.1.0
.
Änderungen an Abhängigkeiten
- Die Navigation hängt jetzt von
androidx.core:core:1.0.1
undandroidx.fragment:fragment:1.1.0-alpha05
ab. Außerdem wurde die Abhängigkeit vonandroidx.legacy:legacy-support-core-utils:1.0.0
entfernt. b/128632612
API-Änderungen
- Es wurde eine neue
Navigation.createNavigateOnClickListener(NavDirections)
-Methode hinzugefügt, die als Alternative zum Erstellen eines Klicklisteners mit einer Ressourcen-ID und einem Bundle dient. b/127631752 FragmentNavigator.instantiateFragment
ist jetzt eingestellt. In der Standardimplementierung wird jetztFragmentFactory
verwendet, um Fragmente zu instanziieren. b/119054429
Fehlerkorrekturen
- Bei der Navigation wird kein null-
Bundle
mehr gesendet, wenn einem Ziel Argumente zugeordnet sind. Dadurch wird ein Problem bei der Verwendung vonandroid:defaultValue="@null"
behoben. b/128531879 - Safe Args ist jetzt von KotlinPoet 1.1.0 abhängig. Dadurch wurde ein Problem mit extrem langen Paketnamen behoben. b/123654948
Version 2.0.0
Version 2.0.0
14. März 2019
Navigation 2.0.0
wird ohne Änderungen gegenüber 2.0.0-rc02
veröffentlicht.
Version 2.0.0-rc02
6. März 2019
Navigation 2.0.0-rc02 enthält neue Artefakte mit der Gruppen-ID androidx.navigation
und ändert die Abhängigkeiten in die AndroidX-Äquivalente.
Das Verhalten von 2.0.0-rc02 ist mit dem von Navigation 1.0.0-rc02 identisch. Für ein Upgrade von 1.0.0-rc02 sollten keine Änderungen am Code erforderlich sein, außer dass Sie Ihre Abhängigkeiten an die neuen Abhängigkeiten anpassen.
Ihr Projekt muss zu AndroidX migriert worden sein, um 2.X-Releases von Navigation verwenden zu können. Navigation 1.0 Stable ist die letzte Version, die die Abhängigkeiten der Supportbibliothek verwendet. Alle zukünftigen Entwicklungen nach Version 1.0 basieren auf AndroidX und auf der stabilen Version 2.0.
Abhängigkeiten vor AndroidX
Fügen Sie für die Versionen von Navigation vor AndroidX die folgenden Abhängigkeiten hinzu:
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
Fügen Sie für Safe args die folgende Classpath in die build.gradle
-Datei auf oberster Ebene ein.
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
Version 1.0.0
Version 1.0.0
14. März 2019
Navigation 1.0.0
wird ohne Änderungen gegenüber 1.0.0-rc02
veröffentlicht.
Version 1.0.0-rc02
26. Februar 2019
Dies ist der zweite Release-Kandidat für die stabile Version 1.0.0 von Navigation. Diese Version enthält eine Reihe von Fehlerkorrekturen.
Fehlerkorrekturen
- Das Problem wurde behoben, bei dem
popBackStack()
ignoriert wurde, wenn das Stammdiagramm keine ID hatte. b/126251695 navigateUp()
verarbeitet jetzt korrekt die Navigation zurück zur Aufgabe Ihrer App, wenn sie nach der Verarbeitung eines Deeplinks ohneFLAG_ACTIVITY_NEW_TASK
aufgerufen wird b/126082008- Ein Problem wurde behoben, bei dem mit
ActivityNavigator.applyPopAnimationsToPendingTransition
nicht die richtige Pop-out-Ausgangsanimation angewendet wurde b/126237567 - In Kotlin-Code, der mit Safe Args generiert wird, werden Kotlin-Keywords wie
in
undfun
im Paketnamen, der mit der KlasseR
verknüpft ist, jetzt ordnungsgemäß maskiert. b/126020455
Version 1.0.0-rc01
21. Februar 2019
Dies ist ein Release-Kandidat für die stabile Version 1.0.0 von Navigation. Diese Version enthält eine Fehlerkorrektur.
Fehlerkorrekturen
- Ein Problem bei der Verwendung von Fragmenten und
singleTop
-Navigationselementen wurde behoben. b/124294805
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
alsandroid:defaultValue
fürreference
-Argumente verwenden. b/124248602
Geändertes Verhalten
- Übereinstimmungen mit genauen Deeplinks haben jetzt Vorrang vor Deeplinks mit Übereinstimmungen mit
.*
oder Argumenten. b/123969518
Fehlerkorrekturen
popBackStack()
undnavigateUp
geben jetzt beim Poppen des letzten Ziels im Backstack korrektfalse
zurück. Damit wurde eine in1.0.0-beta01
eingeführte Regression behoben. b/123933201- Bei der Navigation wird die
ClassLoader
jetzt beim Wiederherstellen des gespeicherten Instanzstatus korrekt festgelegt. So werden Probleme bei der Verwendung benutzerdefinierter Klassen im gespeichertenNavigator
-Status oder in Argumenten vermieden, die an eineNavDestination
gesendet werden. b/123893858 - Von Safe Args generierte NavArgs-Klassen stürzen nicht mehr ab, wenn ein
Parcelable[]
-Argument aus dem gespeicherten Instanzstatus wiederhergestellt wird. b/123963545 - Mit Safe Args werden jetzt nicht mehr benötigte generierte Kotlin-Klassen ordnungsgemäß bereinigt. b/124120883
Version 1.0.0-beta01
4. Februar 2019
Dies ist die erste Betaversion der Navigation API. Sofern kein kritisches Problem auftritt, wird sie bis zur nächsten Version voraussichtlich stabil bleiben. Diese Version enthält einige Fehlerkorrekturen und Verhaltensänderungen.
Geändertes Verhalten
- Bei der Navigation werden Standardwerte für Argumente jetzt sowohl bei der Laufzeit als auch über Safe Args identisch behandelt. Daher kann nur bei Argumenten mit einer
app:argType="reference"
ein Standardwert auf eine andere Ressource verweisen (z. B.@color/colorPrimary
). Der Versuch, einen Standardwert für einen Verweis mit einer anderenapp:argType
zu verwenden, führt beim Parsen der Navigations-XML zu einer Ausnahme. b/123551990 - Safe Args hängt jetzt vom Android Gradle-Plug-in 3.3.0 ab aosp/888413
- Safe Args ist jetzt von Kotlin 1.3.20 abhängig aosp/888414
Fehlerkorrekturen
- Safe Args können jetzt in Bibliotheks- und Funktionsmodulen in allen Versionen des Android Gradle-Plug-ins verwendet werden. b/121304903
- Eine Regression behoben, bei der durch einen einzelnen
popBackStack()
-Vorgang alle Kopien eines Ziels vom Backstack entfernt wurden, anstatt nur eines einzelnen Ziels. b/123552990 - Ein Problem wurde behoben, durch das der Status von
FragmentNavigator
nicht mehr mit dem Status vonNavController
synchronisiert wurde, was beim Versuch, den Backstack wiederherzustellen, zu einerIllegalStateException
führte. b/123803044 - Ein Problem wurde behoben, durch das der zurückgestrichelte Pfeil
NavigationUI
bei Verwendung von ProGuard mit Verschleierung nicht angezeigt wurde. b/123449431 - Der von Safe Args generierte Code verarbeitet jetzt korrekt die Verwendung eines
app:argType
, das 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 richtig. b/123347762
Version 1.0.0-alpha11
23. Januar 2019
Dies ist ein Hotfix für 1.0.0-alpha10
, mit dem ein Problem mit Safe Args behoben wird.
Fehlerkorrekturen
- Behebt ein Problem, bei dem die Klasse „Wegbeschreibungen“, die mit globalen Aktionen verknüpft ist, von Safe Args nicht importiert werden konnte. b/123307342
Version 1.0.0-alpha10
23. Januar 2019
Bekannte Probleme
- Mit Safe Args kann die Klasse „Wegbeschreibungen“ nicht importiert werden, die mit globalen Aktionen verknüpft ist. b/123307342
Diese Version enthält nicht abwärtskompatible API-Änderungen. Weitere Informationen finden Sie unten im Abschnitt Nicht abwärtskompatible Änderungen.
Neue Funktionen
- Kotlin-Nutzer können jetzt den
by navArgs()
-Property-Delegate verwenden, um in einerActivity
oderFragment
einen Verweis auf eine mit Safe Args generierteNavArgs
-Klasse zu erhalten. 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 Module entwickelt, die nur Kotlin enthalten. Dabei werden Standardargumente und unveränderliche Klassen über das Builder-Muster verwendet, das weiterhin über das vorherigeandroidx.navigation.safeargs
-Plug-in verfügbar ist. b/110263087
Verhaltensänderungen
- Übereinstimmende Deeplinks werden jetzt dem Deeplink zugeordnet, der die meisten übereinstimmenden Argumente hat. b/118393029
- Wenn
setGraph()
auf einerNavController
aufgerufen wird, wird der Rückstapel jetzt zurückgesetzt. b/111450672 - Bei unbekannten Deeplinks wird keine
IllegalStateException
mehr ausgegeben, sondern sie werden ignoriert. So werden Probleme mit verschachtelten oder mehrerenNavHostFragment
s behoben. b/121340440
Wichtige Änderungen
- Die Methode
NavOptions.applyPopAnimationsToPendingTransition()
zum Anwenden von Pop-up-Animationen auf eine Aktivität wurde zuActivityNavigator
verschoben. b/122413117 - Mit Safe Args werden jetzt identische Klassen für Aktionen ohne Argumente nicht mehr dupliziert. Der Rückgabetyp für Methoden ohne Argumente in generierten NavDirections-Klassen ist jetzt
NavDirections
. b/123233147 - Von Safe Args generierte Directions-Klassen haben keinen öffentlichen Konstruktor mehr. Sie sollten nur mit den generierten statischen Methoden interagieren. b/123031660
- Von Safe 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
vonNavDirections
'getArguments()
wird jetzt als@NonNull
statt als@Nullable
gekennzeichnet. b/123243957
Fehlerkorrekturen
NavDeepLinkBuilder
verarbeitet jetzt mehrere gleichzeitigePendingIntent
s an dasselbe Ziel korrekt, indem die übergebenen Argumente verwendet werden, um die Eindeutigkeit zu bestimmen. b/120042732NavController
verarbeitet jetztpopBackStack()
-Vorgänge korrekt, wenn ein verschachteltesNavHostFragment
oder ein anderes untergeordnetes Fragment mit einem Backstack verwendet wird. b/122770335NavigationUI
Die Inhaltsbeschreibung der Schaltfläche „Nach oben“ wird jetzt korrekt festgelegt. b/120395362- Von Safe Args generierte Navigationsklassen verarbeiten jetzt globale Aktionen, die dieselbe ID wie eine Aktion für ein Ziel haben, richtig. b/122962504
- Von Safe Args generierte
NavDirections
-Klassen haben jetzt korrekt gleichehashCode()
-Werte, wennequals()
„wahr“ zurückgibt. b/123043662 FragmentNavigator
gibt jetzt eine bessere Fehlermeldung aus, wenn du versuchst, benutzerdefinierteFragmentTransactions
auf demFragmentManager
derNavHostFragment
auszuführen. Sie sollten immergetChildFragmentManager()
verwenden. b/112927148
Version 1.0.0-alpha09
18. Dezember 2018
Diese Version enthält nicht abwärtskompatible API-Änderungen. Weitere Informationen finden Sie unten im Abschnitt Nicht abwärtskompatible Änderungen.
Wir haben uns entschieden, die Entwicklung des android.arch.navigation:navigation-testing
-Artefakts nicht fortzusetzen. Diese Methode hat sich zwar für interne Tests von NavController
bewährt, wir empfehlen jedoch dringend alternative Teststrategien, z. B. das Mocking der NavController
-Instanz, um zu prüfen, ob die richtigen navigate()
-Aufrufe ausgeführt werden. Dieser Ansatz wird im Vortrag zu einzelnen Aktivitäten auf der AndroidDevSummit 2018 ausführlich erläutert. Wir arbeiten außerdem an zusätzlicher Dokumentation speziell zu Tests mit Navigation.
Neue Funktionen
MenuItem
s mitmenuCategory="secondary"
werden nicht mehr aus dem Rückstapel entfernt, wenn sie mitNavigationUI
-Methoden verwendet werden. b/120104424- Mit
AppBarConfiguration
können Sie jetzt eine Fallback-OnNavigateUpListener
-Instanz festlegen, die aufgerufen wird, wennnavController.navigateUp()
false
zurückgibt. b/79993862 b/120690961
Wichtige Änderungen
- Wenn du eine
<argument>
mit einerargType="reference"
verwendest, wird die Referenz nicht mehr von Navigation geparst, sondern die Rohressourcen-ID selbst bereitgestellt. b/111736515 onNavDestinationSelected()
kehrt jetzt standardmäßig zum Startziel Ihres Navigationsdiagramms zurück, was mit densetup
-Methoden übereinstimmt. Fügen SiemenuCategory="secondary"
zuMenuItem
hinzu, um zu verhindern, dass der Rückstapel aufgerufen wird. aosp/852869- Die
fromBundle()
-Methoden der generiertenArgs
-Klassen nehmen jetzt einen nicht nullwertigenBundle
anstelle eines nullableBundle
entgegen. aosp/845616
Fehlerkorrekturen
- Argumente werden jetzt aus Deeplinks richtig als
argType
und nicht immer als Strings geparst b/110273284 - Die Navigation exportiert jetzt ihre öffentlichen Ressourcen korrekt. b/121059552
- Safe Args ist jetzt mit dem Android Gradle Plugin 3.4 Canary 4 und höher kompatibel b/119662045
Version 1.0.0-alpha08
6. Dezember 2018
Diese Version enthält nicht abwärtskompatible API-Änderungen. Weitere Informationen finden Sie unten im Abschnitt Nicht abwärtskompatible Änderungen.
Neue Funktionen
- Wenn Sie Ziellabels mit
NavigationUI
-Methoden verwenden, werden{argName}
-Instanzen inandroid:label
jetzt automatisch durch das richtige Argument ersetzt. b/80267266 - Die Navigation hängt jetzt von der Support Library 28.0.0 b/120293333 ab.
Wichtige Änderungen
OnNavigatedListener
wurde inOnDestinationChangedListener
umbenannt b/118670572OnDestinationChangedListener
übergibt jetzt auch dieBundle
der Argumente aosp/837142- Die Attribute
app:clearTask
undapp:launchDocument
und die zugehörigen Methoden wurden entfernt. Verwenden Sieapp:popUpTo
mit dem Stammknoten Ihres Graphen, um alle Ziele aus dem Backstack zu entfernen. b/119628354 ActivityNavigator.Extras
verwendet jetzt einBuilder
-Muster und es ist möglich, beliebigeIntent.FLAG_ACTIVITY_
-Flags festzulegen. aosp/828140NavController.onHandleDeepLink
wurde inhandleDeepLink
umbenannt aosp/836063- Viele Klassen und Methoden, die nicht für Unterklassen gedacht sind, wie
NavOptions
,NavInflater
,NavDeepLinkBuilder
undAppBarConfiguration
, wurden zufinal
aosp/835681 - Die eingestellte Methode
NavHostFragment.setGraph()
wurde entfernt. aosp/835684 - Die eingestellte Methode
NavigationUI.navigateUp(DrawerLayout, NavController)
wurde entfernt. aosp/835684 - Die Erstellung von Fragmenten wurde zu
FragmentNavigator
verschoben. So können Sie die Erstellung von Fragmenten jetzt noch einfacher an einenFragmentFactory
delegieren. b/119054429 - Der Konstruktor für
NavGraphNavigator
akzeptiert keinContext
mehr. aosp/835340 - NavigatorProvider ist jetzt eine Klasse und keine Schnittstelle mehr. Die Funktion von
NavigatorProvider
, die vongetNavigatorProvider()
zurückgegeben wird, hat sich nicht geändert. aosp/830660 NavDestination.navigate()
wurde entfernt. Rufen Sie stattdessennavigate()
auf demNavigator
an. aosp/830663- Die Funktion
Navigator
wurde erheblich überarbeitet, sodassOnNavigatorNavigatedListener
nicht mehr erforderlich ist. Stattdessen gibtnavigate
dieNavDestination
zurück, zu der die Navigation erfolgt ist. Navigator
-Instanzen können keine Pop-Ereignisse mehr an dieNavController
senden. Du kannstOnBackPressedCallback
verwenden, um das Drücken der Schaltfläche „Zurück“ abzufangen undnavController.popBackStack()
aufzurufen. aosp/833716
Fehlerkorrekturen
popUpTo
funktioniert jetzt zuverlässig, wenn das Ziel ein<navigation>
-Element ist. b/116831650- Es wurden mehrere Fehler behoben, die bei Verwendung verschachtelter Diagramme zu einem
IllegalArgumentException
führten b/118713731 b/113611083 b/113346925 b/113305559 - Das
dataPattern
-Attribut von<activity>
-Zielen wird jetzt mit Argumenten aus nicht-String-Argumenten gefüllt, indemtoString()
b/120161365 aufgerufen wird.
Safe Args
- Safe Args unterstützt serialisierbare Objekte, einschließlich Enum-Werten. Für Enum-Typen kann ein Standardwert festgelegt werden, indem das Enum-Literal ohne den Klassennamen verwendet wird (z. B.
app:defaultValue="READ"
). b/111316353 - Safe Args unterstützt Arrays aller unterstützten Typen. b/111487504
- Unterordner von Ressourcenverzeichnissen werden jetzt von Safe Args ignoriert b/117893516
- Safe Args fügt bei Bedarf
@Override
-Anmerkungen 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. Weitere Informationen finden Sie in der aktualisierten Dokumentation. b/117333663
- Sie können jetzt Argumente an das Startziel Ihres Diagramms übergeben. b/110300470
- Deeplinks unterstützen jetzt benutzerdefinierte Schemas mit Punkten, Bindestriche und Pluszeichen. b/112806402
Wichtige Änderungen
- Das
navigation-testing-ktx
-Modul wurde in dasnavigation-testing artifact
-Modul aufgenommen und wird nicht mehr veröffentlicht. - Das
navigation-testing
-Artefakt hat jetzt eine Abhängigkeit von der Kotlin-Standardbibliothek. Die API wurde geändert, um sie besser an Kotlin-Konventionen anzupassen. Sie können sie aber weiterhin für in Java geschriebene Tests verwenden. - Im Metadatenmanifest registrierte Navigationsgraphen werden nicht mehr unterstützt. b/118355937
- Aktionen können nicht mehr an <activity>-Ziele angehängt werden. aosp/785539
Fehlerkorrekturen
- Abfrageparameter werden in Deeplinks jetzt korrekt geparst. b/110057514
- Bei Zielen für Aktivitäten werden jetzt alle Ein- und Ausstiegsanimationen korrekt angewendet. b/117145284
- Ein Absturz, der nach Konfigurationsänderungen bei Verwendung benutzerdefinierter Navigationselemente auftrat, wurde behoben. b/110763345
Safe Args
- Sichere Argumente haben jetzt eine feste Abhängigkeit vom Android Gradle-Plug-in 3.2.1. b/113167627
- Wegbeschreibungen können jetzt für innere Klassen generiert werden. b/117407555
- Ein Problem beim Generieren von Wegbeschreibungen zu einem <include>-Graphen wurde behoben. b/116542123
Version 1.0.0-alpha06
20. September 2018
Neue Funktionen
- Übergänge mit freigegebenen Elementen für Fragment- und Aktivitätsziele werden jetzt unterstützt b/79665225. Weitere Informationen finden Sie unter Navigation mit der Navigationsarchitekturkomponente implementieren.
- Wenn Sie ein Element in
NavigationView
auswählen, wird das untere Blatt jetzt geschlossen. b/112158843
API-Änderungen
- Funktionsgefährdende Änderung:Die Navigator-Methode
navigate()
verwendet jetzt den ParameterNavigator.Extras
. - Die
getGraph()
-Methode von NavController ist jetztNonNull
b/112243286
Fehlerkorrekturen
NavigationUI.setupWithNavController()
leitet keine Aufrufe mehr weiter, wenn er mit Daten aus einzelnen Zielen verwendet wird b/111961977- Navigator
onSaveState()
wird jetzt nur noch einmal aufgerufen b/112627079
Safe Args
- Klassen für Wegbeschreibungen zu Navigationszielen erweitern jetzt die Klasse „Wegbeschreibung“ des übergeordneten Elements, falls vorhanden b/79871405
- Die Klassen „Directions“ und „Args“ haben jetzt eine nützliche
toString()
-Implementierung b/111843389
Version 1.0.0-alpha05
10. August 2018
Fehlerkorrekturen
- Ein Fehler wurde behoben, der zu einem falschen Backstack-Verhalten führte. b/111907708
- Fehlerkorrektur in
equals()
von Generated Args-Klassen. b/111450897 - Behebung eines Buildfehlers bei Safe Args. b/109409713
- Fehler bei der Umwandlung von Ressourcen-IDs in Java-Namen beheben b/111602491
- Fehlermeldungen zur Nullbarkeit im Safe Args-Plug-in wurden behoben.
- Fügen Sie fehlende Anmerkungen zur Null-Zulässigkeit hinzu.
Version 1.0.0-alpha04
July 19, 2018
Navigation 1.0.0-alpha04
und das zugehörige Safe Args-Gradle-Plug-in enthalten eine Reihe von API-Änderungen, Verhaltensänderungen und Fehlerkorrekturen.
API-/Verhaltensänderungen
- NavHostFragment setzt immer das aktuelle Fragment als primäres Navigationsfragment, damit die untergeordneten Fragmentmanager entfernt werden, bevor der äußere NavController entfernt wird. b/111345778
Safe Args
- Funktionsgefährdende Änderung:
app:type
wurde inapp:argType
geändert, um Konflikte mit anderen Bibliotheken wie ConstraintLayout 2.0.0-alpha1 b/111110548 zu vermeiden. - Fehlermeldungen von Safe Args sind jetzt anklickbar b/111534438
- In Args-Klassen wird jetzt bestätigt, dass
NonNull
-Attribute nicht null sind b/111451769 - Den von NavDirections und Args generierten Klassen b/111455455 b/111455456 wurden zusätzliche
NonNull
-Anmerkungen hinzugefügt.
Fehlerkorrekturen
- Ein Problem mit der System-Zurück-Schaltfläche nach dem Deeplink zu einem Fragmentziel wurde behoben b/111515685
Version 1.0.0-alpha03
12. Juli 2018
Navigation 1.0.0-alpha03
und das zugehörige Safe Args-Gradle-Plug-in enthalten eine Reihe von API-Änderungen, Verhaltensänderungen und Fehlerkorrekturen.
API-/Verhaltensänderungen
- Die Methode „NavigationUI.setupWithNavController“ für die Symbolleiste wurde hinzugefügt b/109868820
- Die Methode NavigationUI.setupWithNavController für CollapsingToolbarLayout wurde hinzugefügt b/110887183
- „popBackStack()“ gibt jetzt „false“ zurück, wenn der Backstack leer ist oder die angegebene Ziel-ID nicht im Backstack enthalten ist b/110893637
- FragmentNavigator ignoriert jetzt Navigationsaktionen, nachdem der FragmentManager den Status gespeichert hat. So werden Ausnahmen vom Typ „Diese Aktion kann nach onSaveInstanceState nicht ausgeführt werden“ vermieden. b/110987825
Safe Args
- Bruchänderung:Nicht alphanumerische Zeichen in Aktions- und Argumentnamen werden in den entsprechenden NavDirections-Methodennamen durch Camel Case ersetzt.
- Beispiel:
DemoController.index
wird zusetDemoControllerIndex
b/79995048. - Beispiel: Aus
action_show_settings
wirdactionShowSettings
b/79642240.
- Beispiel:
- Funktionsgefährdende Änderung:Argumente werden jetzt standardmäßig als nicht null betrachtet. Wenn Sie Nullwerte für String- und Parcelable-Argumente zulassen möchten, fügen Sie
app:nullable="true"
b/79642307 hinzu. - Sie können
app:type="long"
jetzt mit Standardwerten in Form von „123L“ verwenden. b/79563966 - Parcelable-Argumente werden jetzt unterstützt. Dabei wird für
app:type
ein vollständig qualifizierter Klassenname verwendet. Der einzige unterstützte Standardwert ist"@null"
b/79563966. - Args-Klassen implementieren jetzt
equals()
undhashCode()
b/79642246 - Das Safe Args-Plug-in kann jetzt auf Bibliotheksprojekte angewendet werden b/80036553
- Das Safe Args-Plug-in kann jetzt auf Feature-Projekte angewendet werden b/110011752
Fehlerkorrekturen
- Behobene Probleme beim Navigieren während der Lebenszyklusmethoden von Fragmenten b/109916080
- Probleme beim mehrmaligen Wechseln zwischen verschachtelten Diagrammen wurden behoben b/110178671
- Probleme bei der Verwendung von
setPopUpTo
mit dem ersten Ziel in der Grafik wurden behoben b/109909461 - Problem behoben, bei dem alle
app:defaultValue
-Werte als Strings übergeben wurden b/110710788 - aapt2, das im Android Gradle Plugin 3.2 Beta 01 enthalten ist, fügt jetzt in Navigations-XML-Dateien für jedes
android:name
-Attribut Regeln zum Beibehalten hinzu b/79874119 - Speicherleck beim Ersetzen des Standard-FragmentNavigators behoben b/110900142
Version 1.0.0-alpha02
7. Juni 2018
Verhaltensänderungen
FragmentNavigator
verwendet jetztsetReorderingAllowed(true)
. b/109826220Bei der Navigation werden jetzt Argumente decodiert, die aus Deeplink-URLs geparst wurden. b/79982454
Fehlerkorrekturen
Ein
IllegalStateException
wurde beim Aufrufen von „navigate“ aus den Lebenszyklusmethoden des Fragments behoben. b/79632233Die Navigation hängt jetzt von der Support Library 27.1.1 ab, um das Flackern bei Verwendung von Animationen zu beheben. b/80160903
Ein
IllegalArgumentException
wurde behoben, das bei Verwendung von „defaultNavHost="true"“ als untergeordnetes Fragment auftrat. b/79656847Ein
StackOverflowError
bei der Verwendung von NavDeepLinkBuilder wurde behoben. b/109653065Ein
IllegalArgumentException
wurde behoben, das beim Zurückwechseln zu einem verschachtelten Diagramm angezeigt wurde. b/80453447Ein Problem mit sich überschneidenden Fragmenten bei Verwendung von
launchSingleTop
wurde behoben. b/79407969Bei der Navigation wird jetzt der richtige synthetische Backstack für verschachtelte Diagramme erstellt. b/79734195
In der NavigationUI wird jetzt das richtige Element hervorgehoben, wenn ein verschachtelter Graph als
MenuItem
verwendet wird. b/109675998
API-Änderungen
Das
clearTask
-Attribut für Aktionen und die zugehörige API inNavOptions
wurden eingestellt. b/80338878Das Attribut
launchDocument
für Aktionen und die zugehörige API inNavOptions
wurden eingestellt. b/109806636
Version 1.0.0-alpha01
8. Mai 2018
Navigation bietet ein Framework für die Erstellung der Navigation in der App. Diese erste Version ist 1.0.0-alpha01
.