Nawigacja
androidx.navigation
androidx.navigation.compose
androidx.navigation.dynamicfeatures
androidx.navigation.dynamicfeatures.fragment
androidx.navigation.dynamicfeatures.fragment.ui
androidx.navigation.fragment
androidx.navigation.fragment.compose
androidx.navigation.testing
androidx.navigation.ui
| Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja Alfa |
|---|---|---|---|---|
| 24 września 2025 r. | 2.9.5 | - | - | - |
Deklarowanie zależności
Aby dodać zależność od Navigation, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven Google.
Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle aplikacji lub modułu:
Groovy
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.9.5" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.9.5" // 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
Aby dodać Safe Args do projektu, umieść w pliku najwyższego poziomu build.gradle ten element classpath:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.9.5" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.9.5" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Musisz też zastosować jedną z 2 dostępnych wtyczek.
Aby wygenerować kod w języku Java odpowiedni dla modułów Java lub mieszanych modułów Java i Kotlin, dodaj ten wiersz do pliku build.gradle aplikacji lub modułu:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
Aby wygenerować kod Kotlina odpowiedni dla modułów tylko w Kotlinie, dodaj:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
W pliku gradle.properties musisz mieć wartość android.useAndroidX=true, zgodnie z informacjami w artykule Przenoszenie na AndroidX.
Informacje o korzystaniu z rozszerzeń Kotlin znajdziesz w dokumentacji ktx.
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 2.9
Wersja 2.9.5
24 września 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.5 Wersja 2.9.5 zawiera te zmiany.
Poprawki błędów
- Bezpieczne argumenty nawigacji mogą teraz obsługiwać wbudowany język Kotlin w AGP 9.0. (I1d9d76)
Aktualizacja zależności
- Wtyczka Navigation Safe Args jest teraz zależna od wtyczki Androida do obsługi Gradle w wersji 8.4.2. (b/431847270, I5932a)
Wersja 2.9.4
10 września 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.4 Wersja 2.9.4 zawiera te zmiany.
Poprawki błędów
- Zapobieganie awarii, gdy zdarzenie przewidywanego powrotu zostanie dostarczone w środku klatki po wyłączeniu modułu obsługi w trakcie przejścia
NavHost. (I5667c, b/384186542)
Wersja 2.9.3
30 lipca 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.3 Wersja 2.9.3 zawiera te zmiany.
Poprawki błędów
- Usunęliśmy błąd w
NavController, który powodowałConcurrentModificationExceptionpodczas korzystania zOnDestinationChangedListeners. (If7406, b/417784831) - Rozwiązano błąd podczas używania
navigate(uri, navOptions,navigationExtras), który powodował ignorowanie dodatków. (I67fb7, b/430336813)
Wersja 2.9.2
16 lipca 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.2 Wersja 2.9.2 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że wpis nie był wznawiany po zamknięciu okna nad nim (Idb20e, b/418746335).
- Rozwiązaliśmy problem z błędem
MissingFieldException, który występował podczas testowaniaSavedStateHandlez trasami bezpiecznymi pod względem typu przy użyciu niestandardowegoNavTypes. (I2f843, b/421002511)
Wersja 2.9.1
2 lipca 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.1 Wersja 2.9.1 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że obiekty
NavEntriesutworzone za pomocą pojedynczego elementu najwyższego poziomu nigdy nie wykraczały poza stan CREATED w swoimLifecycle.State. (I043ba, b/421095236)
Wersja 2.9.0
7 maja 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.0 Wersja 2.9.0 zawiera te zmiany.
Ważne zmiany od wersji 2.8.0
- Działania Navigation Safe Args są teraz generowane z adnotacją
@CheckResult, aby zapewnić ich użycie.
Interfejs SupportingPane
- Nawigatory niestandardowe mogą teraz oznaczać swoje miejsca docelowe jako implementujące interfejs
SupportingPane, co oznacza dlaNavController, że te miejsca docelowe będą wyświetlane obok innych miejsc docelowych. Korzystając z tego interfejsu, możesz na przykładRESUMEDwiele miejsc docelowych jednocześnie.
Compose Kotlin Multiplatform
- Nawigacja oferuje teraz nową, wspólną funkcję
NavController.handleDeepLink(), która przyjmujeNavDeepLinkRequestzamiastIntent. Dzięki temu platformy inne niż Android będą mogły prawidłowo obsługiwać precyzyjne linki. Dziękujemy Konstantinowi Tskhovrebovowi! - Nawigacja oferuje teraz
NavUri, nową funkcję wspólnego analizatora, która jest zgodnym interfejsem API dla URI Androida na innych platformach. Umożliwia to tworzenie identyfikatorów URI w sposób niezależny od platformy. Dziękujemy Konstantinowi Tskhovrebovowi!
Funkcje bezpieczne pod względem typów
- Interfejsy API bezpieczne pod względem typów, które były wcześniej dostępne tylko za pomocą metod
reified, czylicomposable<YourScreen>mają teraz wersje niekonkretne, które bezpośrednio przyjmują instancjęKClass. - Bezpieczeństwo typu nawigacji obsługuje teraz klasy wartości jako trasę lub jako typ argumentu trasy.
Wersja 2.9.0-rc01
23 kwietnia 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.0-rc01 Wersja 2.9.0-rc01 zawiera te zmiany.
Poprawki błędów
- Usunęliśmy z Jetpack Navigation wszystkie platformy inne niż Android, ponieważ te cele w rzeczywistości nie działają. Zamiast tego udostępniamy teraz szablony dla różnych platform.(I2877d)
Wersja 2.9.0-beta01
9 kwietnia 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.0-beta01 Wersja 2.9.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Wspólny interfejs API
parseStringAsNavUrizostał zmieniony na funkcję fabrycznąNavUri, która przyjmuje ciąg znaków. (I4db6e, b/403616316)
Aktualizacje zależności
- Ta biblioteka jest teraz kierowana na poziom języka Kotlin 2.0 i wymaga KGP w wersji 2.0.0 lub nowszej. (Idb6b5)
Wersja 2.9.0-alpha09
26 marca 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.0-alpha09 Wersja 2.9.0-alpha09 zawiera te zmiany.
Nowe funkcje
- Moduł
navigation-testingjest teraz obsługiwany na komputerach, w systemach Linux, macOS i iOS, a także na urządzeniach z Androidem. (I2b770, b/398265336) NavTypejest teraz obsługiwana na komputerach, w systemach Linux, macOS i iOS, a także na Androidzie. (I297d8)
Wersja 2.9.0-alpha08
12 marca 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.0-alpha08 Wersja 2.9.0-alpha08 zawiera te zmiany.
Poprawki błędów
- Nawigacja
2.8.9: naprawiliśmy regresję znalezioną w Nawigacji w wersji 2.8.8, która wymagała, aby precyzyjny link pasował do wszystkich pól żądania precyzyjnego linku lub intencji, aby można było uznać go za pasujący. Spowodowało to, że precyzyjne linki, które zawierały częściowe dopasowania pól i nie miały innych, przestały działać. (Ie5e36, b/399826566)
Wkład zewnętrzny
- Nowa wspólna funkcja parsera do tworzenia
NavUri. Dziękujemy Konstantinowi Tskhovrebovowi! (If0a6a)
Wersja 2.9.0-alpha07
26 lutego 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.0-alpha07 Wersja 2.9.0-alpha07 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że próba
saveStatez wykluczającym wyskakującym okienkiem powodowała zapisanie stanu null, co mogło prowadzić do awarii podczas przywracania. (I9f3e8, b/395091644) - W Navigation 2.8.8:
NavDeepLinknaprawiono dopasowywanie, w którym precyzyjny link i żądanie precyzyjnego linku muszą być dokładnie zgodne pod względem identyfikatora URI, działania i typu MIME. Dopasowywanie nie jest już dozwolone, jeśli pasują tylko 1 lub 2 pola. (I3b029, b/395712033) - Od wersji Navigation 2.8.8: naprawiono błąd, który powodował, że trasy ze ścieżkami z wieloznacznymi znakami nie pasowały do dodanego linku do aplikacji (I7ea92, b/389970341).
Wkład zewnętrzny
- Wyodrębnij interfejsy API navigation-common, navigation-runtime i navigation-compose na wspólną platformę. Dziękujemy Konstantinowi Tskhovrebovowi! (I1e626, Ica76f, Idf479)
Znane problemy
- W związku z pracami nad rozwiązaniem problemu b/395712033 precyzyjne linki są nieprawidłowo wymagane do posiadania wszystkich tych samych pól co żądanie precyzyjnego linku lub
Intent. Linki bezpośrednie powinny być dopasowywane tylko do pól, które zawierają, a pola nieobjęte dopasowaniem powinny być ignorowane. Problem ten został rozwiązany w kolejnej wersji w ramach zgłoszenia b/399826566.
Wersja 2.9.0-alpha06
12 lutego 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.0-alpha06 Wersja 2.9.0-alpha06 zawiera te zmiany.
Nowe funkcje
- Działania Navigation Safe Args są teraz generowane z adnotacją
@CheckResult, aby zapewnić ich użycie. (I14d4c, b/356323084)
Poprawki błędów
- Naprawiono błąd w
NavController, w którym stany backStack były nieprawidłowo przywracane do tablicy, gdy były zapisywane na liście. (Idfb9b) - W Nawigacji
2.8.7: bezpieczne argumenty nawigacji obsługują teraz miejsca docelowe, które można łączyć. (I35320, b/362791955)
Wersja 2.9.0-alpha05
29 stycznia 2025 r.
Publikacja androidx.navigation:navigation-*:2.9.0-alpha05 Wersja 2.9.0-alpha05 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował nieoczekiwaną animację skalowania podczas korzystania z Navigation Compose. (I480f4, b/353294030)
- W sekcji Nawigacja
2.8.6:NavDestinationetykiety podane w formacie XML będą analizowane za pomocą funkcjiNavType.get, aby zapewnić zgodność z niestandardową logikąNavType. (I7ec2f, b/388100796) - Z Nawigacji
2.8.6: podczas nawigacji do aktywności za pomocądataPatternusługaActivityNavigatorbędzie teraz próbować zakodować wartość argumentu za pomocą argumentuNavType. (I16376, b/383616432) - W Nawigacji
2.8.5rozwiązaliśmy problem, który powodował nieoczekiwaną animację skalowania podczas korzystania z Nawigacji Compose i wywoływania funkcji nawigacji w tej samej klatce, w której kończy się bieżąca animacja. (I26cb1, b/353294030)
Wersja 2.9.0-alpha04
11 grudnia 2024 r.
Publikacja androidx.navigation:navigation-*:2.9.0-alpha04 Wersja 2.9.0-alpha04 zawiera te zmiany.
Nowe funkcje
- Interfejsy API bezpieczne pod względem typów, które były wcześniej dostępne tylko za pomocą metod
reified, czylicomposable<YourScreen>mają teraz wersje nieuprzedmiotowione, które bezpośrednio przyjmują instancjęKClass.(Ia7eed, Id2879, Ibf244, I17d79, Id09d2, I54696, Ia47be, I93281, Ic1bf0, Iba4ee, If56a5, Icf969, I67644, I6f788, b/382094941, b/366291612, b/381938808)
W tabeli poniżej znajdziesz interfejsy API reified i KClass.
| 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) |
Zmiany w interfejsie API
- Przeciążenie
NavGraph.setStartDestinationspecyficzne dla języka Kotlin, które zapewnia bezpieczeństwo typów, jest ukryte przed źródłami w języku Java. (Ic640c, b/364634035)
Poprawki błędów
- W Nawigacji
2.8.5rozwiązaliśmy problem, w wyniku którego funkcjaNavHostmogła zgłaszać wyjątek w funkcjiPredictiveBackHandler, jeśli stos wsteczny został zmniejszony do 1 pozycji, a w tej samej ramce wywołano systemowe cofnięcie. (I1a429, b/375343407) - W sekcji Nawigacja
2.8.5: naprawiono błądNavDestinationNullPointerExceptionpodczas aktualizowaniastartDestinationwykresu. (I99421, b/361560785)
Wkład zewnętrzny
- W sekcji Nawigacja
2.8.5: bezpieczeństwo typu nawigacji obsługuje terazList<Enum>jako typ argumentu trasy bez konieczności stosowania niestandardowegoNavType. Dziękujemy, Csaba Kozák! (GH-725, b/375559962)
Wersja 2.9.0-alpha03
13 listopada 2024 r.
Publikacja androidx.navigation:navigation-*:2.9.0-alpha03 Wersja 2.9.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Bezpieczeństwo typu nawigacji obsługuje teraz klasy wartości jako trasę lub jako typ argumentu trasy. (I9344a, b/374347483)
Poprawki błędów
- Naprawiliśmy
ConcurrentModificationException, który mógł wystąpić, gdyLifecycleObserverdołączony doNavBackStackEntrypowoduje zmianę w stosie wstecznym, gdy hostLifecycleOwner, np. zawierająca go aktywność lub fragment, zmienia stan cyklu życia. (Ia9494)
Wersja 2.9.0-alpha02
30 października 2024 r.
Publikacja androidx.navigation:navigation-*:2.9.0-alpha02 Wersja 2.9.0-alpha02 zawiera te zmiany.
Wkład zewnętrzny
- Nowa wspólna metoda
NavController.handleDeepLink(request: NavDeepLinkRequest). Dziękujemy Konstantinowi Tskhovrebovowi! (I3e228)
Wersja 2.9.0-alpha01
16 października 2024 r.
Publikacja androidx.navigation:navigation-*:2.9.0-alpha01 Wersja 2.9.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Nawigatory niestandardowe mogą teraz oznaczać swoje miejsca docelowe jako implementujące interfejs
SupportingPane, co oznacza dlaNavController, że te miejsca docelowe będą wyświetlane obok innych miejsc docelowych. Korzystając z tego interfejsu, możesz na przykładRESUMEDwiele miejsc docelowych jednocześnie. (Id5559) - W sekcji Nawigacja
2.8.3dodaliśmy nowe testy lint dla modułównavigation-common,navigation-runtimeinavigation-compose, aby ułatwić identyfikowanie tras bezpiecznych pod względem typów, które nie są prawidłowo oznaczone adnotacją@Serializable. Ta kontrola jest stosowana do wszystkich funkcji rozszerzeńNavGraphBuilderiNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - W sekcji Nawigacja
2.8.3dodaliśmy nowe testy lint dla modułównavigation-common,navigation-runtimeinavigation-compose, aby pomóc w identyfikowaniu bezpiecznych pod względem typów tras z argumentami wyliczeniowymi, które nie są prawidłowo oznaczone adnotacją@Keep. Ta kontrola jest stosowana do wszystkich funkcji rozszerzeńNavGraphBuilderiNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
Zmiany w zachowaniu
- Próba użycia
NavController, która została wcześniejDESTROYED, spowoduje terazIllegalStateException. (I520da, b/369616172)
Poprawki błędów
- Zaktualizowano wyjątek „Nie znaleziono klasy Enum”, aby w przypadku usunięcia klasy Enum w zminimalizowanych kompilacjach sugerować użycie adnotacji
@Keep. (I90e79, b/358137294)
Znane problemy
- W nowych regułach lint dodanych w
Navigation 2.8.*występuje problem, który powoduje błądObsolete custom lint checkpodczas próby uruchomienia lint z użyciem wtyczki Android Gradle w wersji 8.4 lub nowszej (b/368070326, b/371463741).
Wersja 2.8
Wersja 2.8.9
12 marca 2025 r.
Publikacja androidx.navigation:navigation-*:2.8.9 Wersja 2.8.9 zawiera te zmiany.
Poprawki błędów
- Naprawiono regresję w Navigation 2.8.8, która wymagała, aby precyzyjny link był dokładnie zgodny ze wszystkimi polami żądania precyzyjnego linku lub intencji, aby można było uznać go za pasujący. Spowodowało to, że precyzyjne linki, które zawierały częściowe dopasowania pól i nie miały innych, przestały działać. (Ie5e36, b/399826566)
Wersja 2.8.8
26 lutego 2025 r.
Publikacja androidx.navigation:navigation-*:2.8.8 Wersja 2.8.8 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że trasy ze ścieżkami zawierającymi symbole wieloznaczne nie pasowały do dodanego linku. (I7ea92, b/389970341)
- Poprawiliśmy dopasowywanie
NavDeepLink, w przypadku którego precyzyjny link i żądanie precyzyjnego linku muszą być dokładnie zgodne pod względem identyfikatora URI, działania i typu MIME. Dopasowywanie nie jest już dozwolone, jeśli pasują tylko 1 lub 2 pola. (I3227f, b/395712033)
Znane problemy
- W związku z pracami nad rozwiązaniem problemu b/395712033 precyzyjne linki są nieprawidłowo wymagane do posiadania wszystkich tych samych pól co żądanie precyzyjnego linku lub
Intent. Linki bezpośrednie powinny być dopasowywane tylko do pól, które zawierają, a pola nieobjęte dopasowaniem powinny być ignorowane. Problem ten został rozwiązany w kolejnej wersji w ramach zgłoszenia b/399826566.
Wersja 2.8.7
12 lutego 2025 r.
Publikacja androidx.navigation:navigation-*:2.8.7 Wersja 2.8.7 zawiera te zmiany.
Poprawki błędów
- Bezpieczne argumenty nawigacji obsługują teraz miejsca docelowe, które można łączyć. (I35320, b/362791955)
Wersja 2.8.6
29 stycznia 2025 r.
Publikacja androidx.navigation:navigation-*:2.8.6 Wersja 2.8.6 zawiera te zmiany.
Poprawki błędów
- Etykiety
NavDestinationdostarczane w formacie XML będą analizowane za pomocąNavType.get, aby zapewnić zgodność z niestandardową logikąNavType. (Id366d, b/388100796) - Podczas przechodzenia do aktywności za pomocą
dataPatternfunkcjaActivityNavigatorbędzie teraz próbować zakodować wartość argumentu za pomocąNavTypeargumentu. (I1a71d, b/383616432)
Wersja 2.8.5
11 grudnia 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.5 Wersja 2.8.5 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że funkcja
NavHostmogła zgłaszać wyjątek w funkcjiPredictiveBackHandler, jeśli stos wsteczny został zredukowany do 1 pozycji, a w tej samej ramce wywołano systemowe cofnięcie. (I1a429, b/375343407) - Usunęliśmy błąd
NavDestinationNullPointerException, który występował podczas aktualizowaniastartDestinationwykresu. (I99421, b/361560785) - Rozwiązaliśmy problem, który powodował nieoczekiwaną animację skalowania podczas korzystania z Navigation Compose i wywoływania funkcji navigate w tej samej klatce, w której kończy się bieżąca animacja. (I26cb1, b/353294030)
- Naprawiliśmy
ConcurrentModificationException, który mógł wystąpić, gdyLifecycleObserverdołączony doNavBackStackEntrypowoduje zmianę w stosie wstecznym, gdy hostLifecycleOwner, np. zawierająca go aktywność lub fragment, zmienia stan cyklu życia. (Ia9494)
Wkład zewnętrzny
- Bezpieczeństwo typu nawigacji obsługuje teraz
List<Enum>jako typ argumentu trasy bez konieczności stosowania niestandardowegoNavType. Dziękujemy, Csaba Kozák! (GH-725, b/375559962)
Wersja 2.8.4
13 listopada 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.4 Wersja 2.8.4 zawiera te zmiany.
Nowe funkcje
- Z Nawigacji
2.9.0-alpha03: bezpieczeństwo typu nawigacji obsługuje teraz klasę wartości jako trasę lub jako typ argumentu trasy (I9344a, b/374347483)
Poprawki błędów
- Nawigacja
2.9.0-alpha01: próba użyciaNavController, które zostało wcześniejDESTROYED, spowoduje terazIllegalStateException. (I520da, b/369616172)
Wersja 2.8.3
16 października 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.3 Wersja 2.8.3 zawiera te zmiany.
Nowe funkcje
- Dodano nowe testy lint dla modułów
navigation-common,navigation-runtimeinavigation-compose, aby pomóc w identyfikowaniu bezpiecznych pod względem typów tras, które nie są prawidłowo oznaczone adnotacją@Serializable. Ta kontrola jest stosowana do wszystkich funkcji rozszerzeńNavGraphBuilderiNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - Dodano nowe testy lint dla modułów
navigation-common,navigation-runtimeinavigation-compose, aby pomóc w identyfikowaniu bezpiecznych pod względem typów tras z argumentami wyliczeniowymi, które nie są prawidłowo oznaczone adnotacją@Keep. Ta kontrola jest stosowana do wszystkich funkcji rozszerzeńNavGraphBuilderiNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
Poprawki błędów
- Naprawiono problem, w którym nowe reguły lint dodane w
Navigation 2.8.*powodowały błądObsolete custom lint checkpodczas próby uruchomienia lint z wtyczką Androida do obsługi Gradle w wersji 8.4 lub nowszej. (I1be3d, b/368070326, b/371463741)
Znane problemy
- Podczas próby uruchomienia narzędzia Lint w wersji 16 (AGP 8.7) lub nowszej narzędzie Lint do nawigacji zgłosi błąd Obsolete custom lint check. (b/371926651)
Wersja 2.8.2
2 października 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.2 Wersja 2.8.2 zawiera te zmiany.
Nowe funkcje
- Navigation Type Safety obsługuje teraz klasy Serializable, które zawierają
Double,Double?,DoubleArray,DoubleArray?,List<Double>iList<Double>?bez konieczności stosowania niestandardowegoNavType. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)
Poprawki błędów
- Ulepszono komunikat o błędzie, który pojawia się, gdy nawigacja nie może przypisać argumentu trasy do
NavType. Nowy komunikat o błędzie będzie zawierać nazwę argumentu, w pełni kwalifikowaną nazwę argumentu i w pełni kwalifikowaną nazwę trasy. (Id8416, b/346264232)
Wersja 2.8.1
18 września 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.1 Wersja 2.8.1 zawiera te zmiany.
Nowe funkcje
- Dodaliśmy nową regułę lint, która zapewnia użycie funkcji
popBackStack, która przyjmuje typ klasy reifikowanej podczas próbypopBackStackza pomocą interfejsów API bezpiecznych pod względem typów. (Ief161, b/358095343)
Poprawki błędów
- Nawigacja wymaga teraz, aby trasa przekazywana do
NavGraphwstartDestinationzawierała wartości wszystkich wymaganych argumentów, w tym argumentów, które nie mogą mieć wartości null i nie mają wartości domyślnej. (I18e74, b/362594265) - Argumenty bezpieczne nawigacji obsługują teraz ciągi znaków, które nie mogą mieć wartości null, dzięki czemu wartości „null” będą analizowane i przechowywane w pakiecie w takiej postaci, w jakiej zostały podane. Odstępuje to od dotychczasowego zachowania, w którym wartości „null” były analizowane jako obiekt null. Ta zmiana dotyczy tylko typów String, które nie mogą mieć wartości null. Ciągi znaków dopuszczające wartość null pozostają bez zmian. (I08b4a, b/348936238)
- Nie można już używać precyzyjnych linków do
NavDestination, z wyjątkiem precyzyjnych linków, które zostały wyraźnie dodane do miejsca docelowego. Oznacza to również, że do miejsca docelowego możesz dotrzeć tylko za pomocą funkcji nawigacji, która przyjmuje ciąg tekstowy. Eliminuje to lukę w zabezpieczeniach, która umożliwiała tworzenie precyzyjnych linków do potencjalnie chronionego miejsca docelowego. (Ie30e6)
Aktualizacja zależności
- Bezpieczne argumenty nawigacji zależą teraz od Kotlina w wersji 1.9.24, a nie 2.X, dzięki czemu deweloperzy nie muszą przeprowadzać aktualizacji. (a4129a)
- Biblioteka Navigation Compose zależy teraz od Compose
1.7.2.
Wersja 2.8.0
4 września 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0 Wersja 2.8.0 zawiera te zmiany.
Ważne zmiany od wersji 2.7.0
Bezpieczeństwo typów w języku Kotlin DSL
- Nawigacja zapewnia teraz bezpieczeństwo typów w przypadku języka Kotlin DSL (używanego przez Navigation Compose) za pomocą Kotlin Serialization, co umożliwia definiowanie miejsc docelowych na wykresie nawigacji za pomocą obiektów i klas danych bezpiecznych pod względem typów:
// 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)
}
}
Więcej informacji znajdziesz w poście na blogu o bezpieczeństwie typów w Navigation Compose.
Nawigacja Compose Predictive Back
- Biblioteka Navigation Compose obsługuje teraz predykcyjne cofanie w aplikacji za pomocą nowych interfejsów API
SeekableTransitionStatez biblioteki compose-animation. Dzięki temu możesz użyć gestu cofnięcia, aby zobaczyć poprzednie miejsce docelowe z niestandardową animacją przejścia, zanim zdecydujesz się zatwierdzić transakcję za pomocą ukończonego gestu lub ją anulować.
Kompozycja Navigation Fragment
- Dodaliśmy nowy artefakt
navigation-fragment-compose, który zawiera alternatywęComposableNavHostFragmentdlaNavHostFragment, umożliwiającą dodawanie miejsc docelowych z możliwością komponowania do plików XML nawigacji. Każdecomposablemiejsce docelowe musi być wyrażone jako metoda najwyższego poziomu bez argumentów@Composable, której pełna nazwa jest używana jako atrybutandroid:namew każdym miejscu docelowym. Podczas przechodzenia do jednego z tych miejsc docelowych tworzony jest fragment zawierający, który wyświetla treści kompozycyjne.
// 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" />
Inne zmiany
- Biblioteka Navigation Compose zależy teraz od biblioteki Compose w wersji 1.7.0.
- Nawigacja udostępnia teraz nową klasę
CollectionNavType<T>, podklasęNavType<T>dla argumentów opartych na kolekcjach, takich jak listy, tablice i mapy. Wszystkie domyślne tabliceNavType(IntArrayType,LongArrayType,FloatArrayType,BoolArrayTypeiStringArrayType) dziedziczą teraz z tej nowej klasy. NavTypema teraz wbudowaną obsługę list liczb całkowitych, ciągów znaków, wartości logicznych, liczb zmiennoprzecinkowych i liczb długich.
Wersja 2.8.0-rc01
21 sierpnia 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-rc01 Wersja 2.8.0-rc01 zawiera te zmiany.
Poprawki błędów
- Naprawiono awarię nawigacji podczas przekazywania klas Enum najwyższego poziomu jako argumentów bezpiecznych pod względem typu. (I0ba76, b/358137294)
- Nawigacja 2.8 działa teraz prawidłowo z pakietem SDK 34 i nie przełączy się na pakiet SDK 35 aż do wydania wersji 2.9 wraz z pozostałymi bibliotekami AndroidX. (b/358798728)
Wersja 2.8.0-beta07
7 sierpnia 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-beta07 Wersja 2.8.0-beta07 zawiera te zmiany.
Znane problemy
- Z powodu b/358137294 od razu obsługiwane są tylko wyliczenia zagnieżdżone w innej klasie. Wyliczenia najwyższego poziomu będą obsługiwane w kolejnej wersji.
Poprawki błędów
- Podczas nawigowania do zduplikowanych lub udostępnionych miejsc docelowych nawigacja będzie w pierwszej kolejności prowadzić do najbliższego pasującego miejsca docelowego z bieżącej lokalizacji na wykresie. (Ic89a4, b/352006850)
- Nawigacja w bezpiecznych argumentach ma teraz nowy element
NavType.EnumType. Oznacza to, że typyEnumnie wymagają już niestandardowychNavType. Pamiętaj, żeEnumSerialNamemusi być domyślną pełną i jednoznaczną nazwą. (I66d22, b/346475493) - Nawigacja w bezpiecznych argumentach ma teraz wbudowaną obsługę typów argumentów dopuszczających wartość null,w tym
Int?,Long?,Float?,Boolean?iEnum<*>?. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) NavGraphstartDestinationbędzie teraz używać domyślnych wartości argumentów, jeśli trasastartDestinationprzekazana doNavGraphjest dokładnie równastartDestination.route. (I13762, b/354046047)
Wersja 2.8.0-beta06
24 lipca 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-beta06 Wersja 2.8.0-beta06 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że sprawdzanie kodu
WrongStartDestinationTypenie sprawdzało obiektów towarzyszących w przekazanym typie klasy, co uniemożliwiało wykrycie błędu. (I92b09)
Wersja 2.8.0-beta05
10 lipca 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-beta05 Wersja 2.8.0-beta05 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd nawigacji
singleTop, który występował, gdy zagnieżdżone elementyNavGraphsmiały tę samąstartDestinationtrasę. (I17b94, b/294408596)
Wersja 2.8.0-beta04
26 czerwca 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-beta04 Wersja 2.8.0-beta04 zawiera te zmiany.
Poprawki błędów
- Nawigacja obsługuje teraz nawigowanie z pustymi ciągami znaków w argumentach ścieżki. (Ic5dbd, b/339481310)
- Ulepszono komunikat o błędzie w przypadku niestandardowych serializatorów zadeklarowanych bezpośrednio w polach klasy za pomocą
@Serializable(with =...), aby wyjaśnić, że ta funkcja nie jest obecnie obsługiwana. (I052b0, b/341319151) - Interfejs API testu
SavedStateHandleFactorymożna teraz używać w testach innych niż testy na Androida, ale wymaga to obsługi przez Robolectric analizowania argumentów za pomocą pakietów. (I76cdc, b/340966212) - Rozwiązaliśmy problem z awarią podczas przywracania stanu po wznowieniu aplikacji po zakończeniu procesu przy użyciu bezpiecznej pod względem typów nawigacji w Compose. (Ia8f38, b/341801005)
- Rozwiązaliśmy problem w Navigation Compose, który powodował, że po anulowaniu gestu przewidywanego powrotu ekran
NavBackStackEntry, do którego wraca użytkownik, nigdy nie wraca do stanu cyklu życiaRESUMED. Dzięki temu miejsce docelowe po powrocie będzie się prawidłowo animować, a nie wskakiwać na swoje miejsce po szybkim przesunięciu. (I97a0c, b/346608857) - Gdy używasz predykcyjnego powrotu z Navigation Compose, wysuwane miejsce docelowe będzie teraz miało odpowiednią kolejność osi Z, dzięki czemu będzie się prawidłowo animować na wierzchu przychodzącego miejsca docelowego. (I2077b, b/345993681)
Wersja 2.8.0-beta03
12 czerwca 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-beta03 Wersja 2.8.0-beta03 zawiera te zmiany.
Zmiany w interfejsie API
CollectionNavTypema nową metodę abstrakcyjnąemptyCollection(). Zastąp tę metodę, aby obsługiwać pustą kolekcję przekazywaną jako argument. (Ie4d84, b/341723133)
Poprawki błędów
- Dodaliśmy dokumentację dotyczącą parametrów
NavType.serializeAsValueiserializeAsValues, aby podkreślić, że końcowe dane wyjściowe powinny być zakodowane w formacie URI. (Ida6bd, b/344943214) - Rozwiązaliśmy problem z awarią podczas wywoływania funkcji
toRoute<T>z argumentemCollectionNavTypeo wartości null. Podczas nawigacji z wartością nullCollectionNavTypeargument wyjściowy będzie wartością domyślną zadeklarowaną w klasie Serializable lub wartością zwracaną przezemptyCollection(), jeśli nie ma wartości domyślnej. (I84158, Id630f, b/342672856)
Wersja 2.8.0-beta02
29 maja 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-beta02 Wersja 2.8.0-beta02 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy błąd
ClassCastException, który występował podczas używaniaNavBackStackEntry.toRoutez niestandardowymNavTypedopuszczającym wartość null. (I1c29b, b/342239473) - Rozwiązaliśmy problemy z przywracaniem stanu listy wstecznej nawigacji, które występowały podczas próby przywrócenia wpisu listy wstecznej niedostępnego za pomocą identyfikatora z bieżącego miejsca docelowego. Ponieważ trasy są oparte na identyfikatorach, miało to wpływ również na miejsca docelowe utworzone za pomocą tras. Rozwiązuje to też problem z awarią spowodowaną wywołaniem funkcji
clearBackStack(), która miała ten sam problem. (I423c3, b/339908057)
Wersja 2.8.0-beta01
14 maja 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-beta01 Wersja 2.8.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
SavedStateHandle.toRoute()przyjmuje teraz parametrtypeMapdla niestandardowych typów argumentów. (Ie39fb, b/339026523)- Dodano interfejs API testowy do
navigation-testing, aby utworzyćSavedStateHandlez obiektu Kotlin Serializable. (Id4867, b/339080702)
Poprawki błędów
- Dodaliśmy brakujące dokumenty parametrów funkcji Kotlin DSL Navigation. (I26a36)
Wersja 2.8.0-alpha08
1 maja 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-alpha08 Wersja 2.8.0-alpha08 zawiera te zmiany.
Safe Args w Navigation Compose
- Prace nad obsługą bezpieczeństwa typów w czasie kompilacji w przypadku Navigation Compose i użytkowników Navigation Kotlin DSL opartego na Kotlin Serialization zostały zakończone, a wcześniej eksperymentalne interfejsy API są teraz stabilne. (Iea94d, I0eb0d, I873b7, I3a64b, I6c3a2, I11f0b, Ic3032, I8d394, I95710, Ice060, Id0e55, I45f8b, Idcdaf, If5380, I08b23, Ia5c59, b/188693139)
Ta funkcja korzysta z serializacji w Kotlinie, aby umożliwić Ci definiowanie miejsc docelowych na wykresie nawigacji za pomocą obiektów bezpiecznych pod względem typów i klas danych:
// 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)
}
}
Więcej informacji znajdziesz w poście na blogu o bezpieczeństwie typów w Navigation Compose.
Nowe funkcje
- Artefakt
navigation-fragment-composeudostępnia terazLocalFragmentlokalną kompozycję dla funkcji kompozycyjnych w ramachComposableFragment. (If35e5) NavTypema teraz wbudowaną obsługę list liczb całkowitych, ciągów znaków, wartości logicznych, liczb zmiennoprzecinkowych i liczb długich. (I4b6dd, Ia914c, b/188693139)
Wersja 2.8.0-alpha07
17 kwietnia 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-alpha07 Wersja 2.8.0-alpha07 zawiera te zmiany.
Nowe funkcje
Dodaje nowy artefakt
navigation-fragment-compose, który zawiera alternatywęComposableNavHostFragmentdlaNavHostFragment, umożliwiającą dodawanie miejsc docelowychcomposabledo plików XML nawigacji. Każdecomposablemiejsce docelowe musi być wyrażone jako metoda najwyższego poziomu bez argumentów@Composable, której pełna nazwa jest używana jako atrybutandroid:namew każdym miejscu docelowym. Podczas przechodzenia do jednego z tych miejsc docelowych tworzony jest fragment zawierający, który wyświetla treści kompozycyjne. (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" />
Zmiany w interfejsie API
- Dalsze wsparcie dla Safe Args w Navigation Compose z użyciem podejścia opartego na serializacji w Kotlinie. Te interfejsy API nie są ukończone i są oznaczone adnotacją
ExperimentalSafeArgsApi. Ta adnotacja zostanie usunięta w przyszłej wersji, gdy cały interfejs API będzie gotowy. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)
Wersja 2.8.0-alpha06
3 kwietnia 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-alpha06 Wersja 2.8.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Rozpoczęliśmy obsługę Safe Args w Navigation Compose przy użyciu podejścia opartego na serializacji w Kotlinie. Te interfejsy API nie są ukończone i są oznaczone adnotacją
ExperimentalSafeArgsApi. Ta adnotacja zostanie usunięta w przyszłej wersji, gdy cały interfejs API będzie gotowy. (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, If9e14, Ibb13e, If44d3, Icb70f, I8972f, I1d432, Icf32b, I20a14, I262aa, I7de99, I35990, I1033d, b/188693139)
Poprawki błędów
NavHostużywa terazAlignment.TopStartjako domyślnego argumentu contentAlignment. Dzięki temu jest ona zgodna z domyślnym ustawieniem dlaAnimatedContenti eliminuje niektóre przypadki nieoczekiwanej zmiany skali od środka. (I09e72, b/330111602)- Podczas wykonywania gestu przewidywanego powrotu w trakcie korzystania z Navigation Compose ikona
NavHostbędzie teraz prawidłowo kończyć niestandardowe przejście, zamiast natychmiast się zamykać. (I99017, b/327292110)
Wersja 2.8.0-alpha05
20 marca 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-alpha05 Wersja 2.8.0-alpha05 zawiera te zmiany.
Nowe funkcje
- Teraz możesz przekazywać argumenty do
NavGraphstartDestinationbezpośrednio wstartDestinationbez korzystania zdefaultValue. Dotyczy to również zagnieżdżonych elementówNavGraphstartDestinations. (I0e0b5, b/109505019, b/188693139)
Zmiany w interfejsie API
- Dodaliśmy nową klasę abstrakcyjną
CollectionNavType<T>, podklasę klasyNavType<T>, która służy do argumentów opartych na kolekcjach, takich jak listy, tablice i mapy. (Ic6d63, b/188693139) - Wszystkie domyślne tablice
NavType(IntArrayType,LongArrayType,FloatArrayType,BoolArrayTypeiStringArrayType) są teraz typuCollectionNavType(Idcf79, b/188693139). NavTypeudostępnia teraz nowy otwartyvalueEqualsinterfejs API, który określa, czy 2 wartości tego samego typu są sobie równe. (I6cb97, b/327229511)
Poprawki błędów
- Parametry zapytania w precyzyjnych linkach umożliwiają teraz używanie wartości w postaci nawiasów klamrowych wokół nazwy argumentu (np.
{argName}) jako prawidłowych wartości w przypadkuNavTypesopartych na ciągach znaków. Rozwiązuje to problem, w którym taka wartość była uznawana za nieprawidłową (lub brak wartości) we wszystkich typach. (I18302, b/327274038) - Funkcje
NavControllerobsługujące trasy, takie jaknavigatelubpopBackStack, mogą teraz prawidłowo dopasowywać trasy wypełnione argumentami tablicyNavTypes. (Iea805, b/327229511)
Wersja 2.8.0-alpha04
6 marca 2024 roku
Publikacja androidx.navigation:navigation-*:2.8.0-alpha04 Wersja 2.8.0-alpha04 zawiera te zmiany.
Nowe funkcje
- Możesz teraz określać
SizeTranformdla przejść w Navigation Compose, definiując je w ramach inicjowania funkcjicomposablelubnavigation. (I91062, b/296912651)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że
NavHostw Compose Navigation nie wyświetlał prawidłowo przejścia podczas korzystania z funkcji Wstecz systemu bez gestu. (Iceeae, b/325998468)
Wersja 2.8.0-alpha03
21 lutego 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-alpha03 Wersja 2.8.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
NavBackStackEntry.savedStateHandlejest teraz oznaczony jako@MainThread, ponieważ używa kodu, który i tak musi znajdować się w głównym wątku. (Ibb988, b/299523245)
Poprawki błędów
- Rozwiązanie problemu w komponencie Navigation, który powodował, że
NavGraphViewModele byłyDESTROYEDzbyt wcześnie, ponieważ powiązany z nimi wpisViewModelnie był częścią zapisanego stanu. (Ib6bb7, b/317581849)
Aktualizacja zależności
- Biblioteka Navigation Compose zależy teraz od Compose w wersji 1.7.0-alpha03.
Wersja 2.8.0-alpha02
7 lutego 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-alpha02 Wersja 2.8.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Biblioteka Navigation Compose obsługuje teraz predykcyjne cofanie w aplikacji za pomocą nowych interfejsów API
SeekableTransitionStatez biblioteki compose-animation. Dzięki temu możesz użyć gestu cofnięcia, aby zobaczyć poprzednie miejsce docelowe z niestandardową animacją przejścia, zanim zdecydujesz się zatwierdzić transakcję za pomocą ukończonego gestu lub ją anulować. (I8b8e9)
Wersja 2.8.0-alpha01
24 stycznia 2024 r.
Publikacja androidx.navigation:navigation-*:2.8.0-alpha01 Wersja 2.8.0-alpha01 zawiera te zatwierdzenia.
Poprawki błędów
- Usunięto wyciek
BackStackState, w którym wiele wywołańsaveStatew miejscu docelowym powodowało zapisywanie wielu stanów, ale można było przywrócić tylko pierwszy z nich. (I598b0, b/309559751) - Rozwiązaliśmy problem polegający na tym, że argumenty inne niż ciągi znaków nie były prawidłowo wyświetlane podczas używania funkcji pomocniczych
NavigationUIdo wypełniania tytułu pasków aplikacji. (#636, b/316676794)
Aktualizacja zależności
- Biblioteka Navigation Compose zależy teraz od Compose
1.7.0-alpha01, co rozwiązuje problem, który mógł powodować nieoczekiwaną animację skalowania. (b/297258205)
Wkład zewnętrzny
- Dziękujemy SimonMarquis za rozwiązanie problemu z wyświetlaniem argumentów innych niż ciągi znaków podczas używania funkcji pomocniczych
NavigationUIdo wypełniania tytułu pasków aplikacji.
Wersja 2.7.7
Wersja 2.7.7
7 lutego 2024 r.
Publikacja androidx.navigation:navigation-*:2.7.7 Wersja 2.7.7 zawiera te zatwierdzenia.
Poprawki błędów
- Przeniesiono z Navigation
2.8.0-alpha01: naprawiono wyciekBackStackState, w którym wiele wywołańsaveState()w jednymNavBackStackEntrypowodowało zapisywanie wielu stanów, ale można było przywrócić tylko pierwszy zapisany stan. (I598b0, b/309559751) - Przeniesiono z Nawigacji
2.8.0-alpha01: rozwiązano problem polegający na tym, że argumenty inne niż ciągi tekstowe nie były prawidłowo wyświetlane podczas używania funkcji pomocniczychNavigationUIdo wypełniania tytułu pasków aplikacji. (#636, b/316676794)
Wkład zewnętrzny
- Dziękujemy SimonMarquis za rozwiązanie problemu z wyświetlaniem argumentów innych niż ciągi znaków podczas używania funkcji pomocniczych
NavigationUIdo wypełniania tytułu pasków aplikacji.
Wersja 2.7.6
Wersja 2.7.6
13 grudnia 2023 r.
Publikacja androidx.navigation:navigation-*:2.7.6 Wersja 2.7.6 zawiera te zatwierdzenia.
Poprawki błędów
- Funkcja
NavGraphequals()prawidłowo uwzględnia teraz węzły drugiego wykresu, a nie tylko wykresu wywołującego. Dzięki temu wykresy z węzłami o różnych identyfikatorach nie będą już uznawane za równe (I401cb, b/311414915).
Wersja 2.7.5
Wersja 2.7.5
1 listopada 2023 roku
Publikacja androidx.navigation:navigation-*:2.7.5 Wersja 2.7.5 zawiera te zatwierdzenia.
Ulepszenia wydajności
- Znacznie zwiększyliśmy wydajność (zarówno pod względem czasu, jak i liczby przydziałów) porównywania 2 wykresów. Oznacza to, że wywołania takie jak
setGraph, które wewnętrznie porównują nowy wykres z istniejącym, są znacznie szybsze i powodują mniej pominiętych klatek. Dziękujemy Michałowi Z za dokładną analizę, która doprowadziła do tej zmiany. (I6ad62) NavHostbędzie teraz renderować miejsce docelowe na początku pierwszego przejścia kompozycji, zamiast czekać na drugie przejście, aby odczytać zaktualizowany stan. (I439a7, b/304852206)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że stos wsteczny był usuwany, jeśli funkcja
setGraphbyła wywoływana więcej niż raz z dokładnie tym samym wykresem, ale tylko wtedy, gdy na wykresie znajdowało się miejsce docelowe zawierające działanie łączące 2 miejsca docelowe. (Ieaed7) - Okna, które zostały otwarte i zamknięte w szybkiej kolejności, nie będą już widoczne na liście
NavController.visibleEntries. (I67586, b/287969970) - Gdy wpis zostanie usunięty, a następnie nastąpi zmiana konfiguracji, jego pole
ViewModelzostanie prawidłowo wyczyszczone, jeśli polesaveStatema wartość false. (Idf242, b/298164648) - Naprawiono problem, w którym
NavControllermogło obsługiwać ten sam link bezpośredni więcej niż raz, jeśli stos wsteczny był całkowicie pusty przed zmianą konfiguracji lub wywołaniemsetGraphtylko wtedy, gdy przychodzący Intent miał ustawioną flagęFLAG_ACTIVITY_NEW_TASK. (I73c7f)
Aktualizacje zależności
- Nawigacja za pomocą fragmentów zależy teraz od Fragmentu w wersji 1.6.2. Rozwiązuje to problem, w którym instancje
ViewModelzagnieżdżonych fragmentów nie były czyszczone podczas wywoływaniaclearBackStack.
Wersja 2.7.4
Wersja 2.7.4
4 października 2023 roku
Publikacja androidx.navigation:navigation-*:2.7.4 Wersja 2.7.4 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy obsługę znaku
popUpTo, aby można było używać tras z argumentami, które umożliwiają powrót do konkretnego wpisu korzystającego z tych argumentów. Jest to zgodne z obsługą wpopBackStack. (I731f4, b/299255572)
Poprawki błędów
- Rozwiązanie problemu z awarią
FragmentNavigator, która występuje, gdy przerwanie nawigacji inną nawigacją za pomocąpopUpTopowoduje awarięFragmentNavigator. (I3c848, b/301887045) - Rozwiązaliśmy problem polegający na tym, że naciśnięcie przycisku Wstecz w systemie powodowało nieprawidłową aktualizację ikony
currentDestination, która nie pasowała do wyświetlanego fragmentu. (Id0d6c, b/289877514) DialogFragmentbędzie teraz prawidłowo przechodzić do stanuRESUMEDpo zamknięciu okna dialogowego znajdującego się nad nim. (I88f0d, b/301811387)
Wersja 2.7.3
Wersja 2.7.3
20 września 2023 r.
Publikacja androidx.navigation:navigation-*:2.7.3 Wersja 2.7.3 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem w nawigacji z fragmentami, który powodował, że lista
visibleEntrieszawierała nieprawidłowe wpisy. (I5caa9, b/288520638) - Rozwiązaliśmy problem, który powodował, że miejsce docelowe pływającego okna (np.
Dialogs,Bottomsheetsitp.) nigdy nie otrzymywało wywołania zwrotnego cyklu życiaRESUMED. (I3b866, b/287505132)
Wersja 2.7.2
Wersja 2.7.2
6 września 2023 r.
Publikacja androidx.navigation:navigation-*:2.7.2 Wersja 2.7.2 zawiera te zatwierdzenia.
Poprawki błędów
- Nawigacja zależy teraz od Cyklu życia
2.6.2, co rozwiązuje problem z interakcją międzyrememberSaveableaNavHostw Nawigacji Compose, która powodowała, że stanrememberSaveablemiejsc docelowych i wszystkich instancjiViewModelnależących doSavedStateHandlenie był prawidłowo przywracany po zakończeniu i ponownym utworzeniu procesu. (b/298059596, b/289436035) - Rozwiązaliśmy problem, który występował podczas jednoczesnego wyświetlania wielu okien w Navigation Compose.Okna częściowo zasłonięte (np. nie te na wierzchu) były w stanie
CREATEDcyklu życia zamiast w stanieSTARTED. (aosp/2728520, b/289257213) - Rozwiązaliśmy problem z wyświetlaniem wielu okien w Navigation Compose jednocześnie, w którym zamknięcie okna znajdującego się na wierzchu powodowało, że nowe okno na wierzchu pozostawało w stanie cyklu życia
STARTEDzamiast prawidłowo przechodzić do stanuRESUMED. (aosp/2629401, b/286371387) - Bezpieczne argumenty nawigacji nie tworzą już instancji zadania od razu, jeśli nie jest ono wykonywane. (I0e385, b/260322841)
Aktualizacja zależności
- Biblioteka Navigation Compose zależy teraz od biblioteki Compose w wersji 1.5.1.
Wersja 2.7.1
Wersja 2.7.1
23 sierpnia 2023 r.
Publikacja androidx.navigation:navigation-*:2.7.1 Wersja 2.7.1 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem w nawigacji z Compose, który powodował, że podczas korzystania z
Scaffoldmógł pojawić się błąd związany z próbą uzyskania dostępu doLifecycle.State.DESTROYEDViewModel. (I1dc11, b/268422136)
Wersja 2.7.0
Wersja 2.7.0
9 sierpnia 2023 r.
Publikacja androidx.navigation:navigation-*:2.7.0 Wersja 2.7.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.6.0
Animacje z Accompanist
Teraz, gdy AnimatedContent jest stabilny, mogliśmy przenieść kod z animacji nawigacji w bibliotece Accompanist z powrotem do Navigation Compose.
Oznacza to, że cała obsługa ustawiania niestandardowych przejść, która istniała w AnimatedNavHost, jest bezpośrednio obsługiwana w NavHost.
Nie wprowadzimy żadnych dodatkowych zmian w animacji nawigacji Accompanist. Wkrótce oficjalnie wycofamy ją z użycia i udostępnimy wskazówki dotyczące powrotu do samego Navigation Compose. Będzie to odwrotność przewodnika po migracji. Jeśli korzystasz już z najnowszej wersji alfa Accompanist (0.31.2-alpha), nie musisz wprowadzać żadnych innych zmian w interfejsie API. (b/197140101)
Poprawki błędów
- Komponent NavHost w Navigation Compose prawidłowo przechwytuje wywołania systemowe wstecz, nawet po zatrzymaniu i wznowieniu aktywności. (Icb6de, b/279118447)
Aktualizacje zależności
- Nawigacja zależy teraz od
1.5.0Compose, a nie od1.1.0.
Wersja 2.7.0-rc01
26 lipca 2023 r.
Publikacja androidx.navigation:navigation-*:2.7.0-rc01 Wersja 2.7.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że lambdy
EnterTransitioniExitTransitionutworzone w ramach funkcjiNavHostmogły pozostać w pamięci nawet po usunięciu funkcjiNavHostz kompozycji. (I893d0)
Znane problemy
- W nawigacji w wersji 2.6.x występuje problem, który podczas nawigacji z użyciem popUpTo może powodować błąd
IllegalArgumentException. Możesz uniknąć tego wyjątku, restrukturyzując wykres, podobnie jak w przypadku porady podanej tutaj. (b/287133013)
Wersja 2.7.0-beta02
28 czerwca 2023 r.
Publikacja androidx.navigation:navigation-*:2.7.0-beta02 Wersja 2.7.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Biblioteka Navigation Compose ma teraz odpowiednią kolejność osi Z w przypadku niestandardowych przejść, które korzystają z opcji nawigacji
popUpTo.(/Ib1c3a, b/285153947)
Wersja 2.7.0-beta01
7 czerwca 2023 r.
Publikacja androidx.navigation:navigation-*:2.7.0-beta01 Wersja 2.7.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
NavHostw Navigation Compose prawidłowo przechwytuje wywołania systemowe, nawet po tym, jakActivityzostałoSTOPPEDiRESUMED. (Icb6de, b/279118447)
Wersja 2.7.0-alpha01
24 maja 2023 r.
Publikacja androidx.navigation:navigation-*:2.7.0-alpha01 Wersja 2.7.0-alpha01 zawiera te zatwierdzenia.
Animacje z Accompanist
Teraz, gdy AnimatedContent jest stabilny, mogliśmy przenieść kod z animacji nawigacji w bibliotece Accompanist z powrotem do Navigation Compose.
Oznacza to, że cała obsługa ustawiania niestandardowych przejść, która istniała w AnimatedNavHost, jest bezpośrednio obsługiwana w NavHost.
Nie wprowadzimy żadnych dodatkowych zmian w animacji nawigacji Accompanist. Wkrótce oficjalnie wycofamy ją z użycia i udostępnimy wskazówki dotyczące powrotu do samego Navigation Compose. Będzie to odwrotność przewodnika po migracji. Jeśli korzystasz już z najnowszej wersji alfa Accompanist (0.31.2-alpha), nie musisz wprowadzać żadnych innych zmian w interfejsie API. (b/197140101)
Poprawki błędów
- Nawigacja
2.6.0-rc02: rozwiązaliśmy problem z nawigacją we fragmentach, który polegał na tym, że nawigowanie za pomocąpopUpToi usuwanie fragmentu ze stosu wstecznego bez ponownego tworzenia jego widoku powodowało zatrzymanie działania systemowego przycisku Wstecz. (Ieb8d4, b/281726455)
Aktualizacje zależności
- Nawigacja zależy teraz od Compose
1.5.0-beta01.
Wersja 2.6.0
Wersja 2.6.0
7 czerwca 2023 r.
Publikacja androidx.navigation:navigation-*:2.6.0 Wersja 2.6.0 zawiera te zatwierdzenia.
Ważne zmiany w nawigacji od wersji 2.5.0
NavBackStackEntryargumentsiargumentsprzekazywane doOnDestinationChangedListenersą teraz tylko kopią niezmiennych argumentów, które zostały utworzone podczas przechodzenia do miejsca docelowego. Oznacza to, że wszelkie zmiany wprowadzone w tych pakietach nie będą odzwierciedlane w kolejnych dostępach doargumentsani innych instancjiOnDestinationChangedListener.NavDeepLinkobsługuje teraz wartości domyślne tablic, co umożliwia obsługę powtarzających się parametrów zapytania, które będą mapowane na typ tablicy argumentu.NavTypezawiera teraz też metodę domyślną, którą można zastąpić, aby połączyć 2 przeanalizowane wartości.- Niestandardowe podklasy
NavTypemogą teraz zastępowaćserializeAsValue, aby serializować wartość do postaci ciągu znaków, co umożliwia serializację i deserializację (za pomocąparseValue) w całości w klasieNavType.StringTypezastępuje teraz tę metodę, aby wywoływaćUri.encodena podanymString.
Ważne zmiany w Navigation Compose od wersji 2.5.0
- Podczas wyświetlania podglądu funkcji kompozycyjnej za pomocą
NavHostdomyślnie będzie teraz wyświetlany elementstartDestinationz elementu NavGraph. NavController.popBackStack(route),NavController.getBackStackEntry(route)iNavController.clearBackStack(route)obsługują teraz trasy z argumentami częściowo lub w pełni wypełnionymi. Pamiętaj, że argumenty muszą być dokładnie takie same jak argumenty wpisu.- Próba utworzenia pustego
NavDeepLinkza pomocąnavDeepLinkKotlin DSL spowoduje teraz wyświetlenie ostrzeżenia narzędzia lint, że precyzyjny link musi zawierać adres URI, działanie lub typ MIME, aby był prawidłowy.
Ważne zmiany w nawigacji za pomocą fragmentów od wersji 2.5.0
NavHostFragmentnie przechwytuje już samego systemowego przycisku Wstecz. Dzięki temu podstawowyFragmentManagermoże obsługiwać przycisk Wstecz. Dzięki temu Fragment1.7.0-alpha01i nowsze wersje mogą wyświetlać animację przewidywanego powrotu w aplikacji na urządzeniach z Androidem U.- Jeśli używasz nawigacji z fragmentami, próba ręcznego wykonania operacji
FragmentTransaction, która dodaje fragment do stosu wstecznegoFragmentManager, spowoduje teraz zgłoszenie wyjątkuIllegalArgumentException. Fragmenty należy zawsze dodawać za pomocą interfejsunavigate()API. - Jeśli w atrybutach
app:dataiapp:dataPatternelementu activity w pliku XML nawigacji użyjesz dokładnego ciągu znaków${applicationId}jako symbolu zastępczego, zostanie on automatycznie wypełniony wartościąpackageNamekontekstu podczas rozwijania. FragmentNavigatorkorzysta teraz z interfejsów API przejścia podczas nawigacji i wyświetlaniaNavBackStackEntries. Oznacza to, żeNavBackStackEntryLifecyclebędzie teraz czekać na zakończenie efektów specjalnych związanych z wejściem i wyjściem fragmentu, zanim przesunie swój ostatniLifecycle.State.DialogFragmentNavigatorkorzysta teraz z interfejsów API przejścia podczas nawigacji i wyświetlaniaNavBackStackEntries. Oznacza to, żeNavBackStackEntryLifecyclebędzie teraz czekać, ażDialogFragmentLifecycleprzejdzie do stanuDESTROYED, zanim sam przejdzie do stanuDESTROYED.NavHostFragmentumożliwia teraz pobranieNavControllerod razu po podłączeniuNavHostFragmentdoFragmentManager, a nie dopiero poonCreate().- Obsługa dynamicznych modułów funkcji w nawigacji zależy teraz od szczegółowej biblioteki Play Feature Delivery.
- Bezpieczne argumenty nawigacyjne zależą teraz od wtyczki Androida do obsługi Gradle w wersji 7.3.0. Oznacza to, że jest ona teraz zgodna tylko z wersjami 7.3.0 i nowszymi.
Ważne zmiany w NavigationUI od wersji 2.5.0
- Gdy przekazujesz identyfikator wykresu nawigacji do
AppBarConfiguration(np. za pomocąMenu),NavigationUItraktuje teraz tylko miejsce docelowe rozpoczęcia tego wykresu nawigacji jako miejsce docelowe najwyższego poziomu, zamiast nieprawidłowo oznaczać każde miejsce docelowe na wykresie jako miejsce docelowe najwyższego poziomu. Sposób przekazywania identyfikatora pojedynczego miejsca docelowego pozostaje bez zmian. Ta sama funkcja jest dostępna w Twoim kodzie za pomocą nowej funkcjiisTopLevelDestinationwAppBarConfiguration. - Integracje
setupWithNavControllerwNavigationUIdo pracy z górnym paskiem aplikacji będą teraz analizować wartościR.stringargumentówReferenceTypeznalezionych wandroid:labeli zwracać ich wartości typu String zamiast automatycznie generowanej liczby całkowitej zasobu. NavigationUIudostępnia teraz logi, gdy nie uda się nawigować za pomocą wybranegoMenuItem.
Wersja 2.6.0-rc02
24 maja 2023 r.
Publikacja androidx.navigation:navigation-*:2.6.0-rc02 Wersja 2.6.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem z nawigacją we fragmentach, który polegał na tym, że nawigowanie za pomocą
popUpToi usuwanie fragmentu ze stosu wstecznego bez ponownego tworzenia jego widoku powodowało, że przycisk Wstecz w systemie przestawał działać. (Ieb8d4, b/281726455)
Wersja 2.6.0-rc01
10 maja 2023 r.
Publikacja androidx.navigation:navigation-*:2.6.0-rc01 Wersja 2.6.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem w Navigation z fragmentami, w którym usunięcie fragmentu za pomocą nawigacji z
popUpTow wywołaniu zwrotnym cyklu życiaonResume()powodowałoIllegalStateException. (I21884, b/279644470)
Wersja 2.6.0-beta01
19 kwietnia 2023 r.
Publikacja androidx.navigation:navigation-*:2.6.0-beta01 Wersja 2.6.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
NavBackStackEntryudostępnia teraz niestandardową implementacjętoString. (Iff00b)
Poprawki błędów
- Jeśli używasz nawigacji z fragmentami, próba ręcznego wykonania operacji
FragmentTransaction, która dodaje fragment do stosu wstecznegoFragmentManager, spowoduje teraz zgłoszenie wyjątkuIllegalArgumentException. Fragmenty należy zawsze dodawać za pomocą interfejsunavigate()API. (I6d38e) - Jeśli w tej samej ramce występuje ikona
navigate, która dodaje wpis, i ikonapopBackStack, która go usuwa, wynikowy wpis u góry stosu wstecznego będzie teraz zawsze wracać do stanuRESUMEDLifecycle.State. (Id8067, b/276495952)
Wersja 2.6.0-alpha09
5 kwietnia 2023 r.
Publikacja androidx.navigation:navigation-*:2.6.0-alpha09 Wersja 2.6.0-alpha09 zawiera te zatwierdzenia.
Poprawki błędów
- Poprawiono sprawdzanie nieprawidłowej trasy, tak aby w przypadku, gdy
NavDestinationzawiera poleNavArgument, które nie może mieć wartości null, trasa tego miejsca docelowego musiała zawierać zmienne dla argumentów o nazwach takich samych jak polaNavArgument, które nie mogą mieć wartości null. (Ic62bf, b/274697949) - Nawigacja za pomocą linków bezpośrednich oparta na
Action/MimeTypezakończy się teraz niepowodzeniem, jeśli w operacji nawigacji brakuje niepustego parametruNavArgumentwymaganego przezNavDestination, z którym pasujeAction/MimeType. (Ibfa17, b/271777424) - Gdy
NavControllerustawi wykres z tą samą trasą i miejscami docelowymi co poprzedni wykres, prawidłowo zastąpi bieżące węzły wykresu i miejsca docelowe w stosie wstecznym nowymi instancjami. Rozwiązuje to problem z awarią podczas używaniaonLaunchSingleTopbez zapisywania stanu w Navigation Compose. Rozwiązuje to też błąd, w wyniku którego przechodzenie do miejsc docelowych powiązanych z wykresem głównym powodowało tworzenie nieprawidłowego stosu wstecznego. (I5bc58, b/275258161, b/275407804)
Wersja 2.6.0-alpha08
22 marca 2023 r.
Publikacja androidx.navigation:navigation-*:2.6.0-alpha08 Wersja 2.6.0-alpha08 zawiera te zatwierdzenia.
Nowe funkcje
NavHostFragmentumożliwia teraz pobranieNavControllerod razu po podłączeniuNavHostFragmentdoFragmentManager, a nie dopiero poonCreate(). (Ic6382, b/220186282)
Poprawki błędów
- Rozwiązaliśmy problem z
NullPointerExceptionpodczas wyodrębniania zagnieżdżonego wykresu, który zawiera argument, który nie może mieć wartości null. (6b3581, b/249988437) - Jeśli po nawigacji za pomocą
popUpToużyjesz przycisku Wstecz, stanNavControllerzostanie przywrócony do prawidłowego wpisu. (I3a8ec, b/270447657) FragmentNavigatorbędzie teraz prawidłowo wysuwać wpisy, gdy stos wsteczny zostanie wysunięty za pomocą przycisku Wstecz lubpopBackStack(), a także w zależności od tego, czy transakcja używa efektów dla fragmentu. (I81bdf)- Dodawanie fragmentów do
FragmentNavigatorFragmentManagerbez użycia nawigacji nie będzie już powodować awarii. (b17204, b/274167493)
Aktualizacje zależności
- Nawigacja zależy teraz od cyklu życia.
2.6.1(586fe7) - Nawigacja zależy teraz od SavedState
1.2.1. (078e4e) - Nawigacja zależy teraz od ProfileInstaller
1.3.0. (512f0c)
Wersja 2.6.0-alpha07
8 marca 2023 r.
Publikacja androidx.navigation:navigation-*:2.6.0-alpha07 Wersja 2.6.0-alpha07 zawiera te zmiany.
Poprawki błędów
- Warianty interfejsu API
getBackStackEntry,popBackStack,clearBackStack, które przyjmują trasy, teraz przyjmują wzorce tras z argumentami dopuszczającymi wartość null i parametry zapytania dopuszczające wartość null (I22294, b/269302500). - Rozwiązaliśmy problem polegający na tym, że wywołanie
clearBackStack()zNavControllernie powodowało wyczyszczenia zapisanego stanu w menedżerze fragmentów powiązanym z wyczyszczonym stosem wstecznym. (Ic1cce, b/271190202) - Naprawiliśmy regresję w wersji 2.6.0-alpha06, która powodowała, że podczas przełączania kart za pomocą funkcji Wstecz systemu nieprawidłowy znak
MenuItemw elemencieBottomNavigationViewbył podświetlany. (I634f6, b/270447657) - Rozwiązaliśmy regresję w wersji 2.6.0-alpha06, która powodowała, że
NavBackStackEntrynie były przenoszone do stanu RESUMED podczas korzystania zAnimation. (Ib3589, b/269646882)
Wersja 2.6.0-alpha06
22 lutego 2023 roku
Publikacja androidx.navigation:navigation-*:2.6.0-alpha06 Wersja 2.6.0-alpha06 zawiera te zatwierdzenia.
Nowe funkcje
- Podczas wyświetlania podglądu funkcji kompozycyjnej za pomocą
NavHostdomyślnie będzie teraz wyświetlany elementstartDestinationz elementu NavGraph. (I2b89f)
Zmiany w interfejsie API
- Wszystkie przeciążenia
NavControllernavigatesą teraz oznaczone adnotacją@MainThread, aby mieć pewność, że są wywoływane w głównym wątku. (I2c0b0, b/263427111)
Poprawki błędów
- Naprawiliśmy awarię, która występowała podczas próby nawigacji przy użyciu dynamicznej nawigacji po fragmentach. (I3ee29, b/268360479)
- Usunęliśmy błąd, który powodował, że przejście do innego fragmentu za pomocą systemowego przycisku Wstecz nie aktualizowało paska u dołu do prawidłowo wybranego elementu (If559f, b/269044426).
Znane problemy
- Podczas korzystania z nawigacji z fragmentami cykl życia
NavBackStackEntrynie osiąga stanuRESUMED, gdy używasz interfejsów APIAnimation. (b/269646882) - Jeśli używasz nawigacji z fragmentami i nawigujesz za pomocą
BottomNavigation, a następnie próbujesz przywrócić stos wsteczny z wieloma wpisami, elementBottomMenuItemnie jest prawidłowo aktualizowany. (b/270447657) - Podczas korzystania z nawigacji z fragmentami po przywróceniu stanu element
NavBackStackEntryLifecyclenie otrzymuje wartościDESTROYED, gdy jego fragment ma wartośćDESTROYED. (b/270610768)
Wersja 2.6.0-alpha05
8 lutego 2023 r.
Publikacja androidx.navigation:navigation-*:2.6.0-alpha05 Wersja 2.6.0-alpha05 zawiera te zatwierdzenia.
Nowe funkcje
NavController.popBackStack(route),NavController.getBackStackEntry(route)iNavController.clearBackStack(route)obsługują teraz trasy z argumentami częściowo lub w pełni wypełnionymi. Pamiętaj, że argumenty muszą być dokładnie takie same jak argumenty wpisu. (Iebd28, Ic678c, I3b37b, b/257514373)FragmentNavigatorkorzysta teraz z interfejsów API przejścia podczas nawigacji i wyświetlaniaNavBackStackEntries. Oznacza to, żeNavBackStackEntryLifecyclebędzie teraz czekać na zakończenie efektów specjalnych związanych z wejściem i wyjściem fragmentu, zanim przesunie swój ostatniLifecycle.State. (I3cb19, b/238686802)DialogFragmentNavigatorkorzysta teraz z interfejsów API przejścia podczas nawigacji i wyświetlaniaNavBackStackEntries. Oznacza to, żeNavBackStackEntryLifecyclebędzie teraz czekać, ażDialogFragmentLifecycleprzejdzie do stanuDESTROYED, zanim sam przejdzie do stanuDESTROYED. (I53ee5, b/261213893)
Zmiany w interfejsie API
NavigatorStateudostępnia teraz interfejs APIprepareForTransition, który umożliwiaNavigatorom przenoszenieNavBackStackEntriesdo pośrednichLifecycle.State. (I42c21, b/238686802)- Możesz teraz uzyskać dostęp do listy wstecznej powiązanej z usługą
NavGraphNavigatorlubComposeNavigatorza pomocą usługibackstack.ComposeNavigatorudostępnia teraz wywołanie zwrotneonTransitionComplete(), aby oznaczyć elementNavBackStackEntry, który wykonał operację nawigacji lubpopBackStack, jako ukończony. (I02062, I718db, b/257519195)
Poprawki błędów
- Stan nawigatora nie będzie już wykonywać żadnych działań w przypadku korzystania z interfejsów API
push/popWithTransition, gdy wpis jest już obsługiwany. (Iadbfa, b/261213893) - Jeśli używasz elementu
launchSingleTopz zagnieżdżonym elementemNavGraph, wszystkie miejsca docelowe, począwszy od pierwotnego miejsca docelowego aż po jego elementstartDestination, zostaną prawidłowo dodane na górze listy wstecznej. (Id4bea, b/253256629) - Nawigacja będzie teraz prawidłowo zastępować instancję
DialogFragmentpodczas przechodzenia do tego samego miejsca docelowego z ustawioną wartością true flagilaunchSingleTop. (I45b5a, b/149572817) - SafeArgs w nawigacji nie będzie już powodować błędu kompilacji w przypadku używania argumentów o długości dokładnie 19 znaków. (Id60bc, b/257110095)
Wersja 2.6.0-alpha04
9 listopada 2022 r.
Publikacja androidx.navigation:navigation-*:2.6.0-alpha04 Wersja 2.6.0-alpha04 zawiera te zatwierdzenia.
Nowe funkcje
- Niestandardowe podklasy
NavTypemogą teraz zastępowaćserializeAsValue, aby serializować wartość do postaci ciągu znaków, co umożliwia serializację i deserializację (za pomocąparseValue) w całości w klasieNavType.StringTypezastępuje teraz tę metodę, aby wywoływaćUri.encodena podanymString. (Ie5213, b/247637434) NavigationUIudostępnia teraz logi, gdy nie uda się nawigować za pomocą wybranegoMenuItem. (I2af5a, b/247730357)
Poprawki błędów
- Precyzyjne linki nawigacyjne są teraz analizowane leniwie, a nie podczas inicjowania wykresu, co może poprawić wydajność aplikacji podczas uruchamiania. (Iab0ab)
- Naprawiono błąd powodujący awarię podczas nawigacji w górę po precyzyjnym linku do miejsca docelowego z argumentami domyślnymi o wartości null. (I51c24, b/243183636)
Aktualizacja zależności
- Obsługa dynamicznych modułów funkcji w nawigacji zależy teraz od szczegółowej biblioteki Play Feature Delivery. (Ib4ddc)
- Bezpieczne argumenty nawigacyjne zależą teraz od wtyczki Androida do obsługi Gradle w wersji 7.3.0. Oznacza to, że jest on teraz zgodny tylko z wersjami 7.3.0 i nowszymi. (I47e49)
Wersja 2.6.0-alpha03
24 października 2022 r.
Publikacja androidx.navigation:navigation-*:2.6.0-alpha03 Wersja 2.6.0-alpha03 zawiera te zatwierdzenia.
Poprawki błędów
- W sekcji Nawigacja
2.5.3:NavHostnie będzie już powodowaćNoSuchElementException, gdy nie będzie dostępnego miejsca docelowego, do któregoCrossfademoże się udać. Teraz będzie po prostu pomijać kompozycję. (Ieb46e, b/253299416) - Nawigacja
2.5.3: rozwiązaliśmy problem, który powodował, że zapisany stan funkcji Compose (np. użycierememberSaveable) nie był zapominany ani usuwany, gdy miejsce docelowe było usuwane ze stosu wstecznego. (I64949)
Aktualizacje zależności
- Nawigacja zależy teraz od fragmentu
1.5.4. (Icd424)
Wersja 2.6.0-alpha02
5 października 2022 r.
Publikacja androidx.navigation:navigation-*:2.6.0-alpha02 Wersja 2.6.0-alpha02 zawiera te zatwierdzenia.
Zmiany w zachowaniu
- Gdy przekazujesz identyfikator wykresu nawigacji do
AppBarConfiguration(np. za pomocąMenu),NavigationUItraktuje teraz tylko miejsce docelowe rozpoczęcia tego wykresu nawigacji jako miejsce docelowe najwyższego poziomu, zamiast nieprawidłowo oznaczać każde miejsce docelowe na wykresie jako miejsce docelowe najwyższego poziomu. Sposób przekazywania identyfikatora pojedynczego miejsca docelowego pozostaje bez zmian. Ta sama funkcja jest dostępna w Twoim kodzie za pomocą nowej funkcjiisTopLevelDestinationwAppBarConfiguration. (Ie936e, b/238496771)
Poprawki błędów
- Komponent
navigation:navigation-fragmentzależy teraz od wersji Fragmentu1.5.2. (I00ba4) - Wybrany element menu nie będzie już aktualizowany podczas przechodzenia do
FloatingWindowmiejsca docelowego, np. okna. (I4cde8, b/240308330)
Wersja 2.6.0-alpha01
7 września 2022 roku
Publikacja androidx.navigation:navigation-*:2.6.0-alpha01 Wersja 2.6.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Integracje
setupWithNavControllerwNavigationUIdo pracy z górnym paskiem aplikacji będą teraz analizować wartościR.stringargumentówReferenceTypeznalezionych wandroid:labeli zwracać ich wartości typu String zamiast automatycznie generowanej liczby całkowitej zasobu. (I5f803, b/167959935) NavDeepLinkobsługuje teraz wartości domyślne tablic, co umożliwia obsługę powtarzających się parametrów zapytania, które będą mapowane na typ tablicy argumentu.NavTypezawiera teraz też metodę domyślną, którą można zastąpić, aby połączyć 2 przeanalizowane wartości. (Id68c3, b/209977108)- Jeśli w atrybutach
app:dataiapp:dataPatternelementu activity w pliku XML nawigacji użyjesz dokładnego ciągu znaków${applicationId}jako symbolu zastępczego, zostanie on automatycznie wypełniony wartościąpackageNamekontekstu podczas rozwijania. (Iaabde, b/234223561) - Próba utworzenia pustego
NavDeepLinkza pomocąnavDeepLinkKotlin DSL spowoduje teraz wyświetlenie ostrzeżenia narzędzia lint, że precyzyjny link musi zawierać adres URI, działanie lub typ MIME, aby był prawidłowy. (I08d2f, b/154038883)
Zmiany w interfejsie API
- Dodano nową funkcję rozszerzenia
NavDestination, która analizuje dynamiczne etykiety z argumentami w formacieandroid:label="{arg}"i przekształca je w ciąg znaków. Obsługuje argumentyReferenceType, analizując wartościR.stringi przekształcając je w wartości typu String. (I07d89, b/236269380)
Zmiany w zachowaniu
argumentsNavBackStackEntry iargumentsprzekazywane doOnDestinationChangedListenersą teraz tylko kopią niezmiennych argumentów, które zostały utworzone podczas przechodzenia do miejsca docelowego. Oznacza to, że wszelkie zmiany wprowadzone w tych pakietach nie będą odzwierciedlane w kolejnych dostępach doargumentsani innych instancjiOnDestinationChangedListener. (I676f5)
Poprawki błędów
- W sekcji Nawigacja
2.5.2: nawigacja dynamiczna próbuje teraz prawidłowo zainstalować miejsca docelowe aktywności z innych modułów przed przejściem do nich. (Ia2c16, b/240292838) - Z Navigation
2.5.2: nawigacja będzie teraz prawidłowo zastępować instancję Fragmentu podczas przechodzenia do tego samego miejsca docelowego i ustawiania flagilaunchSingleTopna wartość true. (I5a2f1, b/237374580) - W nawigacji
2.5.2: naprawionoIllegalStateExceptionspowodowany przejściem do zagnieżdżonego dwukrotnie wykresu, który ma element nadrzędny wspólny z nowym wyskakującym miejscem docelowym. (I9f7cb, b/243778589)
Wersja 2.5
Wersja 2.5.3
24 października 2022 r.
Publikacja androidx.navigation:navigation-*:2.5.3 Wersja 2.5.3 zawiera te zatwierdzenia.
Poprawki błędów
NavHostnie będzie już powodowaćNoSuchElementException, gdy nie będzie dostępnego miejsca docelowego, do któregoCrossfademoże wysłać wiadomość. Teraz będzie po prostu pomijać kompozycję. (Ieb46e, b/253299416)- Rozwiązaliśmy problem polegający na tym, że zapisany stan funkcji Compose (np. użycie
rememberSaveable) nie był zapominany ani usuwany, gdy miejsce docelowe zostało usunięte ze stosu wstecznego. (I64949)
Wersja 2.5.2
7 września 2022 roku
Publikacja androidx.navigation:navigation-*:2.5.2 Wersja 2.5.2 zawiera te zatwierdzenia.
Poprawki błędów
- Nawigacja dynamiczna próbuje teraz prawidłowo instalować miejsca docelowe aktywności z innych modułów przed przejściem do nich. (Ia2c16, b/240292838)
- Nawigacja będzie teraz prawidłowo zastępować instancję Fragmentu podczas przechodzenia do tego samego miejsca docelowego i ustawiania flagi
launchSingleTopna wartość true. (I5a2f1, b/237374580) - Rozwiązano problem
IllegalStateExceptionspowodowany przejściem do podwójnie zagnieżdżonego wykresu, który ma wspólny element nadrzędny z nowym wyskakującym miejscem docelowym. (I9f7cb, b/243778589)
Aktualizacja zależności
- Nawigacja
2.5.2zależy teraz od fragmentu1.5.2. (aosp/2178734)
Wersja 2.5.1
27 lipca 2022 roku
Publikacja androidx.navigation:navigation-*:2.5.1 Wersja 2.5.1 zawiera te zatwierdzenia.
Poprawki błędów
Navigation Safe Argsnie będzie już powodować ostrzeżeń o wycofaniu w generowanych klasach podczas używania niestandardowych typów argumentów zapisanych wBundle. (Id86ed, b/237725966)
Aktualizacje zależności
- Biblioteka Navigation zależy teraz od Lifecycle
2.5.1. (Ib4451) - Biblioteka Navigation jest teraz zależna od Activity
1.5.1. (I3efe8) - Biblioteka Navigation jest teraz zależna od Fragment
1.5.1. (I56177)
Wersja 2.5.0
29 czerwca 2022 r.
Publikacja androidx.navigation:navigation-*:2.5.0 Wersja 2.5.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.4.0
- Integracja CreationExtras –
Navigationmoże teraz udostępniać bezstanowyViewModelProvider.Factoryza pomocą Lifecycle2.5.0’sCreationExtras.
Navigation SafeArgs
Navigation Safe Argsuaktualnił zależnośćAndroid Gradle Plugin, aby korzystać z7.0.4, co spowodowało utratę zgodności z wersjami AGP wcześniejszymi niż7.0.- Dodaliśmy obsługę atrybutu build.gradle przestrzeni nazw, który może być używany zamiast applicationId.
Inne zmiany
- Interfejs
visibleEntriesnie jest już eksperymentalny i udostępnia funkcję pobierania wszystkich wpisów, których miejsce docelowe jest obecnie widoczne zgodnie zNavController.
Wersja 2.5.0-rc02
15 czerwca 2022 r.
Publikacja androidx.navigation:navigation-*:2.5.0-rc02 Wersja 2.5.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiliśmy błąd powodujący awarię przy szybkim przełączaniu się między miejscami docelowymi u dołu ekranu podczas korzystania z komponentu Navigation Compose
NavHost. (I3979a, b/234054916) Navigation SafeArgsnie będzie już ulegać awarii podczas używaniaapplicationIdSuffixi przestrzeni nazw bezapplicationIdlub gdyapplicationIdi przestrzeń nazw będą się różnić. (I754b1, b/233119646)NavArgumentma teraz niestandardową funkcjętoString(), która wyświetla wewnętrzne wartości argumentu. (I900a8)
Wersja 2.5.0-rc01
11 maja 2022 roku
Publikacja androidx.navigation:navigation-*:2.5.0-rc01 Wersja 2.5.0-rc01 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaliśmy nową regułę lint, która ostrzega przed umieszczaniem elementów
<deeplink>w elementach<activity>w plikunavigation.xml.(Ic15a5, b/178403185)
Poprawki błędów
- Zakresy kompozycyjne w
NavHostiDialogHostsą teraz usuwane w oczekiwanej kolejności, tzn. wewnętrzne funkcje kompozycyjne są usuwane przed zewnętrznymi. (I157e6) - Navigation SafeArgs używa teraz
PathSensitivity.RELATIVEwArgumentsGenerationTask, aby umożliwić przenoszenie pamięci podręcznej. Oznacza to, że wpis w pamięci podręcznej można teraz ponownie wykorzystać w kompilacji CI w kompilacji lokalnej. (I5f67c, b/173420454) - Reguła lint
UnrememberedGetBackStackEntryDetectorzostała zaktualizowana, aby zapewnić, że wywołanierememberotaczające wywołaniegetBackStackEntry()również przekazuje obiektNavBackStackEntryjako klucz.(Ib7081, b/227382831)
Wersja 2.5.0-beta01
20 kwietnia 2022 r.
Publikacja androidx.navigation:navigation-*:2.5.0-beta01 Wersja 2.5.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
DialogNavigatorużywa terazpopWithTransitionpodczas wykonywania połączeniadismiss(). Rozwiązuje to problem z wyścigiem, który występował podczas używania elementuViewModelw miejscu docelowymdialogi powodował błądIllegalStateExceptionpodczas zamykania okna za pomocą przycisku Wstecz lub kliknięcia poza oknem. (Id7376, b/226552301)
Aktualizacje zależności
- Nawigacja zależy teraz od Cyklu życia
2.5.0-beta01, co rozwiązuje problem zIllegalStateExceptionpodczas zagnieżdżania jednegoNavHostw drugimNavHostna karcie nawigacji u dołu innej niż główna, gdy używasz wielu stosów wstecznych.
Wersja 2.5.0-alpha04
6 kwietnia 2022 roku
Publikacja androidx.navigation:navigation-*:2.5.0-alpha04 Wersja 2.5.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
visibleEntriesnie jest już funkcją eksperymentalną. (I4829f, b/225394514)
Poprawki błędów
- Komponent NavHost zależy teraz od
visibleEntrieszNavController, aby określić, które wpisy mają być tworzone. Oznacza to, że podczas korzystania z zagnieżdżonego elementu NavHost wewnętrzny elementNavHostpowinien teraz prawidłowo animować wyjście. (I4ba2b, b/225394514) - Wartość
visibleEntriesStateFlowpodawana przezNavControllerjest teraz oparta na maksymalnym stanie cyklu życia wpisu, a nie na bieżącym stanie cyklu życia. Oznacza to, że nawet jeśli stan hostanavControllerzmieni się na stan inny niż STARTED, lista widocznych wpisów pozostanie bez zmian. (I9e2a8, b/225394514) SavedStateViewFactoryobsługuje teraz używanieCreationExtrasnawet wtedy, gdy zostało zainicjowane za pomocąSavedStateRegistryOwner. Jeśli podasz dodatkowe informacje, zainicjowane argumenty zostaną zignorowane. (I6c43b, b/224844583)NavDeepLinkmoże teraz analizować adresy URI z jednym parametrem zapytania bez wartości. (I0efe8, b/148905489)- Puste ciągi znaków są teraz uznawane za prawidłowe argumenty w precyzyjnych linkach. (I70a0d, b/217399862)
Navigation Safe Argsnie będzie już ulegać awarii podczas używania przestrzeni nazw, gdy nie maAndroidManifest.xml. (I17ccf, b/227229815)
Wersja 2.5.0-alpha03
23 lutego 2022 r.
Publikacja androidx.navigation:navigation-*:2.5.0-alpha03 Wersja 2.5.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Możesz teraz przekazywać wartość
CreationExtrasdo funkcjiby navGraphViewModels, aby utworzyćViewModel. (I29217, b/217618359)
Poprawki błędów
NavDeepLinksteraz prawidłowo obsługują zakodowane znaki nowego wiersza osadzone w identyfikatorach URI tras lub precyzyjnych linków. (I513d1, b/217815060)CreationExtrasbędzie teraz działać prawidłowo w połączeniu zNavBackStackEntriespodczas tworzenia obiektów ViewModel. (I69161, b/217617710)- Bezpieczne argumenty nawigacji obsługują teraz używanie przestrzeni nazw zdefiniowanej w
build.gradlezamiast pakietu w pliku AndroidManifest. (I659ef, b/217414933)
Wersja 2.5.0-alpha02
9 lutego 2022 r.
Publikacja androidx.navigation:navigation-*:2.5.0-alpha02 Wersja 2.5.0-alpha02 zawiera te zatwierdzenia.
Poprawki błędów
- Z Nawigacji
2.4.1:NavHostFragmentbędzie teraz prawidłowo ustawiaćOnBackPressedDispatcherpodczas używania powiązania widoku z zagnieżdżonymi wykresami. (Ifbb51, b/214577959) - W Nawigacji
2.4.1: w przypadku głębokiego linkowania przez wiele zagnieżdżonych elementówNavGraphstos wsteczny będzie teraz prawidłowo zawierać pośrednie miejsca docelowe. (I504c0, b/214383060)
Wersja 2.5.0-alpha01
26 stycznia 2022 r.
Publikacja androidx.navigation:navigation-*:2.5.0-alpha01 Wersja 2.5.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
NavBackStackEntryjest teraz zintegrowany z interfejsem ViewModel CreationExtras, który został wprowadzony w ramach Lifecycle2.5.0-alpha01. (Ib9fe2, b/207012490)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że dostęp do
ViewModelutworzonego za pomocąby navGraphViewModels()zonCreate()fragmentu kończył się niepowodzeniem i wyświetlany był błądIllegalStateException. (I8a14d) NavDeepLinks nie będą już niepotrzebnie dwukrotnie dekodować argumentów, co oznacza, że do miejsca docelowego będą teraz przekazywane prawidłowe argumenty. (I31b0a, b/210711399)
Safe Args
- Safe Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 7.0.4. Oznacza to, że Navigation Safe Args nie będzie już zgodny z Androidem Studio w wersji starszej niż 7.0, ale jest teraz zgodny z wtyczką Androida do obsługi Gradle w wersji 7.1.0 lub nowszej. (I41c88, b/213086135, b/207670704)
Wersja 2.4.2
Wersja 2.4.2
6 kwietnia 2022 roku
Publikacja androidx.navigation:navigation-*:2.4.2 Wersja 2.4.2 zawiera te zatwierdzenia.
Poprawki błędów
- Wycofane z Nawigacji
2.5.0-alpha03:NavDeepLinksteraz prawidłowo obsługuje zakodowane znaki nowego wiersza osadzone w identyfikatorach URI tras lub precyzyjnych linków. (I513d1, b/217815060) - Wycofane z Nawigacji
2.5.0-alpha03: SafeArgs w Nawigacji obsługuje teraz używanie przestrzeni nazw zdefiniowanej wbuild.gradlezamiast pakietu w pliku AndroidManifest. (I659ef, b/217414933) - Wycofano z Nawigacji
2.5.0-alpha04:Navigation Safe Argsnie będzie już powodować awarii podczas korzystania z przestrzeni nazw, gdy nie maAndroidManifest.xml. (I17ccf, b/227229815) - Wycofano z Nawigacji
2.5.0-alpha04: puste ciągi znaków są teraz uznawane za prawidłowe argumenty w precyzyjnych linkach. (I70a0d, b/217399862)
Wersja 2.4.1
Wersja 2.4.1
9 lutego 2022 r.
Publikacja androidx.navigation:navigation-*:2.4.1 Wersja 2.4.1 zawiera te zatwierdzenia.
Poprawki błędów
NavHostFragmentbędzie teraz prawidłowo ustawiaćOnBackPressedDispatcherpodczas używania powiązania widoków z zagnieżdżonymi wykresami. (Ifbb51, b/214577959)- W przypadku precyzyjnego linkowania przez wiele zagnieżdżonych elementów
NavGraphstos wsteczny będzie teraz prawidłowo zawierać pośrednie miejsca docelowe. (I504c0, b/214383060) - Wycofano z Navigation
2.5.0-alpha01: rozwiązano problem, który powodował, że dostęp do obiektu ViewModel utworzonego za pomocąby navGraphViewModels()zonCreate()fragmentu kończył się niepowodzeniem i występował błądIllegalStateException. (I8a14d) - Przeniesione z Navigation
2.5.0-alpha01:NavDeepLinkargumenty nie są już niepotrzebnie dekodowane dwukrotnie, co oznacza, że do miejsca docelowego przekazywane są teraz prawidłowo zdekodowane argumenty. (I31b0a, b/210711399) - Przeniesione z Navigation
2.5.0-alpha01: Safe Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 7.0.4. Oznacza to, że Navigation Safe Args nie będzie już zgodny z Androidem Studio w wersji starszej niż 7.0, ale jest teraz zgodny z wtyczką Androida do obsługi Gradle w wersji 7.1.0 lub nowszej. (I41c88, b/213086135, b/207670704)
Wersja 2.4.0
Wersja 2.4.0
26 stycznia 2022 r.
Publikacja androidx.navigation:navigation-*:2.4.0 Wersja 2.4.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.3.0
- Wszystkie artefakty Navigation zostały przepisane w języku Kotlin. Poprawiliśmy w ten sposób możliwość przyjmowania wartości null przez klasy korzystające z typów ogólnych (np. podklasy
NavType). Wszystkie funkcje rozszerzające w Kotlinie, które były częścią artefaktów-ktx, zostały przeniesione do odpowiednich artefaktów głównych. Artefakty-ktxbędą nadal publikowane, ale będą całkowicie puste. - Artefakt
navigation-fragmentzawiera teraz gotową implementację układu dwupanelowego za pomocą nowego elementuAbstractListDetailFragment. Ten fragment używa klasySlidingPaneLayoutdo zarządzania panelem listy (który zapewnia podklasa) i panelem szczegółów, który korzysta z klasyNavHostFragmentjako implementacji, jak widać w naszej przykładowej implementacji. - Metoda
currentBackStackEntryAsFlow()wNavControllerudostępniaFlow, który emituje sygnał za każdym razem, gdy zmieni się bieżącyNavBackStackEntry. Ten proces może być używany jako alternatywa dla ręcznego zarządzania plikiemOnDestinationChangedListener. - Kontroler NavController umożliwia teraz pobieranie listy wszystkich widocznych instancji
NavBackStackEntryjakoStateFlowza pomocą eksperymentalnej właściwościvisibleEntries. - Możesz teraz rozszerzyć klasę
NavType, aby utworzyć niestandardowe typy NavType. Typy niestandardowe są obsługiwane tylko podczas programistycznego tworzenia wykresu nawigacji, np. za pomocą języka DSL Kotlin do tworzenia wykresów nawigacji. Nawigacja udostępnia teraz interfejsy API
findStartDestination()igetHierarchy(), które można wykorzystać do wdrożenia niestandardowego interfejsu NavigationUI.findStartDestination()to funkcja rozszerzającaNavGraph, która lokalizuje rzeczywiste miejsce docelowe, które będzie wyświetlane podczas nawigacji do wykresu, nawet jeślistartDestinationjest zagnieżdżoną funkcjąNavGraph.getHierarchy()to funkcja naNavDestination, która umożliwia sprawdzenie, czy dane miejsce docelowe znajduje się w hierarchii innego miejsca docelowego.val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }Metody
NavigationUI, które przyjmowałyBottomNavigationView, zostały zaktualizowane tak, aby zamiast tego przyjmowały jego klasę nadrzędną wprowadzoną w Materialu1.4.0,NavigationBarView. Dzięki temu można używać tych metod w przypadkuNavigationRailView.Podczas tworzenia elementu
<action>za pomocą XML atrybuty animacji mogą używać atrybutów pobranych z motywu za pomocą składniapp:enterAnim="?attr/transitionEnter".Safe Args generuje teraz metodę
fromSavedStateHandle()dla każdej klasyNavArgs. (#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) }
Trasy nawigacji i język DSL Kotlin
W poprzednich wersjach nawigacji każde miejsce docelowe miało stały identyfikator w postaci liczby całkowitej, który jednoznacznie odróżniał je od innych miejsc docelowych i umożliwiał navigate() do niego bezpośrednio lub za pomocą działania. Chociaż to rozwiązanie nadal jest ważne i przydatne, zwłaszcza w przypadkach, gdy definiujesz wykres nawigacji w formacie XML i możesz używać automatycznie generowanych stałych R.id lub Safe Args (które używają tych stałych do generowania kodu w czasie kompilacji), ten system unikalnych liczb całkowitych nie oddawał znaczenia semantycznego i ekspresywności potrzebnych do obsługi w pełni dynamicznych wykresów tworzonych programowo w czasie działania za pomocą Navigation Kotlin DSL.
W tej wersji wprowadziliśmy nową opcję jednoznacznego identyfikowania miejsca docelowego na wykresie nawigacji za pomocą trasy. Trasa to String, która określa unikalną ścieżkę do miejsca docelowego. Wszystkie metody Kotlin DSL, które przyjmowały identyfikator miejsca docelowego, są teraz wycofane i zastąpione równoważnym interfejsem API, który przyjmuje trasę.
Każda trasa powinna być traktowana jako część „ścieżki” Uri, która określa miejsce docelowe, np. home, profile/{userId}, profile/{userId}/friends itp. Jeśli tożsamość miejsca docelowego jest powiązana z określonymi treściami, argumenty dynamiczne powinny być częścią trasy i podlegać tym samym regułom co niejawne linki do konkretnych treści.
Wszystkie interfejsy API NavController, które wcześniej przyjmowały tylko identyfikator, mają teraz przeciążenie, które przyjmuje ścieżkę String. Obejmuje to m.in. navigate(), popBackStack(), popUpTo() i getBackStackEntry().
Ma to pewne konsekwencje dla interfejsu API:
- Właściwość
popUpToKotlin w języku Kotlin DSL została wycofana na rzeczpopUpToId. - Interfejs API
getStartDestination()został wycofany na rzecz interfejsugetStartDestinationId().
W przeciwieństwie do nawigacji według identyfikatora nawigacja według trasy podlega tym samym regułom co niejawne linki do konkretnych stron. Oznacza to, że możesz bezpośrednio przejść do dowolnego miejsca docelowego w dowolnym zagnieżdżonym grafie, dzięki czemu te trasy są użyteczne w projektach wielomodułowych bez konieczności jawnego dodawania do każdego miejsca docelowego widocznego z zewnątrz linku do konkretnej strony.
Navigation Compose
Artefakt navigation-compose zapewnia integrację między komponentem nawigacji a Jetpack Compose. Jako miejsca docelowe w aplikacji używa @Composablefunkcji.
Ta wersja zapewnia:
- Kompozycja
NavHost, która umożliwia tworzenie wykresu nawigacji za pomocą języka Kotlin DSL z użyciem miejsc docelowychcomposableidialogoraz obsługą opcjonalnych nawigatorów, takich jak te z Accompanist Navigation Material. - Obowiązkowa obsługa płynnego przechodzenia między miejscami docelowymi. Accompanist Navigation Animation umożliwia kontrolowanie przejść wejścia i wyjścia za pomocą eksperymentalnych interfejsów API Compose.
- Określanie zakresu
Lifecycledla każdego miejsca docelowego, które można komponować. Każde miejsce docelowe osiąga stanRESUMEDdopiero po zakończeniu wszystkich przejść wejściowych i natychmiast przechodzi do stanuSTARTEDpo rozpoczęciu wszystkich przejść wyjściowych. Dzięki temu możesz uniknąć wszystkich problemów związanych ze stanemIllegalStateExceptioni wielodotykiem, wywołując połączenienavigatetylko wtedy, gdy stanLifecycletoRESUMED. - Określanie zakresu
ViewModel(za pomocą interfejsu APIviewModel()Lifecycle ViewModel Compose2.4.0lubhiltViewModel()Hilt Navigation Compose1.0.0na poziomie miejsca docelowego, co zapewnia zakres, który przetrwa zmiany konfiguracji i znajduje się na liście wstecznej (gdy zawartość funkcji kompozycyjnej jest w inny sposób usuwana), oraz sygnał wonCleared()ViewModelu, który wskazuje trwałe usunięcie i wyczyszczenie stanu powiązanego z tymNavBackStackEntry. - Określanie zakresu stanu
rememberSaveablena poziomie miejsca docelowego, co zapewnia automatyczne zapisywanie i przywracanie całego stanu kompozycyjnego po powrocie do miejsca docelowego. - Pełna obsługa zapisywania i przywracania stanu elementu
NavControlleroraz stanu miejsca docelowego po zakończeniu i ponownym utworzeniu procesu. - Automatyczna integracja z systemowym przyciskiem Wstecz.
Obsługa przekazywania argumentów, dołączania precyzyjnych linków do miejsc docelowych i zwracania wyniku do poprzednich miejsc docelowych.
Utwórz konkretne funkcje pomocnicze w
rememberNavController()icurrentBackStackEntryAsState(), aby umożliwić przenoszenie stanu i łączenieNavControllerz kompozycjami pozaNavHost(np. z dolnym paskiem nawigacyjnym).
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()
}
}
}
Więcej informacji znajdziesz w przewodniku po tworzeniu nawigacji w Compose.
Wiele stosów wstecznych
Kontroler NavController odpowiada za zarządzanie listą wsteczną miejsc docelowych, dodawanie do niej miejsc docelowych, gdy navigate(), oraz usuwanie ich, gdy wywołasz popBackStack() lub naciśniesz systemowy przycisk Wstecz. Istniejąca klasa NavOptions i integracja z elementami <action> w pliku XML wykresu nawigacji zostały rozszerzone o obsługę zapisywania i przywracania stosu wstecznego.
W ramach tej zmiany metody NavigationUI klas onNavDestinationSelected(), BottomNavigationView.setupWithNavController() i NavigationView.setupWithNavController() automatycznie zapisują i przywracają stan usuniętych miejsc docelowych, co umożliwia obsługę wielu stosów wstecznych bez wprowadzania zmian w kodzie. Jeśli używasz nawigacji z fragmentami, jest to zalecany sposób integracji z wieloma stosami wstecznymi.
Podstawowe interfejsy API do zapisywania i przywracania stanu są udostępniane na różnych platformach:
W pliku XML nawigacji element
<action>może teraz używać atrybutów logicznychapp:popUpToSaveStateiapp:restoreState, aby zapisywać stan wszystkich miejsc docelowych, które zostały wyświetlone za pomocą elementuapp:popUpTo, oraz przywracać stan powiązany z miejscem docelowym przekazanym jakoapp:destination:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />W
navOptionsKotlin DSL możesz dodać właściwości logicznerestoreStateisaveStatedopopUpTokonstruktora:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }Podczas ręcznego tworzenia obiektu
NavOptionsza pomocą metodyNavOptions.Buildermożesz użyć metodysetRestoreState()i nowego przeciążenia dosetPopUpTo(), które przyjmuje dodatkowy parametrsaveState.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);Wywołania zautomatyzowane do
popBackStack()mogą teraz zawierać dodatkowy parametrsaveState.Za pomocą metody
clearBackStack()możesz wyczyścić każdy stan zapisany za pomocą metodpopBackStack()lubpopUpToSaveState.
W każdym przypadku NavController zapisze i przywróci stan każdego elementu NavBackStackEntry, w tym wszystkie instancje ViewModel w zakresie miejsca docelowego nawigacji. Interfejsy API Navigator zostały zaktualizowane, aby umożliwić każdemu Navigator zapisywanie i przywracanie własnego stanu.
Zmiany w działaniu
NavDeepLinkBuilderdodaje terazPendingIntent.FLAG_IMMUTABLEdoPendingIntentzwracanego przezcreatePendingIntent(), dzięki czemu ten interfejs API działa zgodnie z oczekiwaniami w przypadku kierowania na Androida 12.- Nawigacja zależy teraz od Lifecycle
2.3.1i oznacza metodysetGraph(),popBackStack(),navigateUp()inavigate(), które aktualizująNavBackStackEntryLifecycle, jako@MainThread, co sprawia, że nawigacja jest zgodna z wymaganiami dotyczącymi głównego wątku wprowadzonymi w Lifecycle2.3.0. - Precyzyjne linki sprawdzają teraz, czy w
Uriznajdują się wszystkie wymagane argumenty (czyli te bez wartości domyślnych). NavDeepLinkPrzeanalizowane argumenty traktują teraz znaki funta w taki sam sposób jak znaki zapytania, czyli jako separator między segmentami ścieżki. Zapobiega to rozciąganiu się argumentu na znak funta.- Podczas generowania działań kod Kotlin wygenerowany na podstawie Safe Args umieszcza teraz argumenty bez wartości domyślnych przed argumentami z wartościami domyślnymi jako parametry.
- Podczas generowania argumentów Safe Args umieszcza teraz parametry bez wartości domyślnych przed parametrami z wartościami domyślnymi.
- Safe Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 4.2.0. Oznacza to, że nie powinno już pojawiać się ostrzeżenie o używaniu
applicationIdTextResource.
Znane problemy
- Naprawiono w Nawigacji
2.5.0-alpha01: dostęp do elementuViewModelutworzonego za pomocąby navGraphViewModels()z poziomuonCreate()fragmentu kończy się niepowodzeniem i wyświetleniem błęduIllegalStateException. (b/213504272) - Naprawiono w Navigation
2.5.0-alpha01: Safe Args 2.4.0 jest niezgodny z wtyczką Androida do obsługi Gradle w wersji 7.1.0 i nowszej. (b/213086135) - Precyzyjne linki z wieloma zagnieżdżonymi wykresami nawigacji nie tworzą prawidłowo pełnej listy wstecznej. (b/214383060)
Wersja 2.4.0-rc01
15 grudnia 2021 roku
Publikacja androidx.navigation:navigation-*:2.4.0-rc01 Wersja 2.4.0-rc01 zawiera te zatwierdzenia.
Zmiany w działaniu
NavDeepLinkAnalizowane argumenty traktują teraz znaki funta w taki sam sposób jak znaki zapytania, czyli jako separatory między argumentami. (I21309, b/180042703)
Poprawki błędów
- Linki bezpośrednie nie będą już ignorować argumentów o wartościach takich samych jak nazwa obiektu zastępczego. (If8017, b/207389470)
NavControllernie będzie już ulegać awarii podczas wysuwania zagnieżdżonego miejsca docelowego za pomocą przejść po przywróceniuNavController. (I0f7c9, b/205021623)- Komunikat o błędzie podczas używania nieprawidłowego elementu
startDestinationbędzie teraz domyślnie wyświetlać trasę do miejsca docelowego, jeśli jest ona dostępna. (I86b9d, b/208041894)
Poprawki błędów w Nawigacji w Compose
- Naprawiono potencjalny problem z awarią spowodowaną szybkim przełączaniem między miejscem docelowym rozpoczęcia a innym miejscem docelowym za pomocą elementów menu nawigacyjnego u dołu ekranu. (Ic8976, b/208887901)
- Okna docelowe są teraz prawidłowo przywracane na górze ekranu po zmianach konfiguracji lub zakończeniu procesu. (I4c0dc, b/207386169)
- Rozwiązaliśmy problem, który powodował, że próba pobrania
ViewModelzNavBackStackEntryokna kończyła się niepowodzeniem po zamknięciu okna. (I6b96d, b/206465487) - Rozwiązaliśmy problem, który występował podczas używania miejsc docelowych
activityz komponentemNavHostNavigation Compose i powodował nieskończone ponowne komponowanie. (I8f64c) - Usunięto wyciek pamięci w Navigation Compose, który powodował, że po zmianie konfiguracji lub zakończeniu procesu zachowywano odniesienie do starej aktywności. (I4efcb, b/204905432)
Poprawki błędów w Safe Args
SafeArgsnie ulega już awarii podczas próby przywrócenia niestandardowych tablic obiektów Parcelable po zakończeniu procesu. (I618e8, b/207315994)- Naprawiliśmy błąd w bezpiecznych argumentach, który uniemożliwiał tablicom wartości logicznych przyjmowanie wartości
null. (I8c396, b/174787525)
Wersja 2.4.0-beta02
3 listopada 2021 r.
Publikacja androidx.navigation:navigation-*:2.4.0-beta02 Wersja 2.4.0-beta02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Obsługa jawnych i niejawnych linków do konkretnych miejsc w aplikacji automatycznie dodaje teraz flagę
saveStatepodczas przechodzenia do innego wykresu, dzięki czemu kod, taki jakNavigationUI.setupWithNavController, oraz kod korzystający z wielu stosów wstecznych działają zgodnie z oczekiwaniami. (Ic8807)
Zmiany w zachowaniu
- Wzorce precyzyjnych linków są teraz kompilowane w klasie NavDeepLink w sposób odroczony, a nie podczas rozszerzania. Powinno to skrócić czas wczytywania wykresów nawigacji zawierających precyzyjne linki. (b8d257, b/184149935)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że po przejściu do
Lifecycle.State.STARTEDwpisy NavBackStackEntries były przenoszone doLifecycle.State.CREATED, gdyNavHostbył dodawany bezpośrednio dosetContent()aktywności. (Ia5ac1, b/203536683) - Rozwiązaliśmy problem polegający na tym, że usunięcie miejsca docelowego
DialogFragmentze stosu wstecz przed wyświetleniem okna dialogowego nie powodowało jego zamknięcia, co prowadziło do awarii, gdy użytkownik ręcznie zamykał to okno. (I687e5) - Rozwiązaliśmy problem, który powodował, że interfejs API
onNavDestinationSelectednaNavigationUIzwracałtrue, nawet jeśli nienavigate()do tego wykresu nawigacji. Teraz używa tej samej logiki, której wewnętrznie używasetupWithNavController, aby wybierać tylkoMenuItempowiązane z bieżącym miejscem docelowym za pomocąhierarchytego miejsca. (I2b053)
Wersja 2.4.0-beta01
27 października 2021 roku
Publikacja androidx.navigation:navigation-*:2.4.0-beta01 Wersja 2.4.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
- Możesz teraz używać
by navGraphViewModelz trasą jako alternatywy dla identyfikatora, aby lepiej obsługiwać używanie Kotlin DSL Navigation z fragmentami. (I901e3, b/201446416)
Zmiany w interfejsie API
- Interfejs API
visibleEntriesjest teraz w wersji eksperymentalnej. (I93f6f)
Poprawki błędów
- Obiekty ViewModel nie będą już niszczone, gdy przejścia zostaną przerwane przez przechodzenie tam i z powrotem między tymi samymi ekranami (Id52d8, b/200817333).
- Argumenty z wartością null
NavDeepLinknie wymagają już wartości domyślnej podczas dodawania precyzyjnych linków doNavDestination. (I5aad4, b/201320030) - Obiekty NavBackStackEntry z różnymi stanami cyklu życia nie są już traktowane jako równe. Oznacza to, że NavHost prawidłowo ponownie skomponuje wszystkie miejsca docelowe podczas nawigacji z użyciem singleTop i ponownego wybierania elementów menu u dołu ekranu. (I1b351, b/196997433)
- Rozwiązaliśmy problem z
AbstractListDetailFragment, który powodował, że atrybutylayout_widthilayout_weightw panelu listy zwracanym przezonCreateListPaneView()były nieprawidłowo obsługiwane lub ignorowane. (f5fbf3) - Stan wizualny miejsc docelowych w oknie dialogowym jest teraz prawidłowo zsynchronizowany ze stanem
DialogFragmentNavigator. Oznacza to, że ręczne wywoływanie asynchronicznego interfejsu APIdismiss()dlaDialogFragmentteraz prawidłowo usuwa wszystkie miejsca docelowe okien powyżej okna, które zostało zamknięte. Nie ma to wpływu na przypadki, w których zamykasz okno dialogowe, klikającpopUpTolubpopBackStack(). (I77ba2) AbstractAppBarOnDestinationChangedListenerma teraz bardziej przejrzyste komunikaty o błędach dotycząceonDestinationChanged(). (Ie742d)
Wersja 2.4.0-alpha10
29 września 2021 r.
Publikacja androidx.navigation:navigation-*:2.4.0-alpha10 Wersja 2.4.0-alpha10 zawiera te zatwierdzenia.
Nowe funkcje
- Kontroler NavController umożliwia teraz pobieranie listy wszystkich widocznych instancji za pomocą
NavBackStackEntryStateFlow (Ia964e).visibleEntries rememberNavController()przyjmuje teraz opcjonalny zestaw instancjiNavigator, które zostaną dodane do zwracanegoNavController, aby lepiej obsługiwać opcjonalne nawigatory, takie jak te z materiałów nawigacyjnych Accompanist. (I4619e)
Poprawki błędów
- Nawigacja dynamiczna nie będzie już ulegać awarii po ponownym utworzeniu aktywności. (Ifa6a3, b/197942869)
- Rozwiązaliśmy problem z systemowym przyciskiem Wstecz, który występuje tylko po powrocie do miejsca docelowego, które zawiera element kompozycyjny
NavHost. (3ed148, b/195668143) - SafeArgs generuje teraz argumenty dla
fromBundle()ifromSavedStateHandle()w odpowiedniej kolejności parametrów. (I824a8, b/200059831)
Wersja 2.4.0-alpha09
15 września 2021 r.
Publikacja androidx.navigation:navigation-*:2.4.0-alpha09 Wersja 2.4.0-alpha09 zawiera te zatwierdzenia.
Nowe funkcje
- Możesz teraz użyć metody
clearBackStack(), aby wyczyścić dowolny stan zapisany za pomocąpopBackStack()lubpopUpToSaveState. (I80a0f) - Możesz teraz przekazywać listę argumentów lub precyzyjnych linków do konstruktora zagnieżdżonego wykresu nawigacji, a zostaną one automatycznie dodane do wynikowego wykresu. (I8a470, b/182545357)
Zmiany w interfejsie API
- Funkcja
navArgumentKotlin DSL jest teraz częściąnavigation-commonzamiastnavigation-compose. Aby nadal korzystać z tej funkcji, musisz zaktualizować importy. (I1d095)
Zmiany w zachowaniu
- Podczas generowania argumentów Safe Args umieszcza teraz parametry bez wartości domyślnych przed parametrami z wartościami domyślnymi. (I89709, b/198493585)
Poprawki błędów
- W przypadku korzystania z Navigation Compose wykresy NavGraph będą
DESTROYEDdopiero wtedy, gdy wszystkie ich elementy podrzędne będąDESTROYED. (I86552, b/198741720) - Argumenty z wartością null
NavDeepLinknie wymagają już wartości domyślnej. (Ia14ef, b/198689811) - Wywołanie
setGraph()z nowym wykresem będzie teraz usuwać zapisane stosy wsteczne, a nie tylko je zamykać. (I97f96) - Rozwiązaliśmy problem, który powodował, że instancje
OnDestinationChangedListenericurrentBackStackEntryFlownie otrzymywały powiadomień podczas korzystania zlaunchSingleTop. (Iaaebc)
Aktualizacje zależności
- Biblioteka Navigation Compose zależy teraz od Activity Compose w wersji 1.3.1. (I05829)
- Biblioteka Navigation Compose zależy teraz od Lifecycle ViewModel Compose
2.4.0-beta01. (Ib86a3)
Wersja 2.4.0-alpha08
1 września 2021 roku
Publikacja androidx.navigation:navigation-*:2.4.0-alpha08 Wersja 2.4.0-alpha08 zawiera te zatwierdzenia.
Nowe funkcje
- Możesz teraz rozszerzyć klasę
NavType, aby utworzyć niestandardowe typy NavType. Typy niestandardowe są obsługiwane tylko podczas programistycznego tworzenia wykresu nawigacji, np. za pomocą języka DSL Kotlin do tworzenia wykresów nawigacji. (I78440, b/196871885)
Zmiany w zachowaniu
- Podczas generowania działań kod Kotlin wygenerowany na podstawie Safe Args umieszcza teraz argumenty bez wartości domyślnych przed argumentami z wartościami domyślnymi jako parametry. (Idb697, b/188855904)
- Precyzyjne linki sprawdzają teraz, czy w
Uriznajdują się wszystkie wymagane argumenty (czyli te bez wartości domyślnych). (#204, b/185527157)
Poprawki błędów
- Używanie adnotacji
getBackStackEntryipreviousBackStackEntryw funkcji composable() w połączeniu z adnotacjąremember()nie będzie już powodować wyjątku związanego z brakiem miejsca docelowego na liście wstecznej. (I75138, b/194313238) - Biblioteka Navigation Compose ponownie komponuje się prawidłowo podczas zmiany argumentów stosu wstecznego i używania
launchSingleTop=true. (Iebd69, b/186392337) - Podczas wywoływania funkcji
ArrayIndexOutOfBoundsExceptionw przypadku wykresu z 13 lub 29 miejscami docelowymi nie będzie już występować błądsetGraph. (I1a9f1, b/195171984) - Generator języka Java SafeArgs nie powinien już powodować ostrzeżeń narzędzia lint podczas generowania klas Args. (I1a666, b/185843837)
Wkład zewnętrzny
- Dziękujemy ospixd za sprawdzenie, czy precyzyjne linki weryfikują, czy wszystkie wymagane argumenty (bez wartości domyślnych) są obecne w
Uri. (#204, b/185527157)
Wersja 2.4.0-alpha07
18 sierpnia 2021 r.
Publikacja androidx.navigation:navigation-*:2.4.0-alpha07 Wersja 2.4.0-alpha07 zawiera te zatwierdzenia.
Poprawki błędów
- Biblioteka Navigation Compose prawidłowo zapisuje stan po zmianach konfiguracji i podczas zmiany wykresów przy użyciu funkcji wielu stosów wstecznych. (If5a3d, b/195141957)
- Ponowne wybieranie tej samej karty podczas korzystania z kompozycji nawigacji z wieloma stosami wstecznymi nie będzie już powodować wyświetlania pustego ekranu. (I860dc, b/194925622)
NavHostobserwuje teraz zmiany wLifecycle.StateNavBackStackEntry, co oznacza, że użycieNavHostwe fragmencie spowoduje prawidłowe ponowne skomponowanie w miarę zmian cyklu życia, a nie wyświetlenie pustego ekranu. (I4eb85, b/195864489)- Rozwiązaliśmy problem polegający na tym, że zamknięcie elementu
DialogFragmentnie powodowało prawidłowej aktualizacji stanu elementuNavControllerpo ponownym utworzeniu aktywności (np. po zmianie konfiguracji). (Icd72b) - Rozwiązaliśmy problem, który powodował, że po zamknięciu okna dialogowego nie aktualizowano obsługi systemowego przycisku Wstecz w kontrolerze NavController, co mogło powodować przechwytywanie przez kontroler NavController przycisku Wstecz, mimo że nie miał on żadnego stosu wstecznego do zamknięcia. (If3b34)
- Safe Args automatycznie generuje teraz metodę
toSavedStateHandledla argumentów, których można używać do testowania koduViewModel. (If1e2d, b/193353880)
Wersja 2.4.0-alpha06
4 sierpnia 2021 r.
Publikacja androidx.navigation:navigation-*:2.4.0-alpha06 Wersja 2.4.0-alpha06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Metody
requireSlidingPaneLayout()irequireDetailPaneNavHostFragment()wAbstractListDetailFragmentzostały zmienione nagetSlidingPaneLayout()igetDetailPaneNavHostFragment(). (I34a08)
Zmiany w zachowaniu
- Podczas nawigacji z animacjami (np.
Crossfade)Lifecyclenowego miejsca docelowego będzie teraz docierać doRESUMEDdopiero po zakończeniu animacji. (If0543, b/172112072, b/194301889) NavHostw Navigation Compose ustawia teraz wykres jako część pierwszej kompozycji. (Ieb7be)
Poprawki błędów
- Usunięcie ostatniego miejsca docelowego z grafu nawigacji nie powoduje już błędu
ClassCastException. (If0543, b/172112072, b/194301889) - Rozwiązaliśmy problem
NullPointerException, który występował podczas dodawania precyzyjnego linku bezUrii korzystania z nawigacji po trasie lub precyzyjnym linku. (938a0c, b/193805425) - Rozwiązaliśmy problem w Navigation Compose, który powodował, że precyzyjny link
NavBackStackEntrynie osiągał stanuRESUMED. (I192c5) - Rozwiązaliśmy problem, który powodował, że zamknięcie okna nie aktualizowało obsługi systemowego przycisku Wstecz w kontrolerze NavController, co mogło sprawić, że kontroler NavController przechwytywał przycisk Wstecz, mimo że nie miał żadnego stosu wstecznego do zamknięcia. (aosp/1782668)
Wersja 2.4.0-alpha05
21 lipca 2021 r.
Publikacja androidx.navigation:navigation-*:2.4.0-alpha05 Wersja 2.4.0-alpha05 zawiera te zmiany.
Zmiany w zachowaniu
- Biblioteka Navigation Compose
NavHostzawsze używa teraz przejść między stronami podczas nawigacji między miejscami docelowymi. (I07049, b/172112072) - Możesz teraz wprowadzać zmiany w grafie NavHost. Wykresy z tym samym elementem startDestination i miejscami docelowymi na wykresie będą uznawane za równe i nie będą czyścić
NavControllerstosu wstecznego. (I0b8db, b/175392262)
Poprawki błędów
- Naprawiono
NoSuchElementException, gdy wywoływaniepopBackStack()wLifecycleObserverdołączonym doNavBackStackEntrypowodowałoNoSuchElementExceptionz powodu aktualizacji stanu NavController. (I64621) AbstractListDetailFragmentumożliwia teraz całkowite usunięcie z pliku APK, gdyAbstractListDetailFragmentnie jest używany.SlidingPaneLayout(I611ad)NavGraphiNavDestinationzastępują teraz metodę equals, więc dwa obiekty o tych samych wartościach będą uznawane za równe. (I166eb, b/175392262)
Wersja 2.4.0-alpha04
1 lipca 2021 r.
Publikacja androidx.navigation:navigation-*:2.4.0-alpha04 Wersja 2.4.0-alpha04 zawiera te zatwierdzenia.
Nowe funkcje
- Artefakt
navigation-fragmentzawiera teraz gotową implementację układu dwupanelowego za pomocą nowego elementuAbstractListDetailFragment. Ten fragment używa klasySlidingPaneLayoutdo zarządzania panelem listy (który zapewnia podklasa) i panelem szczegółów, który korzysta z klasyNavHostFragmentjako implementacji, jak widać w naszej przykładowej implementacji. (Iac4be, b/191276636) NavHostartefaktunavigation-composeobsługuje terazdialogmiejsc docelowych opróczcomposablemiejsc docelowych. Każde z tych miejsc docelowych okna dialogowego będzie wyświetlane w funkcji ComposableDialog, unosząc się nad bieżącym miejscem docelowymcomposable. (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()
}
}
}
Zmiany w interfejsie API
- Funkcja
addwNavigatorStatezostała zmieniona napush. Wszystkie bieżące wywołania funkcjiadd()należy zmienić na wywołania funkcji push(). (Ie89fc, b/172112072) - Niestandardowe instancje
Navigatormogą teraz używać interfejsów APIpushWithTransactionipopWithTransitionwNavigatorStatedo asynchronicznego wysyłania lub pobierania miejsca docelowego. Pamiętaj, że te interfejsy API nie są jeszcze używane przez żadną z uwzględnionych usług nawigacyjnych. (Ic4d7c, b/172112072)
Zmiany w zachowaniu
NavDeepLinkBuilderdodaje terazPendingIntent.FLAG_IMMUTABLEdoPendingIntentzwracanego przezcreatePendingIntent(), dzięki czemu ten interfejs API działa zgodnie z oczekiwaniami w przypadku kierowania na Androida 12. (If8c52)
Poprawki błędów
- Rozwiązaliśmy problem z
<include-dynamic>, który powodował, że argumenty przekazywane do wykresu nie były prawidłowo przekazywane do wykresu dołączonego dynamicznie. (I3e115) - Rozwiązaliśmy problem z
NullPointerExceptionpodczas nawigacji do miejsca docelowego za pomocą argumentustring[]o wartości domyślnej@null. (I1fbe8) - Dodaj reguły ProGuard dla
@Navigator.Name, aby rozwiązać problemy podczas korzystania z pełnego trybu R8 3.1. (I2add9, b/191654433) - SafeArgs nie będzie już powodować błędów podczas kompilowania aplikacji w wersjach starszych niż
1.5.0.Kotlin(Icd1ff, b/190739257)
Wersja 2.4.0-alpha03
16 czerwca 2021 r.
Publikacja androidx.navigation:navigation-*:2.4.0-alpha03 Wersja 2.4.0-alpha03 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że do przejścia do dołączonego wykresu dynamicznego potrzebne były 2 wywołania
navigate(). (I7785c, b/188859835) - Naprawiliśmy błąd regresji wprowadzony w Nawigacji
2.4.0-alpha01, który powodował, żesetupActionBarWithNavController()nie usuwał prawidłowo ikony Wstecz, gdy użytkownik znajdował się w miejscu docelowym najwyższego poziomu. (I5d443, b/189868637) - Rozwiązaliśmy problem z wywoływaniem
IllegalStateExceptionpo wcześniejszym usunięciu głównego wykresu NavControllera.popBackStack()(I2a330, b/190265699) - Reguły ProGuard dla
by navArgs()są teraz prawidłowo stosowane podczas korzystania znavigation-commonlub innych artefaktów, które od niego zależą. (I68800, b/190082521) OnDestinationChangedListener, które po raz pierwszy odbiera wywołanie zwrotne,navigate()otrzymuje teraz drugie wywołanie zwrotne z miejscem docelowym, do któregoOnDestinationChangedListenerdotarł. (Ie5f9e, b/190228815)- Safe Args nie powoduje już awarii podczas używania z modułami funkcji dynamicznych i AGP 7.0 lub nowszym. (I69518, b/189966576)
Znany problem
- Safe Args nie będzie działać i wyświetli błąd
Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’, jeśli używasz Gradle6.7.0, ponieważ zależy od starszej wersji Kotlina. Można to obejść, aktualizując Gradle do wersji 7.0. (b/190739257)
Wersja 2.4.0-alpha02
2 czerwca 2021 r.
Publikacja androidx.navigation:navigation-*:2.4.0-alpha02 Wersja 2.4.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Trasy są teraz obsługiwane w przypadku miejsc docelowych Activity, Fragment i Dialog, a także w całym dynamicznym interfejsie DSL Kotlin do nawigacji. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
NavigationUItymczasowo dodał eksperymentalne interfejsy API, które umożliwiają rezygnację z zapisywania stanu. Zapisywanie stanu jest prawidłowym działaniem, ale nadal istnieją przypadki użycia wycofanych bibliotek (np.zachowywanych fragmentów), które nie mogą być obsługiwane podczas zapisywania stanu. Daje to aplikacjom możliwość stopniowego przechodzenia na inne interfejsy API. (Idf93c)Nawigacja udostępnia teraz interfejsy API
findDestination()igetHierarchy(), które można wykorzystać do wdrożenia niestandardowego interfejsu NavigationUI.findDestination()to funkcja rozszerzającaNavGraph, która znajduje miejsce docelowe w grafie.getHierarchy()to funkcja naNavDestination, której można użyć do sprawdzenia, czy dane miejsce docelowe znajduje się w hierarchii innego miejsca docelowego.(I2932f, b/188183365)val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }Metody NavigationUI, które przyjmowały
BottomNavigationView, zostały zaktualizowane tak, aby zamiast tego przyjmowały jego klasę nadrzędną wprowadzoną w Material1.4.0,NavigationBarView. Dzięki temu można używać tych metod w przypadkuNavigationRailView. (Ib0b36, b/182938895)Podczas rozwijania elementu
<action>za pomocą XML atrybuty animacji mogą używać atrybutów pobranych z motywu za pomocą składniapp:enterAnim="?attr/transitionEnter". (I07bc1, b/178291654)
Zmiany w interfejsie API
- Konstruktory DSL w Kotlinie, które używają identyfikatora, zostały wycofane i należy je zastąpić konstruktorami korzystającymi z tras (I85b42, b/188816479) (I9f58f, b/188816479).
Poprawki błędów
DialogFragmentNavigatorkorzysta teraz z interfejsuNavigatorState.pop()API, aby informowaćNavController, gdy okno zamyka się po naciśnięciu systemowego przycisku Wstecz lub kliknięciu poza nim. Dzięki temu stanNavControllerjest zawsze zsynchronizowany ze stanem nawigatora. (I2ead9)Nawigacja nie zwraca już wartości
ConcurrentModificationException, gdy używasz manipulowania listąOnDestinationChangedListenersza pomocą wywołania zwrotnegoonDestinationChanged. (Ib1707, b/188860458)Safe Args nie powoduje już awarii podczas próby wygenerowania właściwości kierunku w Kotlinie. (Id2416, b/188564435)
Metoda setId w klasie NavDestination ma teraz prawidłową adnotację
@IdRes, więc akceptuje tylko identyfikatory zasobów. (I69b80)Parametr int funkcji
findNodema teraz wartośćresIdzamiastresid. (I7711d)
Aktualizacja zależności
- Safe Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 4.2.0. Oznacza to, że nie powinno już pojawiać się ostrzeżenie o używaniu
applicationIdTextResource. (I6d67b, b/172824579)
Wersja 2.4.0-alpha01
18 maja 2021 r.
Publikacja androidx.navigation:navigation-*:2.4.0-alpha01 Wersja 2.4.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Metoda
currentBackStackEntryAsFlow()wNavControllerudostępniaFlow, który emituje sygnał za każdym razem, gdy zmieni się bieżącyNavBackStackEntry. Ten proces może być używany jako alternatywa dla ręcznego zarządzania plikiemOnDestinationChangedListener. (I19c4a, #89, b/163947280)
Wiele stosów wstecznych
Kontroler NavController odpowiada za zarządzanie listą wsteczną miejsc docelowych, dodawanie do niej miejsc docelowych, gdy navigate(), oraz usuwanie ich, gdy wywołasz popBackStack() lub naciśniesz systemowy przycisk Wstecz. Istniejąca klasa NavOptions i integracja z wpisami <action> w pliku XML wykresu nawigacji zostały rozszerzone, aby obsługiwać zapisywanie i przywracanie stosu wstecznego. (b/80029773)
W ramach tej zmiany metody NavigationUI klas onNavDestinationSelected(), BottomNavigationView.setupWithNavController() i NavigationView.setupWithNavController() automatycznie zapisują i przywracają stan usuniętych miejsc docelowych, co umożliwia obsługę wielu stosów wstecznych bez wprowadzania zmian w kodzie. Jeśli używasz nawigacji z fragmentami, jest to zalecany sposób integracji z wieloma stosami wstecznymi. (Ie07ca)
Podstawowe interfejsy API do zapisywania i przywracania stanu są udostępniane na różnych platformach:
W pliku XML nawigacji element
<action>może teraz używać atrybutów logicznychapp:popUpToSaveStateiapp:restoreState, aby zapisywać stan wszystkich miejsc docelowych, które zostały wyświetlone za pomocą elementuapp:popUpTo, oraz przywracać stan powiązany z miejscem docelowym przekazanym jakoapp:destination:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />W
navOptionsKotlin DSL możesz dodać właściwości logicznerestoreStateisaveStatedopopUpTokonstruktora:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }Podczas ręcznego tworzenia obiektu
NavOptionsza pomocą metodyNavOptions.Buildermożesz użyć metodysetRestoreState()i nowego przeciążenia dosetPopUpTo(), które przyjmuje dodatkowy parametrsaveState.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);Wywołania zautomatyzowane do
popBackStack()mogą teraz zawierać dodatkowy parametrsaveState.
W każdym przypadku NavController zapisze i przywróci stan każdego elementu NavBackStackEntry, w tym wszystkie instancje ViewModel w zakresie miejsca docelowego nawigacji. Interfejsy API Navigator zostały zaktualizowane, aby umożliwić każdemu Navigator zapisywanie i przywracanie własnego stanu.
Interfejs ComposeNavigator używany w przypadku miejsc docelowych composable w Navigation Compose oraz interfejsy FragmentNavigator i DynamicFragmentNavigator używane w przypadku miejsc docelowych <fragment> w Navigation with Fragments zostały zaktualizowane, aby korzystać z nowych interfejsów Navigator API i obsługiwać zapisywanie oraz przywracanie stanu.
Trasy nawigacyjne
Trasa to String, która jednoznacznie identyfikuje miejsce docelowe. Wcześniej to pojęcie było używane tylko w Navigation Compose, ale teraz stało się częścią podstawowych interfejsów API Navigation. Jest to alternatywa dla używania identyfikatorów całkowitych podczas tworzenia grafu za pomocą Navigation Kotlin DSL. (b/172823546)
Wszystkie interfejsy API, które wcześniej przyjmowały tylko identyfikator, mają teraz przeciążenie, które przyjmuje ścieżkę String. Obejmuje to m.in. navigate(), popBackStack(), popUpTo() i getBackStackEntry().
Ma to pewne konsekwencje dla interfejsu API:
- Właściwość
popUpTow języku Kotlin DSL została wycofana na rzeczpopUpToId. (I59c73, b/172823546) - Interfejs API
getStartDestination()został wycofany na rzecz interfejsugetStartDestinationId(). (I0887f, b/172823546)
W przypadku deweloperów, którzy przechodzą z poprzednich wersji Navigation Compose na Navigation Compose 2.4.0-alpha01, oznacza to, że te importy w metodach rozszerzeń nie są już potrzebne i należy je usunąć:
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
Argument KEY_ROUTE został zastąpiony właściwością route w obiekcie NavDestination, co umożliwia bezpośrednie wywoływanie funkcji navBackStackEntry.destination.route.
Zmiany w interfejsie API
- Wszystkie artefakty Navigation zostały przepisane w języku Kotlin. Poprawiliśmy w ten sposób możliwość przyjmowania wartości null przez klasy korzystające z typów ogólnych (np. podklasy
NavType). Wszystkie funkcje rozszerzające w Kotlinie, które były częścią artefaktów-ktx, zostały przeniesione do odpowiednich artefaktów głównych. Artefakty-ktxbędą nadal publikowane, ale będą całkowicie puste. (b/184292145) NavDeepLinkBuilderobsługuje teraz dodawanie wielu różnych miejsc docelowych do wygenerowanego stosu wstecznego. (I3ee0d, b/147913689)- Dodaj funkcje fabryczne dla
DynamicNavHostFragment(Icd515, b/175222619) - Unikalny identyfikator
NavBackStackEntryjest teraz udostępniany w ramach publicznego interfejsu API. (Ie033a) - Pola
nameiargumentoraz funkcje destrukcjiNamedNavArgumentsą teraz publiczne. (#174, b/181320559) - Wprowadziliśmy nowe rozszerzenie
NavBackStackEntry#provideToCompositionLocals, które udostępniaNavBackStackEntryodpowiednim lokalizacjom kompozycji. (#175, b/187229439)
Safe Args
Safe Args generuje teraz metodę
fromSavedStateHandle()dla każdej klasyNavArgs. (#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) }Zaktualizowano Safe Args, aby zależał od KotlinPoet w wersji
1.8.0. (#172, b/183990444)
Zmiany w zachowaniu
- Nawigacja zależy teraz od Lifecycle
2.3.1i oznacza metodysetGraph(),popBackStack(),navigateUp()inavigate(), które aktualizująNavBackStackEntryLifecycle, jako@MainThread, co sprawia, że nawigacja jest zgodna z wymaganiami dotyczącymi głównego wątku wprowadzonymi w Lifecycle2.3.0. (b/171125856) - Analizowanie argumentów wyliczeniowych z precyzyjnych linków nie uwzględnia już wielkości liter, dzięki czemu precyzyjny link, np.
http://www.example.com/red, może pasować do precyzyjnego linkuwww.example.com/{color}, nawet jeśli wyliczenie ma wartośćRED. (#152, b/135857840)
Zgodność z Compose
androidx.navigation:navigation-compose:2.4.0-alpha01jest zgodny tylko z Compose w wersji1.0.0-beta07lub nowszej.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że symbole zastępcze argumentów końcowych miały pierwszeństwo przed precyzyjnymi linkami z dokładnie takim samym sufiksem. (#153, b/184072811)
NavHostFragmentobsługuje teraz niestandardowe nawigatory, które używają tego samego@Navigator.Name("dialog")co domyślnyDialogFragmentNavigator. (Ib1c2c, b/175979140)- Ulepszyliśmy działanie funkcji
NavigatorProvider#addNavigator, aby wielokrotne wywoływanie jej z tą samą instancją nie powodowało problemów. (#176, b/187443146)
Wkład zewnętrzny
- Dziękujemy simonschiller za dodanie obsługi Safe Args, która generuje metodę
fromSavedStateHandle()dla każdej klasyNavArgs. (#122, b/136967621) - Dziękujemy Bradleycorn za to, że argumenty wyliczeniowe z precyzyjnych linków są analizowane bez uwzględniania wielkości liter. (#152, b/135857840)
- Dziękujemy osipxd za rozwiązanie problemu, w którym zmienne argumentów na końcu miały pierwszeństwo przed precyzyjnymi linkami z pasującym dokładnym sufiksem. (#153, b/184072811)
- Dziękujemy tatocaster za zaktualizowanie Safe Args, aby zależało od KotlinPoet
1.8.0. (#172, b/183990444) - Dziękujemy jossiwolf za udostępnienie pól
nameiargumentoraz funkcji dekonstrukcjiNamedNavArgument. (#174, b/181320559) - Dziękujemy jossiwolf za wprowadzenie nowego rozszerzenia
NavBackStackEntry#provideToCompositionLocals, które udostępniaNavBackStackEntryodpowiednim lokalizacjom kompozycji. (#175, b/187229439) - Dziękujemy jossiwolf za ulepszenie działania funkcji
NavigatorProvider#addNavigator, dzięki czemu wielokrotne wywoływanie jej z tą samą instancją nie powoduje problemów. (#176, b/187443146)
Nawigacja w Compose w wersji 1.0.0
Wersja 1.0.0-alpha10
7 kwietnia 2021 r.
Publikacja androidx.navigation:navigation-compose:1.0.0-alpha10 Wersja 1.0.0-alpha10 zawiera te zatwierdzenia.
Zmiany w interfejsie API
NavHostakceptuje terazModifier, który jest przekazywany do kontenera kompozycyjnego opakowującego kompozycje docelowe. (I85aca, b/175125483)
Poprawki błędów
NavHostdziała teraz nawet wtedy, gdy nie znalezionoOnBackPressedDispatcherOwner, np. podczas wyświetlania podgląduNavHost. (I7d8b4)- Biblioteka Navigation Compose zależy teraz od Navigation
2.3.5, co rozwiązuje problem podczas używaniaBackHandlerw miejscu docelowymNavHost. (I7e63b, b/182284739)
Wersja 1.0.0-alpha09
10 marca 2021 r.
Publikacja androidx.navigation:navigation-compose:1.0.0-alpha09 Wersja 1.0.0-alpha09 zawiera te zatwierdzenia.
Zmiany w interfejsie API
LocalViewModelStoreOwner.currentzwraca teraz wartość dopuszczającą wartość nullViewModelStoreOwner, aby lepiej określać, czy w bieżącej kompozycji jest dostępny elementViewModelStoreOwner. Interfejsy API, które wymagająViewModelStoreOwner, np.viewModel()iNavHost, nadal zgłaszają wyjątek, jeśli nie ustawionoViewModelStoreOwner. (Idf39a)
Poprawki błędów
- Biblioteka Navigation Compose zależy teraz od Navigation 2.3.4, która zawiera poprawkę błędu polegającego na próbie ustawienia tego samego obiektu ViewModelStore po ustawieniu wykresu. (I65c24, b/177825470)
Wersja 1.0.0-alpha08
24 lutego 2021 r.
Publikacja androidx.navigation:navigation-compose:1.0.0-alpha08 Wersja 1.0.0-alpha08 zawiera te zatwierdzenia.
Nowe funkcje
NavHostwypełnia terazLocalSavedStateRegistryOwnerCompositionLocal wartościąNavBackStackEntrymiejsca docelowego, dzięki czemu każdy stan zapisany bezpośrednio wSavedStateRegistrybędzie zapisywany i przywracany wraz z miejscem docelowym. (I435d7, b/179469431)
Wersja 1.0.0-alpha07
10 lutego 2021 r.
Publikacja androidx.navigation:navigation-compose:1.0.0-alpha07 Wersja 1.0.0-alpha07 zawiera te zatwierdzenia.
Aktualizacje zależności
- Biblioteka Navigation Compose zależy teraz od Lifecycle ViewModel Compose w wersji 1.0.0-alpha01, aby zapewnić obsługę
viewModel()w miejscach docelowychcomposable. (I7a374) NavHostkorzysta teraz z nowego interfejsuLocalOnBackPressedDispatcherOwnerz biblioteki Activity-Compose w wersji 1.3.0-alpha01, aby uzyskać wartośćOnBackPressedDispatcherustawioną w obiekcieNavController. (I65b12)
Wersja 1.0.0-alpha06
28 stycznia 2021 roku
Publikacja androidx.navigation:navigation-compose:1.0.0-alpha06 Wersja 1.0.0-alpha06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano metodę rozszerzenia
getBackStackEntry(route: String)wNavController, która zwraca powiązany elementNavBackStackEntry. (If8931)
Wersja 1.0.0-alpha05
13 stycznia 2021 r.
Publikacja androidx.navigation:navigation-compose:1.0.0-alpha05 Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.
Zaktualizowano, aby zależał od Compose w wersji 1.0.0-alpha10.
Wersja 1.0.0-alpha04
16 grudnia 2020 roku
Publikacja androidx.navigation:navigation-compose:1.0.0-alpha04 Wersja 1.0.0-alpha04 zawiera te zatwierdzenia.
- Zaktualizowano pod kątem zgodności z Compose
1.0.0-alpha09.
Wersja 1.0.0-alpha03
2 grudnia 2020 r.
Publikacja androidx.navigation:navigation-compose:1.0.0-alpha03 Wersja 1.0.0-alpha03 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że po zmianie konfiguracji lub zakończeniu i ponownym utworzeniu procesu funkcje
popBackStack()inavigateUp()nie działały. (Icea47, b/173281473) - Przechodzenie do zagnieżdżonego wykresu w obiekcie NavHost działa teraz prawidłowo. (I0948d, b/173647694)
Wersja 1.0.0-alpha02
11 listopada 2020 roku
Publikacja androidx.navigation:navigation-compose:1.0.0-alpha02 Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Nawigacja w Compose obsługuje teraz NavOptions do używania operacji popUpTo i launchSingleTop (If96c3, b/171468994).
- Dodano funkcję nawigacji, która zamiast identyfikatora przyjmuje trasę, co umożliwia tworzenie zagnieżdżonych wykresów w języku DSL Navigation Compose. (I1661d)
- Parametr startDestination znajduje się teraz przed parametrem route na liście parametrów elementu NavHost (Ie620e).
- Możesz teraz utworzyć wykres, używając trasy jako miejsca docelowego poza komponentem kompozycyjnym NavHost. (Iceb75)
Wersja 1.0.0-alpha01
28 października 2020 r.
Publikacja android.navigation:navigation-compose:1.0.0-alpha01 Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
Artefakt navigation-compose zapewnia integrację między komponentem nawigacji a Jetpack Compose. Jako miejsca docelowe w aplikacji używa @Composablefunkcji.
Ta pierwsza wersja zapewnia:
- Funkcja
NavHost, która umożliwia tworzenie wykresu nawigacji za pomocą języka Kotlin DSL. - Określanie zakresu cyklu życia,
ViewModeli zapamiętanego stanu na poziomie miejsca docelowego. - Automatyczna integracja z systemowym przyciskiem Wstecz.
- Obsługa przekazywania argumentów, dołączania precyzyjnych linków do miejsc docelowych i zwracania wyniku do poprzednich miejsc docelowych.
- Utwórz konkretne funkcje pomocnicze w
rememberNavController()icurrentBackStackEntryAsState(), aby umożliwić przenoszenie stanu i łączenieNavControllerz kompozycjami pozaNavHost(np. z dolnym paskiem nawigacyjnym).
Więcej informacji znajdziesz w przewodniku po tworzeniu nawigacji w Compose.
Wersja 2.3.5
Wersja 2.3.5
7 kwietnia 2021 r.
Publikacja androidx.navigation:navigation-*:2.3.5 Wersja 2.3.5 zawiera te zatwierdzenia.
Nowe funkcje
- Podczas nawigacji za pomocą
NavDeepLinkRequestlubUrimożesz teraz uzyskać dostęp doUri, działania i typu MIME w miejscu docelowym, pobierając intencję z argumentów za pomocąKEY_DEEP_LINK_INTENT. Odzwierciedla to funkcję, która jest już dostępna w przypadku zewnętrznego linkowania bezpośredniego. (I975c3, b/181521877)
Poprawki błędów
OnBackPressedCallbacksdodany do dyspozytora zNavBackStackEntryjako LifecycleOwner prawidłowo przechwytuje naciśnięcie przycisku WsteczSTOPPEDpo tym, jak cykl życia działania przejdzie w stanSTARTED(Iff94f, b/182284739).- Analizowanie domeny precyzyjnego linku nie uwzględnia już wielkości liter, dzięki czemu
www.example.compasuje zarówno dowww.example.com, jak i dowww.Example.com. Pamiętaj, że w nazwach parametrów zapytania nadal jest rozróżniana wielkość liter. (#144, b/153829033) - Naprawiono
NullPointerException, który mógł występować, gdy miejsce docelowe ma wiele argumentów domyślnych, które nie mogą mieć wartości null, a użytkownik przechodzi do tego miejsca docelowego, zastępując tylko podzbiór tych argumentów. (aosp/1644827)
Aktualizacje zależności
- Wtyczka Gradle Safe Args do nawigacji zależy teraz od wtyczki Kotlin Gradle w wersji 1.4.31. (aosp/1661058, b/181156413)
Wkład zewnętrzny
- Dziękujemy
bentrengroveza przesłanie prośby o zmianę, która sprawia, że analiza domeny precyzyjnego linku nie uwzględnia wielkości liter. (#144, b/153829033)
Wersja 2.3.4
Wersja 2.3.4
10 marca 2021 r.
Publikacja androidx.navigation:navigation-*:2.3.4 Wersja 2.3.4 zawiera te zatwierdzenia.
Nowe funkcje
ReferenceTypemożna teraz prawidłowo analizować, gdy są wysyłane jako część identyfikatora URI precyzyjnego linku. Obsługuje to zarówno surową wartość całkowitą, jak i wartości szesnastkowe poprzedzone znakiem0x. (#127, b/179166693)- Tag
android:defaultValuew przypadku argumentu z atrybutemapp:argType="float"obsługuje teraz domyślne wartości całkowite, co pozwala używać taguandroid:defaultValue="0"zamiast tagu0.0. (#117, b/173766247)
Poprawki błędów
- Naprawiono problem z zablokowanym postępem instalacji podczas korzystania z obsługi funkcji dynamicznych w Nawigacji. (Ib27a7, b/169636207)
- Wywoływanie funkcji
setViewModelStorelubsetLifecycleOwnerz tym samym obiektem, który został już ustawiony, nie będzie już powodować żadnych działań (Idf491, b/177825470). - Safe Args dodaje teraz adnotacje suppress do odpowiednich metod podczas korzystania z Javy. (I8fbc5, b/179463137)
Wkład zewnętrzny
- Dziękujemy
JvmNameza żądanie pull, dzięki któremu argumentyReferenceTypemogą być teraz prawidłowo analizowane, gdy są wysyłane jako część identyfikatora URI linku bezpośredniego. (#127, b/179166693) - Dziękujemy
tatocasterza prośbę o scalenie, która umożliwia używaniedefaultValuejako argumentu zapp:argType=”float”. Obsługuje ona teraz domyślne wartości całkowite. (#117, b/173766247)
Wersja 2.3.3
Wersja 2.3.3
27 stycznia 2021 r.
Publikacja androidx.navigation:navigation-*:2.3.3 Wersja 2.3.3 zawiera te zatwierdzenia.
Poprawki błędów
- Nie występuje już awaria podczas wyodrębniania elementu
NavBackStackEntry, zanim jegoLifecyclezostanie przeniesiony doCREATED. (Ie3ba3) - Naprawiono regresję spowodowaną przez b/171364502, w której przejście do aktywności z wartością zasobu animacji
0powodowałoResourceNotFoundException. (I7aedb, b/176819931)
Wersja 2.3.2
Wersja 2.3.2
2 grudnia 2020 r.
Publikacja androidx.navigation:navigation-*:2.3.2 Wersja 2.3.2 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem w
NavigationUI, który powodował, że użycie miejsca docelowego<activity>zonNavDestinationSelectednie powodowało przejścia do aktywności. (I22e34, b/171364502) - Rozwiązaliśmy problem, który powodował, że
navigation-dynamic-features-fragmentskutkowało wielokrotnym przechodzeniem do nowo zainstalowanego miejsca docelowego. (aosp/1486056, b/169636207) - Rozwiązaliśmy problem, który powodował, że argumenty domyślne nie były wysyłane do instancji
OnDestinationChangedListenerpodczas używanialaunchSingleTop. (I2c5cb) - Rozwiązaliśmy problem, który powodował, że przejście do zagnieżdżonego wykresu nawigacji nie powodowało utworzenia nowej instancji wykresu na stosie wstecznym. (Ifc831)
- Rozwiązaliśmy problem polegający na tym, że użycie
navigate()zpopUpTo, które usuwało ostatnie miejsce docelowe na wykresie nawigacji, nie powodowało natychmiastowego zniszczenia i usunięcia samego wykresu nawigacji ze stosu wstecznego. (I910a3) - SafeArgs w Nawigacji korzysta teraz z KotlinPoet w wersji 1.7.2, która dodaje obsługę trybu jawnego interfejsu API w Kotlinie. (I918b5)
NavHostFragment.findNavController(Fragment)sprawdza teraz również widok dekoracji głównej elementu DialogFragment, oprócz dotychczasowych sprawdzeń hierarchii fragmentów i hierarchii widoków fragmentu. Umożliwia to testowanie fragmentów okien dialogowych, które korzystają z nawigacji z użyciem symboliFragmentScenarioiNavigation.setViewNavController(). (I69e0d)
Wersja 2.3.1
Wersja 2.3.1
14 października 2020 r.
Publikacja androidx.navigation:navigation-*:2.3.1 Wersja 2.3.1 zawiera te zatwierdzenia.
Nowe funkcje
- Do interfejsu nawigacji dodano domyślne zasoby Animatora, które są zalecane zamiast domyślnych zasobów animacji. (b/167430145)
- Klasa NavOptions zastępuje teraz metody hashCode i equals (b/161586466).
- Nawigacja zawiera teraz bieżące miejsce docelowe w wyjątku IllegalArgumentException „No destination with ID”, co powinno ułatwić programistom debugowanie. (b/168311416)
Poprawki błędów
- Safe Args nie będzie już zawijać wiersza zwrotu, nawet jeśli wygenerowana nazwa klasy argumentu będzie dłuższa niż 100 znaków. (b/168584987)
Zmiany zależności
navigation-uizależy teraz od DrawerLayout 1.1.1, co zapewnia możliwość otwierania panelu przezNavigationUInawet w przypadku korzystania zLOCK_MODE_LOCKED_CLOSEDlubLOCK_MODE_LOCKED_OPEN. (b/162253907)- Safe Args zależy teraz od KotlinPoet 1.6.0 (aosp/1435911).
- Safe Args zależy teraz od AGP 4.0.1 (aosp/1442337).
Wersja 2.3.0
Wersja 2.3.0
24 czerwca 2020 r.
Publikacja androidx.navigation:navigation-*:2.3.0 Wersja 2.3.0 zawiera te zatwierdzenia.
Główne zmiany od wersji 2.2.0
- Integracja modułu funkcji: artefakty
navigation-dynamic-features-runtimeinavigation-dynamic-features-fragmentumożliwiają przechodzenie do miejsc docelowych zdefiniowanych w modułach funkcji, automatycznie obsługując instalację modułów funkcji w razie potrzeby. Więcej informacji znajdziesz w artykule Nawigacja za pomocą modułów funkcji. - Testowanie nawigacji: artefakt
navigation-testingudostępniaTestNavHostController, który umożliwia ustawienie bieżącego miejsca docelowego i sprawdzenie stosu wstecznego po operacjach nawigacji. Więcej informacji znajdziesz w artykule Testowanie nawigacji. - Zwracanie wyniku: element
NavBackStackEntrypowiązany z każdym miejscem docelowym na liście wstecznej nawigacji umożliwia teraz dostęp do elementuSavedStateHandle, który nadaje się do przechowywania niewielkich ilości zapisanego stanu, który powinien być powiązany z określonym wpisem na liście wstecznej. Więcej informacji znajdziesz w sekcji Przywracanie wyniku do poprzedniego miejsca docelowego. NavigationUIobsługaOpenable: wszystkie użyciaDrawerLayoutwNavigationUIzostały zastąpione bardziej ogólnym interfejsemOpenabledodanym w CustomView1.1.0i wdrożonym przezDrawerLayoutw DrawerLayout1.1.0.- Obsługa działań i typów MIME w precyzyjnych linkach: precyzyjne linki zostały rozszerzone o obsługę
app:actioniapp:mimeTypeoprócz wcześniej dostępnegoapp:uri.NavControllerobsługuje teraz nawigację według dowolnej kombinacji tych pól za pomocą nowej klasyNavDeepLinkRequest. Więcej informacji znajdziesz w artykule Nawigacja za pomocą NavDeepLinkRequest.
Znane problemy
- Obsługa działań precyzyjnych linków i typów MIME nie jest jeszcze dostępna w narzędziu do scalania plików manifestu. Do czasu zakończenia tych prac wygenerowane elementy
<intent-filter>z elementu<nav-graph>w pliku manifestu nie będą zawierać typu MIME w elemencie<data>ani niestandardowego elementu<action>. Musisz ręcznie dodać odpowiedni element<intent-filter>do pliku manifestu.
Wersja 2.3.0-rc01
10 czerwca 2020 r.
Publikacja androidx.navigation:navigation-*:2.3.0-rc01 Wersja 2.3.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem
NullPointerException, który występował podczas zastępowania wystąpienia miejsca docelowego bez argumentów innym wystąpieniem z argumentami za pomocąsingleTop. (b/158006669) - Wszystkie wyjątki
destination is unknownzgłaszane przezNavControllerzawierają teraz dodatkowe informacje do debugowania, które pomagają określić stanNavController. (b/157764916)
Wersja 2.3.0-beta01
20 maja 2020 r.
androidx.navigation:navigation-*:2.3.0-beta01. Wersja 2.3.0-beta01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że
LifecyclewNavBackStackEntrynie było prawidłowo aktualizowane po zakończeniu procesu. (b/155218371) - Instancje
OnDestinationChangedListenerzarejestrowane przed wywołaniemsetGraph()są teraz prawidłowo wysyłane do przywróconego miejsca docelowego po zakończeniu procesu. (b/155218371) - Gdy używasz funkcji
singleTop, argumenty funkcjiNavBackStackEntrysą teraz prawidłowo aktualizowane, a zaktualizowane argumenty są wysyłane do wszystkich instancjiOnDestinationChangeListener. (b/156545508)
Aktualizacje zależności
- Artefakt
NavigationUIzależy teraz od CustomView1.1.0-rc01i DrawerLayout1.1.0-rc01. (aosp/1309696)
Wersja 2.3.0-alpha06
29 kwietnia 2020 r.
Publikacja androidx.navigation:navigation-*:2.3.0-alpha06 (Wersja 2.3.0-alpha06 zawiera te zmiany.)
Nowe funkcje
- Precyzyjne linki zostały rozszerzone o obsługę
app:actioniapp:mimeTypeoprócz wcześniej dostępnegoapp:uri. Klasa NavController obsługuje teraz nawigację za pomocą dowolnej kombinacji tych pól za pomocą nowej klasyNavDeepLinkRequest. (b/136573074, b/135334841)
Zmiany w interfejsie API
- Znacznie rozszerzyliśmy obsługę Kotlin DSL w przypadku miejsc docelowych nawigacji dynamicznej. (b/148969800)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że intencje precyzyjnych linków były ignorowane podczas korzystania z zagnieżdżonego miejsca docelowego. (b/154532067)
Wersja 2.3.0-alpha05
15 kwietnia 2020 roku
Publikacja androidx.navigation:navigation-*:2.3.0-alpha05 Wersja 2.3.0-alpha05 zawiera te zatwierdzenia.
Nowe funkcje
- W przypadku dynamicznych wykresów obejmujących używających
<include-dynamic>nie musisz już określaćapp:graphPackage. Zostanie użyta wartość domyślna przez dodanie sufiksumoduleNamedoapplicationIdpo kropce. Jeśli musisz dostosowaćgraphPackage, możesz teraz użyć symbolu zastępczego${applicationId}. (b/152696768) - DSL Kotlin wykresu nawigacji udostępnia teraz
defaultArgumentsMapdla działań, co odzwierciedla możliwość ustawiania wartości domyślnych w elementach<action>w plikach XML nawigacji. (b/150345605)
Poprawki błędów
- W Navigation 2.2.2: naprawiono
IllegalStateExceptionpodczas precyzyjnego linkowania do miejsca docelowego na początku wykresu, gdy w aktywności jest wiele instancjiNavHostFragment. (b/147378752)
Aktualizacje zależności
- Nawigacja zależy teraz od fragmentu
1.2.4. (aosp/1277325) - Nawigacja dynamiczna zależy teraz od Play Core
1.7.2. (aosp/1282257)
Wersja 2.3.0-alpha04
18 marca 2020 r.
Publikacja androidx.navigation:navigation-*:2.3.0-alpha04 Wersja 2.3.0-alpha04 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano obsługę aktywności modułu funkcji i miejsc docelowych fragmentów w języku Kotlin DSL Navigation. (b/148969800)
Zmiany w interfejsie API
- Klasa
DynamicExtrasnie używa już wzorca konstruktora i można ją teraz tworzyć bezpośrednio. (aosp/1253671) - Metoda
DynamicActivityNavigatorprzyjmuje teraz w konstruktorze obiektContextzamiast obiektuActivity. (aosp/1250252)
Poprawki błędów
NavigationUInie ignoruje już pustych etykiet (np. miejsca docelowego z wartościąandroid:label=””) i prawidłowo ustawia tytuł na pusty ciąg tekstowy. (b/148679860)
Aktualizacje zależności
- Artefakty dynamicznych funkcji nawigacji zależą teraz od biblioteki Play Core
1.6.5. (b/149556401)
Wersja 2.3.0-alpha03
4 marca 2020 r.
Publikacja androidx.navigation:navigation-*:2.3.0-alpha03 Wersja 2.3.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Zamiast korzystać z konkretnej klasy
DrawerLayout,AppBarConfigurationużywa teraz interfejsuOpenablewprowadzonego w CustomView1.1.0-alpha02(któryDrawerLayoutjest implementowany od DrawerLayout1.1.0-alpha04), co umożliwia używanie niestandardowych implementacjiOpenablezNavigationUI. (b/129030452)
Poprawki błędów
- Reguły ProGuard zachowują teraz tylko klasy
NavArgs, które są używane, a nie wszystkie instancjeNavArgs.navigation-common-ktx(b/150213558)
Zmiany zależności
- Nawigacja nie zależy już od biblioteki Core
1.2.0, ale od biblioteki Core1.1.0. Dzięki temu deweloperzy nie muszą przechodzić na nowszą wersję zależności, gdy Nawigacja nie korzysta z żadnych nowych interfejsów API w bibliotece Core1.2.0.
Wersja 2.3.0-alpha02
19 lutego 2020 r.
Publikacja androidx.navigation:navigation-*:2.3.0-alpha02 Wersja 2.3.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
NavBackStackEntryumożliwia teraz dostęp doSavedStateHandle, który nadaje się do przechowywania niewielkich ilości zapisanego stanu, który powinien być powiązany z określonym wpisem na liście wstecznej. Przykład zastosowania znajdziesz w sekcji Zwracanie wyniku. (b/79672220)
Zmiany w interfejsie API
- Dodaliśmy wygodne metody
getCurrentBackStackEntry()igetPreviousBackStackEntry(), aby ułatwić pobieranieNavBackStackEntrydla bieżących i poprzednich miejsc docelowych. (b/79672220)
Poprawki błędów
navigateUp()przekazuje teraz argumenty bieżącego miejsca docelowego iKEY_DEEP_LINK_INTENTdo poprzedniego miejsca docelowego podczas uruchamiania aplikacji na własnym stosie zadań. (b/147456890)
Zmiany zależności
- Nawigacja zależy teraz od Core
1.2.0.
Wersja 2.3.0-alpha01
5 lutego 2020 r.
Publikacja androidx.navigation:navigation-*:2.3.0-alpha01 Wersja 2.3.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Nowy artefakt
navigation-testingudostępnia klasęTestNavHostController. Ta klasa stanowi alternatywę dla używania obiektu mockNavControllerpodczas testowania nawigacji. Umożliwia ustawienie bieżącego miejsca docelowego i zweryfikowanie listy wstecznej po operacjach nawigacji. (b/140884273) - Nowy element
navigation-dynamic-features-fragment(i jego zależność przechodnianavigation-dynamic-features-runtime) umożliwia uwzględnianie miejsc docelowych lub całych wykresów nawigacji (za pomocą<include-dynamic>) z modułów funkcji, co zapewnia bezproblemową instalację modułów funkcji na żądanie podczas przechodzenia do tych miejsc docelowych. Więcej informacji znajdziesz w artykule Nawigacja za pomocą modułów funkcji. (b/132170186)
Poprawki błędów
- W sekcji Nawigacja
2.2.1: precyzyjne linki bez parametrów zapytania prawidłowo ignorują teraz parametry zapytania, zamiast dołączać je do elementów końcowych{argument}lub nie pasować do precyzyjnego linku. (b/147447512) - Z menu nawigacyjnego
2.2.1: zaktualizowaliśmynavigation-uireguły ProGuard dlaDrawerArrowDrawable, abyandroid.enableJetifier=truenie było wymagane. (b/147610424) - W Nawigacji
2.2.1: modułnavigation-common-ktxma teraz unikalną nazwę pakietu manifestu zamiast współdzielić tę samą nazwę pakietu manifestu conavigation-runtime-ktx. (aosp/1141947)
Aktualizacje zależności
- W Nawigacji: nawigacja
2.2.1zależy teraz od Lifecycle ViewModel SavedState2.2.0i Fragment1.2.1.2.2.1
Wersja 2.2.2
Wersja 2.2.2
15 kwietnia 2020 roku
androidx.navigation:navigation-*:2.2.2. Wersja 2.2.2 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono
IllegalStateExceptionpodczas precyzyjnego linkowania do miejsca docelowego na początku wykresu, gdy w aktywności występuje wiele instancjiNavHostFragment. (b/147378752) NavigationUInie ignoruje już pustych etykiet (np. miejsca docelowego z wartościąandroid:label=””) i prawidłowo ustawia tytuł na pusty ciąg tekstowy. Ta funkcja została wcześniej udostępniona w Navigation 2.3.0-alpha04. (b/148679860)- Reguły ProGuard zachowują teraz tylko klasy
NavArgs, które są używane, a nie wszystkie instancjeNavArgs.navigation-common-ktxTa funkcja została wcześniej udostępniona w Navigation 2.3.0-alpha03. (b/150213558
Aktualizacje zależności
- Nawigacja zależy teraz od fragmentu
1.2.4. (aosp/1277325)
Wersja 2.2.1
Wersja 2.2.1
5 lutego 2020 r.
Publikacja androidx.navigation:navigation-*:2.2.1 Wersja 2.2.1 zawiera te zmiany.
Poprawki błędów
- Precyzyjne linki bez parametrów zapytania prawidłowo ignorują teraz wszystkie parametry zapytania, zamiast dołączać je do elementów
{argument}lub nie pasować do precyzyjnego linku. (b/147447512) navigation-uiReguły ProGuard dlaDrawerArrowDrawablezostały zaktualizowane, aby zapewnić, żeandroid.enableJetifier=truenie jest wymagane. (b/147610424)- Moduł
navigation-common-ktxma teraz unikalną nazwę pakietu manifestu zamiast współdzielić tę samą nazwę pakietu manifestu conavigation-runtime-ktx. (aosp/1141947)
Aktualizacje zależności
- Nawigacja
2.2.1zależy teraz od Lifecycle ViewModel SavedState2.2.0i Fragment1.2.1.
Wersja 2.2.0
Wersja 2.2.0
22 stycznia 2020 r.
Publikacja androidx.navigation:navigation-*:2.2.0 Wersja 2.2.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.1.0
- NavBackStackEntry: możesz teraz wywołać
NavController.getBackStackEntry(), przekazując identyfikator miejsca docelowego lub wykresu nawigacji na stosie wstecznym. Zwrócony obiektNavBackStackEntryzawiera obiektLifecycleOwner,ViewModelStoreOwner(taki sam jak zwracany przezNavController.getViewModelStoreOwner()) iSavedStateRegistryOwner, a także argumenty użyte do uruchomienia tego miejsca docelowego. - Integracja ViewModelu cyklu życia z SavedState:
SavedStateViewModelFactoryjest teraz domyślną fabryką używaną podczas korzystania zby navGraphViewModels()lub konstruktoraViewModelProviderzViewModelStoreOwnerzwracanym przezNavController.getBackStackEntry()lubNavController.getViewModelStoreOwner(). - Obsługa parametrów zapytania w precyzyjnych linkach: precyzyjne linki z parametrami zapytania obsługują teraz zmienioną kolejność parametrów zapytania. Argumenty, które mają wartość domyślną lub mogą mieć wartość null, są teraz opcjonalne podczas dopasowywania precyzyjnych linków.
- Ulepszona obsługa animacji:
NavHostFragmentkorzysta teraz zFragmentContainerViewz Fragmentu 1.2.0, co rozwiązuje problemy z kolejnością animacji i przekazywaniem wstawień okien do fragmentów.
Wersja 2.2.0-rc04
18 grudnia 2019 r.
Publikacja androidx.navigation:navigation-*:2.2.0-rc04 Wersja 2.2.0-rc04 zawiera te zmiany.
Poprawki błędów
- Dostosowaliśmy domyślne animacje zanikania używane przez
navigation-ui, aby pasowały do dostosowanych animacji zanikania w fragmencie1.2.0-rc04. (b/145769814)
Wersja 2.2.0-rc03
4 grudnia 2019
Publikacja androidx.navigation:navigation-*:2.2.0-rc03 Wersja 2.2.0-rc03 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z parsowaniem linków bezpośrednich podczas używania parametrów zapytania i argumentu jako ostatniej części ścieżki, który uniemożliwiał parsowanie więcej niż 1 znaku argumentu ścieżki końcowej. (b/144554689)
- Rozwiązaliśmy problem z parsowaniem precyzyjnych linków, który powodował, że parametry opcjonalne otrzymywały wartość
"@null"zamiastnull. (b/141613546) NavHostFragmentteraz prawidłowo przywraca wykres po zmianie konfiguracji, gdy jest używany zFragmentContainerView. (b/143752103)
Zmiany zależności
- Nawigacja zależy teraz od komponentów Lifecycle
2.2.0-rc03, Lifecycle ViewModel SavedState1.0.0-rc03, Activity1.1.0-rc03i Fragment1.2.0-rc03w odpowiednich przypadkach.
Wersja 2.2.0-rc02
7 listopada 2019 r.
Publikacja androidx.navigation:navigation-*:2.2.0-rc02 Wersja 2.2.0-rc02 zawiera te zmiany.
Zmiany zależności
- Nawigacja zależy teraz od androidx.lifecycle
2.2.0-rc02.
Wersja 2.2.0-rc01
23 października 2019 r.
androidx.navigation:navigation-*:2.2.0-rc01 została opublikowana bez zmian od 2.2.0-beta01. Wersja 2.2.0-rc01 zawiera te zmiany.
Wersja 2.2.0-beta01
9 października 2019 r.
Publikacja androidx.navigation:navigation-*:2.2.0-beta01 Wersja 2.2.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
NavDestinationi jego podklasy zastępują teraztoString(), aby podczas debugowania dostarczać bardziej przydatne informacje. (b/141264986)
Zmiany w działaniu
- Dodatkowe parametry zapytania są teraz ignorowane podczas dopasowywania precyzyjnych linków, zamiast powodować niepowodzenie dopasowania. (b/141482822)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że argumenty w ścieżce precyzyjnego linku były ignorowane, jeśli określono też parametry zapytania. (b/141505755)
navArgs()Rozszerzenie Kotlin wActivitywyświetla teraz lepszy komunikat o błędzie, gdy nie ma dodatków. (b/141408999)- Wygenerowane przez Safe Args klasy Java
Directionszawierają teraz wartości domyślne. (b/141099045) - Wygenerowane przez Safe Args klasy Java
Argszawierają teraz wartości domyślne. (b/140123727) - Gdy używasz
Toolbar,NavigationUInie animuje już zmiany tekstu podczas przechodzenia między dwoma miejscami docelowymi najwyższego poziomu. (b/140848160)
Wersja 2.2.0-alpha03
18 września 2019 r.
Publikacja androidx.navigation:navigation-*:2.2.0-alpha03 Wersja 2.2.0-alpha03 zawiera te zmiany.
Zmiany w działaniu
- Dzwonienie pod numer
setViewModelStore()po zadzwonieniu pod numersetGraphpowoduje terazIllegalStateException. To ustawienie powinno być zawsze konfigurowane przezNavHostw ramach wstępnej konfiguracji, aby zapewnić wszystkim instancjomNavBackStackEntryspójne miejsce na dane instancjiViewModel. (aosp/1111821)
Poprawki błędów
- Naprawiono
ConcurrentModificationExceptionpodczas korzystania z instancjiViewModeldołączonych do wielu różnych instancjiViewModelStorew zakresie wykresu nawigacji. (aosp/1112257)
Wersja 2.2.0-alpha02
5 września 2019 r.
Publikacja androidx.navigation:navigation-*:2.2.0-alpha02 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Precyzyjne linki z parametrami zapytania obsługują teraz zmienioną kolejność parametrów zapytania. Argumenty, które mają wartość domyślną lub mogą mieć wartość null, są teraz opcjonalne podczas dopasowywania precyzyjnych linków. (b/133273839)
- Możesz teraz wywołać funkcję
NavController.getBackStackEntry(), przekazując identyfikator miejsca docelowego lub wykresu nawigacji na stosie wstecznym. Zwrócony obiektNavBackStackEntryzawiera obiektLifecycleOwner,ViewModelStoreOwner(taki sam jak zwracany przezNavController.getViewModelStoreOwner()) iSavedStateRegistryOwner, a także argumenty użyte do uruchomienia tego miejsca docelowego. (aosp/1101691, aosp/1101710)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że dodawanie
NavHostFragmentdoViewPager2kończyło się niepowodzeniem z błędemIllegalArgumentException. (b/133640271) NavInflaternie wywołuje już niepotrzebnie funkcjigetResourceName(), co przyspiesza czas rozszerzania nawet o 40%. (b/139213740)
Wersja 2.2.0-alpha01
7 sierpnia 2019 r.
Publikacja androidx.navigation:navigation-*:2.2.0-alpha01 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
SavedStateViewModelFactoryjest teraz domyślną fabryką używaną podczas korzystania z konstruktoraby navGraphViewModels()lubViewModelProviderz elementemViewModelStoreOwnerzwróconym przezNavController.getViewModelStoreOwner(). (b/135716331)
Zmiany w interfejsie API
- Z Navigation
2.1.0-rc01: usunięto wycofany interfejs APIgetViewModelStore()naNavController, który został wprowadzony w2.1.0-alpha02. (aosp/1091021)
Poprawki błędów
NavHostFragmentkorzysta teraz zFragmentContainerView, co rozwiązuje problemy z kolejnością animacji w osi Z i przekazywaniem wstawek okna do fragmentów. (b/137310379)
Wersja 2.1.0
Wersja 2.1.0
5 września 2019 r.
Publikacja androidx.navigation:navigation-*:2.1.0 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Ważne zmiany od wersji 2.0.0
- Określanie zakresu ViewModels w grafie nawigacji: możesz teraz tworzyć ViewModels, których zakres jest określony na poziomie grafu nawigacji, używając delegata właściwości
by navGraphViewModels()w przypadku użytkowników Kotlin korzystających z bibliotek-ktxlub interfejsu APIgetViewModelStoreOwner()dodanego doNavController. Więcej informacji znajdziesz w artykule Udostępnianie danych związanych z interfejsem między usługami docelowymi. - Miejsca docelowe w oknie dialogowym: możesz teraz tworzyć
<dialog>miejsca docelowe, które będą wyświetlaćDialogFragment, gdynavigatedo nich.NavHostFragmentdomyślnie obsługuje miejsca docelowe w oknie dialogowym. Więcej informacji znajdziesz w artykule Tworzenie miejsca docelowego na podstawie elementu DialogFragment. - Nawigacja za pomocą identyfikatora URI: możesz teraz
navigateza pomocąUri, który korzysta z<deepLink>dodanego do miejsca docelowego, aby do niego nawigować. Więcej informacji znajdziesz w artykule Nawigacja za pomocą URI. - NavHostController: interfejsy API używane specjalnie do tworzenia niestandardowego elementu
NavHostzostały przeniesione do klasyNavHostController, co umożliwia implementacjom łączenie elementuNavControllerz elementamiLifecycleOwner,OnBackPressedDispatcheriViewModelStore.
Wersja 2.1.0-rc01
7 sierpnia 2019 r.
Publikacja androidx.navigation:navigation-*:2.1.0-rc01 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Wycofany interfejs API
getViewModelStore()na platformieNavControllerwprowadzony w2.1.0-alpha02został usunięty. (aosp/1091021)
Wersja 2.1.0-beta02
19 lipca 2019 r.
Publikacja androidx.navigation:*:2.1.0-beta02 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Usunięto niezamierzoną zależność jacoco, która została wprowadzona w wersji
2.1.0-beta01. (b/137782950)
Wersja 2.1.0-beta01
17 lipca 2019 r.
Publikacja androidx.navigation:*:2.1.0-beta01 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
NavigationUIanimuje teraz usuwanie przycisku Wstecz podczas korzystania zsetupWithNavController()na urządzeniuToolbarlubCollapsingToolbarLayout. (b/131403621)
Poprawki błędów
- Rozwiązaliśmy problem z synchronizacją podczas używania wielu elementów NavHostFragment w tym samym kontenerze z
findNavController(). (b/136021571)
Wersja 2.1.0-alpha06
2 lipca 2019 r.
Publikacja androidx.navigation:*:2.1.0-alpha06 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Atrybut
app:navGraphużywany przez NavHostFragment został przeniesiony do artefaktunavigation-runtime. Niestandardowe nawigatory, które można dodać za pomocą kodu XML, powinny używać tego atrybutu, aby zintegrować się z panelem hosta w edytorze nawigacji. (b/133880955)
Zmiany w interfejsie API
- Interfejs API
getViewModelStore()na platformieNavControllerzostał wycofany na rzecz nowej metodygetViewModelStoreOwner(), która zwraca wartośćViewModelStoreOwner. (aosp/987010) - Implementacja miejsc docelowych w pływającym okienku, takich jak miejsca docelowe
<dialog>, została uogólniona w interfejsie znacznikaFloatingWindow, który jest teraz implementowany przez wszystkie miejsca docelowe<dialog>. Metody NavigationUI do interakcji z górnym paskiem aplikacji ignorują teraz miejsca doceloweFloatingWindow. (b/133600763)
Zmiany w działaniu
- Nawigacja prawidłowo synchronizuje swój stan z tym, co jest widoczne na ekranie, gdy używasz miejsca docelowego
<dialog>. W rezultacie podczas nawigacji do miejsca docelowego, które nie jest oknem ani aktywnością, np. do<fragment>, nawigacja automatycznie wyświetla<dialog>miejsca docelowe. (b/134089818)
Poprawki błędów
- Nawigacja pomija teraz animację, która występuje podczas ponownego tworzenia aktywności podczas obsługi precyzyjnego linku, co eliminuje migotanie obrazu. (b/130362979)
- Naprawiliśmy błąd, który powodował, że stos wsteczny nawigacji był niespójny podczas usuwania fragmentu, gdy dodawany był fragment początkowy. (b/133832218)
Wersja 2.1.0-alpha05
5 czerwca 2019 r.
Publikacja androidx.navigation:*:2.1.0-alpha05 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Interfejsy API związane z hostem w
NavControllerzostały zmienione i przeniesione do nowej podklasyNavController, czyliNavHostController. (aosp/966091) - Metoda
NavControllersetHostOnBackPressedDispatcherOwner()została zastąpiona metodąsetOnBackPressedDispatcher()NavHostControlleri wymaga teraz wywołania metodysetLifecycleOwner()przed jej wywołaniem. (aosp/965409) NavHostControllerzawiera teraz metodęenableOnBackPressed(boolean), która zastępuje klasęNavHostOnBackPressedManagerzwracaną wcześniej przezsetHostOnBackPressedDispatcherOwner(). (aosp/966091)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że po przejściu do strony za pomocą URI stos wsteczny był nieprawidłowy. (b/132509387)
- Precyzyjne linki obsługiwane automatycznie przez NavController są teraz wywoływane tylko raz. (b/132754763)
Wersja 2.1.0-alpha04
16 maja 2019 r.
Publikacja androidx.navigation:*:2.1.0-alpha04 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
NavHostFragmentprawidłowo uwzględniaapp:defaultNavHostpodczas przechwytywania zdarzeń przycisku Wstecz systemu, co naprawia regresję w Navigation2.1.0-alpha03. b/132077777DialogFragmentNavigatorprawidłowo obsługuje teraz operacjepopBackStack()inavigateUp(). b/132576764- Rozwiązaliśmy problem z
IllegalStateException: unknown destination during restore, który występował podczas wielokrotnego przechodzenia między zagnieżdżonymi wykresami. b/131733658
Wersja 2.1.0-alpha03
7 maja 2019 r.
Publikacja androidx.navigation:*:2.1.0-alpha03 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Znane problemy
- NavHostFragment nadal przechwytuje systemowy przycisk Wstecz, mimo że używa
app:defaultNavHost="false"b/132077777
Nowe funkcje
- Możesz teraz tworzyć
<dialog>miejsca docelowe, które będą wyświetlaćDialogFragment, gdynavigatedo nich.NavHostFragmentdomyślnie obsługuje miejsca docelowe w oknie dialogowym. b/80267254 - Oprócz wywoływania funkcji
navigateza pomocą identyfikatora zasobu lub instancjiNavDirectionsmożesz teraz poruszać się za pomocą funkcjiUri, która używa dodanego do miejsca docelowego parametru<deepLink>, aby przejść do właściwego miejsca docelowego. b/110412864
Zmiany w działaniu
- Domyślne animacje udostępniane przez NavigationUI zostały przyspieszone z 400 ms do 220 ms, aby pasowały do domyślnej prędkości animacji aktywności i fragmentów. b/130055522
Zmiany w interfejsie API
- Metoda
createFragmentNavigator()klasyNavHostFragmentzostała wycofana, a jej funkcje przeniesiono do nowej metodyonCreateNavController(), aby wyraźniej wskazać, że jest to prawidłowy punkt wejścia do dodawania niestandardowych nawigatorów podczas tworzenia podklasyNavHostFragment. b/122802849 - Do klasy
NavDestinationdodano metodęhasDeepLink(), która umożliwia sprawdzenie, czy dany elementUrimoże być obsługiwany przez to miejsce docelowe lub, w przypadku elementuNavGraph, przez dowolne miejsce docelowe w grafie nawigacji. b/117437718
Poprawki błędów
- Argumenty domyślne są teraz prawidłowo przekazywane do instancji
OnDestinationChangedListener. b/130630686 NavHostFragmentprzechwytuje teraz zdarzenia systemowe Wstecz za pomocąOnBackPressedDispatcher, co rozwiązuje problem z nawigacją warunkową w metodach cyklu życia fragmentu po powrocie do fragmentu. b/111598096- W przypadku Safe Args argument
android:defaultValue=”@null”z nieokreślonymapp:argTypejest teraz prawidłowo interpretowany jako argumentstring. b/129629192
Wersja 2.1.0-alpha02
3 kwietnia 2019 r.
Publikacja androidx.navigation:*:2.1.0-alpha02 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Użytkownicy języka Kotlin mogą teraz tworzyć obiekty ViewModel, które są ograniczone do poziomu wykresu nawigacji, za pomocą delegata właściwości
by navGraphViewModels()lub interfejsu APIgetViewModelStore()dodanego doNavController. b/111614463
Zmiany w interfejsie API
- Możesz teraz dodać
app:targetPackagedo miejsca docelowego<activity>, aby ograniczyć dopasowywanie nazwy pakietu. Obsługujeapp:targetPackage="${applicationId}", aby ograniczyć pakiet do identyfikatora własnej aplikacji. b/110975456
Poprawki błędów
- Wartość
android:namew przypadku miejsc docelowych<activity>nie jest już analizowana w klasie w momencie inflacji, co zapobiega występowaniu wyjątków ClassNotFoundException podczas korzystania z funkcji dynamicznych. b/124538597
Wersja 2.1.0-alpha01
19 marca 2019 r.
To pierwsza wersja alfa nawigacji 2.1.0.
Zmiany zależności
- Nawigacja zależy teraz od
androidx.core:core:1.0.1iandroidx.fragment:fragment:1.1.0-alpha05. Ta wersja usuwa też zależność odandroidx.legacy:legacy-support-core-utils:1.0.0. b/128632612
Zmiany w interfejsie API
- Dodano nową
Navigation.createNavigateOnClickListener(NavDirections)metodę, która jest alternatywą dla tworzenia odbiornika kliknięć za pomocą identyfikatora zasobu i obiektu Bundle. b/127631752 FragmentNavigator.instantiateFragmentzostało wycofane. Domyślna implementacja używa terazFragmentFactorydo tworzenia instancji fragmentów.b/119054429
Poprawki błędów
- Nawigacja nie wysyła już wartości null
Bundle, gdy do miejsca docelowego są dołączone argumenty. Rozwiązuje to problem podczas korzystania zandroid:defaultValue="@null". b/128531879 - Safe Args zależy teraz od KotlinPoet 1.1.0, co rozwiązuje problem z bardzo długimi nazwami pakietów.b/123654948
Wersja 2.0.0
Wersja 2.0.0
14 marca 2019 r.
Nawigacja 2.0.0 jest udostępniana bez zmian w stosunku do wersji 2.0.0-rc02.
Wersja 2.0.0-rc02
6 marca 2019 r.
Biblioteka Navigation w wersji 2.0.0-rc02 zawiera nowe artefakty z identyfikatorem grupy androidx.navigation i zmienia zależności na odpowiedniki AndroidX.
Działanie wersji 2.0.0-rc02 jest identyczne z działaniem wersji 1.0.0-rc02 biblioteki Navigation. Aby zaktualizować wersję 1.0.0-rc02, nie musisz wprowadzać żadnych zmian w kodzie. Wystarczy, że zaktualizujesz zależności, aby były zgodne z nowymi zależnościami.
Aby używać wersji 2.X biblioteki Navigation, projekt musi być zmigrowany do AndroidaX. Stabilna wersja Navigation 1.0 będzie ostatnią, która korzysta z zależności Support Library. Wszystkie przyszłe wersje po 1.0 będą oparte na AndroidX i będą rozwijać stabilną wersję 2.0.
Zależności sprzed AndroidaX
W przypadku wersji biblioteki Navigation sprzed Androida X uwzględnij te zależności:
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
}
W sekcji Safe args dodaj ten classpath w pliku najwyższego poziomu build.gradle.
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
Wersja 1.0.0
Wersja 1.0.0
14 marca 2019 r.
Nawigacja 1.0.0 jest udostępniana bez zmian w stosunku do wersji 1.0.0-rc02.
Wersja 1.0.0-rc02
26 lutego 2019 r.
To druga wersja kandydująca do publikacji stabilnej wersji 1.0.0 biblioteki Navigation. Ta wersja zawiera kilka poprawek błędów.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował ignorowanie wartości
popBackStack(), jeśli wykres główny nie miał identyfikatora. b/126251695 navigateUp()prawidłowo obsługuje teraz powrót do zadania aplikacji po wywołaniu po obsłudze precyzyjnego linku bezFLAG_ACTIVITY_NEW_TASKb/126082008- Rozwiązanie problemu polegającego na tym, że element
ActivityNavigator.applyPopAnimationsToPendingTransitionnie stosował prawidłowej animacji zakończenia wyskakującego okienka.b/126237567 - Kod w języku Kotlin wygenerowany przez Safe Args prawidłowo zmienia znaczenie słów kluczowych w języku Kotlin, takich jak
inifun, w nazwie pakietu powiązanej z klasąR. b/126020455
Wersja 1.0.0-rc01
21 lutego 2019 r.
Jest to wersja kandydująca do publikacji stabilnej wersji 1.0.0 biblioteki Navigation. Ta wersja zawiera jedną poprawkę błędu.
Poprawki błędów
- Rozwiązaliśmy problem podczas korzystania z fragmentów i operacji nawigacji
singleTopb/124294805
Wersja 1.0.0-beta02
12 lutego 2019 r.
Ta wersja zawiera kilka drobnych ulepszeń i ważne poprawki błędów.
Nowe funkcje
- Możesz teraz używać
0jakoandroid:defaultValuew przypadku argumentówreference. b/124248602
Zmiany w działaniu
- Precyzyjne dopasowania precyzyjnych linków mają teraz wyższy priorytet niż precyzyjne linki z dopasowaniami argumentów
.*lub. b/123969518
Poprawki błędów
- Metody
popBackStack()inavigateUpzwracają teraz prawidłową wartośćfalsepodczas usuwania ostatniego miejsca docelowego ze stosu wstecznego. Naprawia to błąd wprowadzony w1.0.0-beta01. b/123933201 - Nawigacja prawidłowo ustawia
ClassLoaderpodczas przywracania zapisanego stanu instancji, co pozwala uniknąć problemów podczas używania klas niestandardowych wNavigatorzapisanym stanie lub w argumentach wysyłanych doNavDestination. b/123893858 - Wygenerowane przez Safe Args klasy NavArgs nie powodują już awarii podczas przywracania argumentu
Parcelable[]z zapisanego stanu instancji. b/123963545 - Safe Args teraz prawidłowo usuwa niepotrzebne wygenerowane klasy Kotlin. b/124120883
Wersja 1.0.0-beta01
4 lutego 2019 r.
To pierwsza wersja beta interfejsu Navigation API. W przyszłości interfejs Navigation API powinien pozostać stabilny do czasu wydania kolejnej wersji, chyba że wystąpi krytyczny problem. Ta wersja zawiera poprawki błędów i zmiany w działaniu.
Zmiany w działaniu
- Nawigacja zapewnia teraz, że wartości domyślne argumentów są traktowane identycznie w czasie działania i za pomocą Safe Args. W związku z tym tylko argumenty z atrybutem
app:argType="reference"mogą mieć wartość domyślną wskazującą inny zasób (np.@color/colorPrimary). Próba użycia domyślnej wartości odniesienia z innym atrybutemapp:argTypespowoduje wyjątek podczas analizowania kodu XML nawigacji. b/123551990 - Safe Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 3.3.0 aosp/888413
- Safe Args zależy teraz od Kotlin 1.3.20 aosp/888414
Poprawki błędów
- Argumenty bezpieczne można teraz stosować w modułach biblioteki i funkcji we wszystkich wersjach wtyczki Androida do obsługi Gradle. b/121304903
- Naprawiono regresję, która powodowała, że pojedyncza operacja
popBackStack()usuwała wszystkie kopie miejsca docelowego z góry stosu wstecznego, a nie tylko jedno miejsce docelowe naraz. b/123552990 - Rozwiązaliśmy problem, który powodował, że stan
FragmentNavigatorulegał desynchronizacji ze stanemNavController, co powodowałoIllegalStateExceptionpodczas próby przywrócenia stosu wstecznego. b/123803044 - Rozwiązaliśmy problem polegający na tym, że strzałka wstecz
NavigationUInie pojawiała się podczas korzystania z ProGuarda z zaciemnianiem. b/123449431 - Kod wygenerowany przez Safe Args prawidłowo obsługuje teraz używanie elementu
app:argTypewskazującego statyczną klasę wewnętrzną w formacie.OuterClass$InnerClass. b/123736741 - Kod Java wygenerowany przez Safe Args prawidłowo obsługuje teraz działania globalne i głęboko zagnieżdżone miejsca docelowe. b/123347762
Wersja 1.0.0-alpha11
23 stycznia 2019 r.
Jest to wersja poprawki 1.0.0-alpha10, która rozwiązuje problem z Safe Args.
Poprawki błędów
- Rozwiązuje problem, który powodował, że Safe Args nie importował klasy Directions powiązanej z czynnościami globalnymi. b/123307342
Wersja 1.0.0-alpha10
23 stycznia 2019 r.
Znane problemy
- Safe Args nie importuje klasy Directions powiązanej z działaniami globalnymi. b/123307342
Ta wersja zawiera zmiany w interfejsie API powodujące niezgodność. Więcej informacji znajdziesz w sekcji Zmiany powodujące niezgodność poniżej.
Nowe funkcje
- Użytkownicy języka Kotlin mogą teraz używać delegata właściwości
by navArgs(), aby leniwie pobierać odwołanie do wygenerowanej przez Safe Args klasyNavArgswActivitylubFragment. b/122603367 - Safe Args umożliwia teraz generowanie kodu w języku Kotlin przez zastosowanie wtyczki
androidx.navigation.safeargs.kotlin. Kod w języku Kotlin jest tworzony specjalnie dla modułów tylko w języku Kotlin. Używa argumentów domyślnych i klas niemutowalnych zamiast wzorca konstruktora, który jest nadal dostępny w poprzedniej wersji wtyczkiandroidx.navigation.safeargs. b/110263087
Zmiany w zachowaniu
- Dopasowane precyzyjne linki są teraz bardziej nastawione na precyzyjny link, który ma najwięcej pasujących argumentów. b/118393029
- Dzwonienie pod numer
setGraph()na urządzeniuNavControllerspowoduje teraz zresetowanie listy wstecznej. b/111450672 - Nieznane precyzyjne linki nie powodują już błędu
IllegalStateException, ale są ignorowane, co rozwiązuje problemy z zagnieżdżonymi lub wieloma tagamiNavHostFragment. b/121340440
Zmiany powodujące niezgodność
- Metoda
NavOptions.applyPopAnimationsToPendingTransition()stosowania animacji wyskakujących do aktywności została przeniesiona doActivityNavigator. b/122413117 - Safe Args nie duplikuje już identycznych klas w przypadku działań bez argumentów. Typ zwracany przez metody bez argumentów w wygenerowanych klasach NavDirections to teraz
NavDirections. b/123233147 - Wygenerowane przez Safe Args klasy Directions nie mają już publicznego konstruktora – należy korzystać tylko z wygenerowanych metod statycznych. b/123031660
- Wygenerowane klasy Safe Args nie mają już publicznego konstruktora – powinny być generowane tylko za pomocą metod statycznych w wygenerowanych klasach Directions. b/122963206
NavDirections - Zwrócony
BundlezNavDirectionsgetArguments()jest teraz oznaczony jako@NonNullzamiast@Nullable. b/123243957
Poprawki błędów
NavDeepLinkBuilderteraz prawidłowo obsługuje wiele jednoczesnychPendingIntentdo tego samego miejsca docelowego, używając argumentów przekazywanych przez Ciebie w celu określenia niepowtarzalności. b/120042732NavControllerprawidłowo obsługuje teraz operacjepopBackStack()podczas korzystania z zagnieżdżonego elementuNavHostFragmentlub innych fragmentów podrzędnych z listą wsteczną.b/122770335NavigationUIteraz prawidłowo ustawia opis treści przycisku Wstecz. b/120395362- Wygenerowane przez Safe Args klasy Directions prawidłowo obsługują teraz działania globalne o tym samym identyfikatorze co działanie w miejscu docelowym. b/122962504
- Wygenerowane klasy Safe Args
NavDirectionsmają teraz prawidłowe równe wartościhashCode(), gdyequals()zwraca wartość „true”. b/123043662 FragmentNavigatorwyświetla teraz lepszy komunikat o błędzie, jeśli spróbujesz wykonać niestandardowąFragmentTransactionsnaNavHostFragment.FragmentManagerZawsze używajgetChildFragmentManager(). b/112927148
Wersja 1.0.0-alpha09
18 grudnia 2018 r.
Ta wersja zawiera zmiany w interfejsie API powodujące niezgodność. Więcej informacji znajdziesz w sekcji Zmiany powodujące niezgodność poniżej.
Zdecydowaliśmy się nie kontynuować prac nad artefaktem android.arch.navigation:navigation-testing. Usługa ta okazała się przydatna w testach wewnętrznych NavController, ale zdecydowanie zalecamy stosowanie alternatywnych strategii testowania, takich jak symulowanie instancji NavController, aby sprawdzić, czy wykonywane są prawidłowe wywołania navigate(). To podejście zostało szczegółowo omówione w prezentacji na temat pojedynczego działania na konferencji AndroidDevSummit 2018. Będziemy pracować nad dodatkową dokumentacją dotyczącą testowania za pomocą biblioteki Navigation.
Nowe funkcje
MenuItemzmenuCategory="secondary"nie będą już usuwać elementów z wstecznej listy, gdy są używane z metodamiNavigationUI. b/120104424AppBarConfigurationumożliwia teraz ustawienie instancji rezerwowejOnNavigateUpListener, która będzie wywoływana, gdynavController.navigateUp()zwrócifalse. b/79993862 b/120690961
Zmiany powodujące niezgodność
- Gdy używasz
<argument>zargType="reference", Navigation nie analizuje już odwołania, tylko podaje sam identyfikator zasobu. b/111736515 onNavDestinationSelected()domyślnie wraca teraz do miejsca docelowego na początku wykresu nawigacji, co sprawia, że jest zgodny z metodamisetup. DodajmenuCategory="secondary"doMenuItem, aby uniknąć wycofywania z listy wstecznej. aosp/852869- Metody
fromBundle()wygenerowanych klasArgsprzyjmują teraz wartość niezerowąBundlezamiast wartości dopuszczającej wartość nullBundle.aosp/845616
Poprawki błędów
- Argumenty są teraz prawidłowo analizowane z precyzyjnych linków jako prawidłowe
argTypezamiast zawsze jako ciągi znaków b/110273284 - Nawigacja prawidłowo eksportuje teraz swoje zasoby publiczne.b/121059552
- Safe Args jest teraz zgodny z wtyczką Androida do obsługi Gradle w wersji 3.4 Canary 4 i nowszej.b/119662045
Wersja 1.0.0-alpha08
6 grudnia 2018 r.
Ta wersja zawiera zmiany w interfejsie API powodujące niezgodność. Więcej informacji znajdziesz w sekcji Zmiany powodujące niezgodność poniżej.
Nowe funkcje
- Etykiety miejsc docelowych używane z metodami
NavigationUIbędą teraz automatycznie zastępować wystąpienia{argName}wandroid:labelprawidłowym argumentem. b/80267266 - Nawigacja zależy teraz od biblioteki pomocy w wersji 28.0.0 b/120293333
Zmiany powodujące niezgodność
- Nazwa
OnNavigatedListenerzostała zmieniona naOnDestinationChangedListenerb/118670572 OnDestinationChangedListenerprzekazuje teraz teżBundleargumentów aosp/837142- Atrybuty
app:clearTaskiapp:launchDocumentoraz powiązane z nimi metody zostały usunięte. Użyjapp:popUpToz głównym węzłem wykresu, aby usunąć wszystkie miejsca docelowe ze stosu wstecznego. b/119628354 ActivityNavigator.Extrasużywa teraz wzorcaBuilderi umożliwia ustawianie dowolnych flagIntent.FLAG_ACTIVITY_aosp/828140- Nazwa
NavController.onHandleDeepLinkzostała zmieniona nahandleDeepLinkaosp/836063 - Wiele klas i metod, które nie są przeznaczone do tworzenia podklas, np.
NavOptions,NavInflater,NavDeepLinkBuilderiAppBarConfiguration, zostało zmienionych nafinal.aosp/835681 - Usunięto nieużywaną metodę
NavHostFragment.setGraph(). aosp/835684 - Nieużywana metoda
NavigationUI.navigateUp(DrawerLayout, NavController)została usunięta. aosp/835684 - Tworzenie fragmentów zostało przeniesione do
FragmentNavigator, co ułatwia delegowanie tworzenia fragmentów doFragmentFactory. b/119054429 - Konstruktor
NavGraphNavigatornie przyjmuje już argumentuContextaosp/835340 - NavigatorProvider jest teraz klasą, a nie interfejsem. Funkcja
NavigatorProviderzwracana przezgetNavigatorProvider()nie zmieniła swojego działania. aosp/830660 NavDestination.navigate()został(a) usunięty(a). Zadzwoń pod numernavigate()na urządzeniuNavigatorzamiast tego. aosp/830663- Znaczne przekształcenie funkcji
Navigator, które eliminuje konieczność używania funkcjiOnNavigatorNavigatedListener, a zamiast tego powoduje, że funkcjanavigatezwracaNavDestination, do którego nastąpiło przejście. - Instancje
Navigatornie mogą już wysyłać wydarzeń typu pop-up doNavController. Rozważ użycieOnBackPressedCallback, aby przechwytywać naciśnięcia przycisku Wstecz i wywoływaćnavController.popBackStack(). aosp/833716
Poprawki błędów
popUpTodziała teraz spójnie, gdy miejscem docelowym jest element<navigation>. b/116831650- Naprawiliśmy kilka błędów, które powodowały
IllegalArgumentExceptionpodczas używania zagnieżdżonych wykresów b/118713731 b/113611083 b/113346925 b/113305559 - Atrybut
dataPatternmiejsc docelowych<activity>będzie teraz wypełniać argumenty z argumentów innych niż ciągi znaków, wywołująctoString().b/120161365
Safe Args
- Safe Args obsługuje obiekty Serializable, w tym wartości Enum. Typy wyliczeniowe
mogą ustawiać wartość domyślną za pomocą literału wyliczeniowego bez nazwy klasy
(np.
app:defaultValue="READ") b/111316353 - Safe Args obsługuje tablice wszystkich obsługiwanych typów b/111487504
- Safe Args ignoruje teraz podfoldery katalogów zasobów b/117893516
- Safe Args dodaje
@Overrideadnotacje w odpowiednich miejscach b/117145301
Wersja 1.0.0-alpha07
29 października 2018 r.
Nowe funkcje
- Nowa klasa AppBarConfiguration umożliwia dostosowywanie miejsc docelowych, które są uznawane za najwyższego poziomu. Szczegółowe informacje znajdziesz w zaktualizowanej dokumentacji. b/117333663
- Teraz możesz przekazywać argumenty do miejsca docelowego na początku wykresu.b/110300470
- Precyzyjne linki obsługują teraz schematy niestandardowe z kropkami, myślnikami i znakami plusa. b/112806402
Zmiany powodujące niezgodność
- Moduł
navigation-testing-ktxzostał włączony do modułunavigation-testing artifacti nie będzie już publikowany. - Artefakt
navigation-testingma teraz zależność od standardowej biblioteki Kotlin. Interfejs API został zmieniony, aby był bardziej zgodny z konwencjami języka Kotlin, ale nadal możesz go używać w przypadku testów napisanych w języku Java. - Wykresy nawigacji zarejestrowane w manifeście metadanych nie są już obsługiwane. b/118355937
- Działań nie można już dołączać do miejsc docelowych <activity>. aosp/785539
Poprawki błędów
- Precyzyjne linki prawidłowo analizują teraz parametry zapytania. b/110057514
- Miejsca docelowe aktywności prawidłowo stosują teraz wszystkie animacje wejść i wyjść. b/117145284
- Naprawiliśmy awarię, która występuje po zmianach konfiguracji podczas korzystania z niestandardowych nawigatorów. b/110763345
Safe Args
- Argumenty bezpieczne mają teraz stałą zależność od wtyczki Androida do obsługi Gradle w wersji 3.2.1. b/113167627
- Można teraz generować wskazówki dojazdu dla klas wewnętrznych. b/117407555
- Rozwiązaliśmy problem z generowaniem wskazówek dojazdu do wykresu <include>. b/116542123
Wersja 1.0.0-alpha06
20 września 2018 r.
Nowe funkcje
- Przejścia elementów wspólnych w przypadku miejsc docelowych fragmentów i aktywności są teraz obsługiwane b/79665225. Więcej informacji znajdziesz w artykule Implementowanie nawigacji za pomocą komponentu architektury nawigacji.
- Wybór elementu w
NavigationViewspowoduje zamknięcie arkusza u dołu ekranu, który go zawiera b/112158843
Zmiany w interfejsie API
- Zmiana powodująca niezgodność: metoda Navigator
navigate()przyjmuje teraz parametrNavigator.Extras. - Metoda
getGraph()w klasie NavController to terazNonNullb/112243286
Poprawki błędów
NavigationUI.setupWithNavController()nie powoduje już wycieku wyświetleń, jeśli jest używany z wyświetleniami z poszczególnych miejsc docelowych b/111961977- Funkcja Navigator
onSaveState()jest teraz wywoływana tylko raz b/112627079
Safe Args
- Klasy wskazówek dojazdu do miejsca docelowego w nawigacji rozszerzają teraz klasę wskazówek dojazdu elementu nadrzędnego, jeśli taka klasa istnieje b/79871405
- Klasy Directions i Args mają teraz przydatną implementację
toString()b/111843389
Wersja 1.0.0-alpha05
10 sierpnia 2018 r.
Poprawki błędów
- Naprawiliśmy błąd, który powodował nieprawidłowe działanie listy wstecznej. b/111907708
- Naprawiono błąd w elemencie
equals()klas Generated Args. b/111450897 - Naprawianie błędu kompilacji w Safe Args. b/109409713
- Poprawianie konwersji identyfikatorów zasobów na nazwy w języku Java b/111602491
- Rozwiązywanie problemów z komunikatami o błędach dotyczącymi możliwości przyjmowania wartości null w pluginie Safe Args.
- Dodaj brakujące adnotacje dotyczące możliwości przyjmowania wartości null.
Wersja 1.0.0-alpha04
19 lipca 2018 r.
Nawigacja 1.0.0-alpha04 i powiązana z nią wtyczka Gradle Safe Args zawierają szereg zmian w interfejsie API, zmian w działaniu i poprawek błędów.
Zmiany w interfejsie API i zachowaniu
- NavHostFragment zawsze ustawia bieżący fragment jako główny fragment nawigacji, dzięki czemu menedżerowie fragmentów podrzędnych są usuwani przed usunięciem zewnętrznego kontrolera NavController b/111345778
Safe Args
- Zmiana powodująca niezgodność:
app:typezostało zmienione naapp:argType, aby uniknąć konfliktów z innymi bibliotekami, takimi jak ConstraintLayout 2.0.0-alpha1 b/111110548 - Komunikaty o błędach z Safe Args są teraz klikalne b/111534438
- Klasy Args potwierdzają teraz, że atrybuty
NonNullnie są w rzeczywistości wartością null b/111451769 - Do wygenerowanych klas NavDirections i Args dodano dodatkowe adnotacje
NonNullb/111455455 b/111455456
Poprawki błędów
- Rozwiązaliśmy problem z systemowym przyciskiem Wstecz po przejściu do fragmentu docelowego za pomocą precyzyjnego linku b/111515685
Wersja 1.0.0-alpha03
12 lipca 2018 r.
Nawigacja 1.0.0-alpha03 i powiązana z nią wtyczka Gradle Safe Args zawierają szereg zmian w interfejsie API, zmian w działaniu i poprawek błędów.
Zmiany w interfejsie API i zachowaniu
- Dodano metodę NavigationUI.setupWithNavController dla paska narzędzi b/109868820
- Dodano metodę NavigationUI.setupWithNavController dla CollapsingToolbarLayout b/110887183
- Metoda popBackStack() zwraca teraz wartość „fałsz”, gdy stos wsteczny jest pusty lub gdy podany identyfikator miejsca docelowego nie znajduje się w stosie wstecznym b/110893637
- FragmentNavigator ignoruje teraz operacje nawigacji po zapisaniu stanu przez FragmentManager, co pozwala uniknąć wyjątków „Can not perform this action after onSaveInstanceState” b/110987825
Safe Args
- Zmiana powodująca niezgodność: znaki alfanumeryczne w nazwach działań i argumentów zostaną zastąpione w nazwach odpowiednich metod NavDirections przez zapis camel case.
- Na przykład
DemoController.indexzmieni się wsetDemoControllerIndexb/79995048 - Na przykład
action_show_settingszmieni się wactionShowSettingsb/79642240
- Na przykład
- Zmiana powodująca niezgodność: argumenty są teraz domyślnie uznawane za niepuste. Aby zezwolić na wartości null w argumentach typu string i parcelable, dodaj
app:nullable="true"b/79642307 - Możesz teraz używać
app:type="long"z wartościami domyślnymi w formacie „123L” b/79563966 - Argumenty Parcelable są teraz obsługiwane przy użyciu pełnej i jednoznacznej nazwy klasy dla
app:type. Jedyną obsługiwaną wartością domyślną jest"@null"b/79563966 - Klasy argumentów implementują teraz interfejsy
equals()ihashCode(). b/79642246 - Wtyczkę Safe Args można teraz stosować w projektach bibliotek b/80036553
- Wtyczkę Safe Args można teraz stosować w projektach funkcji b/110011752
Poprawki błędów
- Rozwiązanie problemów z nawigacją podczas metod cyklu życia fragmentu b/109916080
- Rozwiązaliśmy problemy występujące podczas wielokrotnego przechodzenia przez zagnieżdżone wykresy b/110178671
- Rozwiązaliśmy problemy podczas korzystania z
setPopUpToz pierwszym miejscem docelowym na wykresie b/109909461 - Rozwiązaliśmy problem polegający na tym, że wszystkie wartości
app:defaultValuebyły przekazywane jako ciągi tekstowe b/110710788 - Narzędzie aapt2 dołączone do wtyczki Androida do obsługi Gradle w wersji 3.2 Beta 01 dodaje teraz reguły zachowywania dla każdego atrybutu
android:namew plikach XML nawigacji b/79874119 - Usunięto wyciek pamięci podczas zastępowania domyślnego elementu FragmentNavigator b/110900142
Wersja 1.0.0-alpha02
7 czerwca 2018 r.
Zmiany w zachowaniu
FragmentNavigatorkorzysta teraz z usługisetReorderingAllowed(true). b/109826220Nawigacja dekoduje teraz argumenty z adresów URL precyzyjnych linków. b/79982454
Poprawki błędów
Naprawiono błąd
IllegalStateExceptionpodczas wywoływania funkcji navigate z metod cyklu życia fragmentu. b/79632233Nawigacja zależy teraz od biblioteki pomocy w wersji 27.1.1, co eliminuje migotanie podczas korzystania z animacji. b/80160903
Naprawiono
IllegalArgumentExceptionpodczas używania domyślnego hosta nawigacji z wartością „true” jako fragmentu podrzędnego. b/79656847Naprawiono
StackOverflowErrorpodczas korzystania z klasy NavDeepLinkBuilder. b/109653065Naprawiliśmy
IllegalArgumentExceptionpodczas powrotu do zagnieżdżonego wykresu. b/80453447Rozwiązaliśmy problem z nakładającymi się fragmentami podczas używania
launchSingleTop. b/79407969Biblioteka Navigation tworzy teraz prawidłowy syntetyczny stos wsteczny dla zagnieżdżonych wykresów. b/79734195
Biblioteka NavigationUI będzie teraz wyróżniać prawidłowy element, gdy jako
MenuItemużywany jest zagnieżdżony wykres. b/109675998
Zmiany w interfejsie API
Atrybut
clearTaskdla działań i powiązany z nim interfejs API wNavOptionszostały wycofane. b/80338878Atrybut
launchDocumentdla działań i powiązane z nim interfejsy API wNavOptionszostały wycofane. b/109806636
Wersja 1.0.0-alpha01
8 maja 2018 r.
Nawigacja to platforma do tworzenia nawigacji w aplikacji. Ta pierwsza wersja to 1.0.0-alpha01.