Nawigacja
Ostatnia aktualizacja | Wersja stabilna | Wersja kandydująca | Wersja Beta | Wersja alfa |
---|---|---|---|---|
11 grudnia 2024 r. | 2.8.5 | - | - | 2.9.0-alpha04 |
Deklarowanie zależności
Aby dodać zależność od Navigation, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Maven firmy Google.
Dodaj zależności dla artefaktów, których potrzebujesz, 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.8.4" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.8.4" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Safe Args
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.8.4" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.4" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
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ń Kotlina 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 zauważysz 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 z gwiazdką.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 2.9
Wersja 2.9.0-alpha04
11 grudnia 2024 r.
androidx.navigation:navigation-*:2.9.0-alpha04
został zwolniony. Wersja 2.9.0-alpha04 zawiera te komity.
Nowe funkcje
- interfejsy API typu bezpiecznego, które wcześniej były dostępne tylko za pomocą metod
reified
, np.composable<YourScreen>
mają teraz wersje nieweryfikowane, 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).
Tabela poniżej zawiera 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
- Specyficzna dla Kotlina nakładka
NavGraph.setStartDestination
w celu zapewnienia bezpieczeństwa typów jest ukryta w źródłach kodu Java. (Ic640c, b/364634035)
Poprawki błędów
- W Nawigacji
2.8.5
: rozwiązaliśmy problem, który powodował wyrzucanie wyjątku w funkcjiNavHost
w ramach funkcjiPredictiveBackHandler
, jeśli podręczna lista została zredukowana do 1 elementu, a w tym samym momencie został wywołany systemowy przycisk Wstecz. (I1a429, b/375343407) - W sekcji Nawigacja
2.8.5
: podczas aktualizowaniastartDestination
wykresuNavDestination
NullPointerException
. (I99421, b/361560785)
Wersja 2.9.0-alpha03
13 listopada 2024 r.
androidx.navigation:navigation-*:2.9.0-alpha03
został zwolniony. Wersja 2.9.0-alpha03 zawiera te komity.
Nowe funkcje
- Bezpieczeństwo typu nawigacji obsługuje teraz klasy wartości jako trasy lub jako typ argumentu trasy. (I9344a, b/374347483)
Poprawki błędów
- Naprawiono błąd
ConcurrentModificationException
, który mógł występować, gdy elementLifecycleObserver
dołączony do elementuNavBackStackEntry
powodował zmianę w stosie, gdy element gospodarzLifecycleOwner
, np. element Activity lub Fragment zawierający, zmieniał stan cyklu życia. (Ia9494)
Wersja 2.9.0-alpha02
30 października 2024 r.
androidx.navigation:navigation-*:2.9.0-alpha02
został zwolniony. Wersja 2.9.0-alpha02 zawiera te komity.
Darowizna zewnętrzna
- Nowa wspólna metoda
NavController.handleDeepLink(request: NavDeepLinkRequest)
. Dziękuję, Konstantin Tskhovrebov. (I3e228)
Wersja 2.9.0-alpha01
16 października 2024 r.
androidx.navigation:navigation-*:2.9.0-alpha01
został zwolniony. Wersja 2.9.0-alpha01 zawiera te komity.
Nowe funkcje
- Niestandardowe nawigacje mogą teraz oznaczać swoje miejsca docelowe jako miejsca korzystające z interfejsu
SupportingPane
, co wskazujeNavController
, że te miejsca docelowe będą wyświetlane obok innych miejsc docelowych. Dzięki temu interfejsowi możesz na przykładRESUMED
jednocześnie. (Id5559) - W sekcji Nawigacja
2.8.3
: dodaliśmy nowe kontrole lint dla modułównavigation-common
,navigation-runtime
inavigation-compose
, aby ułatwić identyfikację ścieżek bezpiecznych pod względem typu, które nie są prawidłowo opatrzone adnotacjami za pomocą@Serializable
. Ta weryfikacja jest stosowana do wszystkich funkcji rozszerzeniaNavGraphBuilder
iNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - W sekcji Nawigacja
2.8.3
: dodaliśmy nowe mechanizmy sprawdzania błędów w modułachnavigation-common
,navigation-runtime
inavigation-compose
, aby ułatwić identyfikację ścieżek bezpiecznych pod względem typu z argumentami Enum, które nie są prawidłowo opatrzone adnotacjami@Keep
. Ta weryfikacja jest stosowana do wszystkich funkcji rozszerzeniaNavGraphBuilder
iNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
Zmiany w zachowaniu
- Próba użycia
NavController
, który został wcześniejDESTROYED
, spowoduje teraz błądIllegalStateException
. (I520da, b/369616172)
Poprawki błędów
- Zaktualizuj wyjątek „Nie znaleziono klasy Enum”, aby sugerować użycie adnotacji
@Keep
na wypadek, gdyby klasa Enum została usunięta w skompresowanych kompilacjach. (I90e79, b/358137294)
Znane problemy
- Wystąpił problem z nowymi regułami lint dodanymi w
Navigation 2.8.*
, które powodują błądObsolete custom lint check
podczas próby uruchomienia lint za pomocą wtyczki Android Gradle w wersji 8.4 lub nowszej (b/368070326, b/371463741).
Wersja 2.8
Wersja 2.8.5
11 grudnia 2024 r.
androidx.navigation:navigation-*:2.8.5
został zwolniony. Wersja 2.8.5 zawiera te komitowane zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że funkcja
NavHost
mogła wyrzucić wyjątek w ramach funkcjiPredictiveBackHandler
, jeśli stos odwoływania się do poprzedniego elementu został zredukowany do 1 elementu, a w tym samym interwale został wywołany system odwoływania się do poprzedniego elementu. (I1a429, b/375343407) - Naprawiono błąd
NavDestination
NullPointerException
podczas aktualizowaniastartDestination
wykresu. (I99421, b/361560785) - Rozwiązaliśmy problem, który powodował nieoczekiwaną animację skalowania podczas korzystania z kompozycji nawigacji i wywołania funkcji Navigate w tym samym kadrze, w którym kończy się bieżąca animacja. (I26cb1, b/353294030)
- Naprawiono błąd
ConcurrentModificationException
, który mógł występować, gdy elementLifecycleObserver
dołączony do elementuNavBackStackEntry
powodował zmianę w stosie, gdy element gospodarzLifecycleOwner
, np. element Activity lub Fragment zawierający, zmieniał stan cyklu życia. (Ia9494)
Wersja 2.8.4
13 listopada 2024 r.
androidx.navigation:navigation-*:2.8.4
został zwolniony. Wersja 2.8.4 zawiera te komisy.
Nowe funkcje
- W Nawigacja
2.9.0-alpha03
: zabezpieczenia typu nawigacji obsługują teraz klasę wartości jako trasę lub jako typ argumentu trasy (I9344a, b/374347483)
Poprawki błędów
- W sekcji Nawigacja
2.9.0-alpha01
: próba użyciaNavController
, który został wcześniejDESTROYED
, spowodujeIllegalStateException
. (I520da, b/369616172)
Wersja 2.8.3
16 października 2024 r.
androidx.navigation:navigation-*:2.8.3
został zwolniony. Wersja 2.8.3 zawiera te komitowane zmiany.
Nowe funkcje
- Dodano nowe kontrole lint dla modułów
navigation-common
,navigation-runtime
inavigation-compose
, aby ułatwić identyfikację ścieżek bezpiecznych pod względem typu, które nie są prawidłowo opatrzone adnotacjami@Serializable
. Ta weryfikacja jest stosowana do wszystkich funkcji rozszerzeńNavGraphBuilder
iNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816) - Dodano nowe mechanizmy kontroli lint dla modułów
navigation-common
,navigation-runtime
inavigation-compose
, aby ułatwić identyfikowanie ścieżek bezpiecznych pod względem typu z argumentami Enum, które nie są prawidłowo opatrzone adnotacjami@Keep
. Ta weryfikacja jest stosowana do wszystkich funkcji rozszerzeniaNavGraphBuilder
iNavDeepLinkBuilder
. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)
Poprawki błędów
- Rozwiązano problem, który powodował, że nowe reguły lint dodane w
Navigation 2.8.*
wywoływały błądObsolete custom lint check
podczas próby uruchomienia lint za pomocą wtyczki Android 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 do sprawdzania kodu w ramach funkcji Navigation lint zgłasza błąd „Obsolete custom lint check”. (b/371926651)
Wersja 2.8.2
2 października 2024 r.
androidx.navigation:navigation-*:2.8.2
został zwolniony. Wersja 2.8.2 zawiera te komitowane zmiany.
Nowe funkcje
- Bezpieczeństwo typu nawigacji obsługuje teraz klasy serializacji, które obejmują
Double
,Double?
,DoubleArray
,DoubleArray?
,List<Double>
iList<Double>?
bez konieczności stosowania niestandardowychNavType
. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)
Poprawki błędów
- Ulepszono komunikat o błędzie, który pojawia się, gdy nawigacja nie może zmapować argumentu trasy na
NavType
. Nowy komunikat o błędzie będzie zawierać nazwę argumentu, pełną nazwę argumentu i pełną nazwę trasy. (Id8416, b/346264232)
Wersja 2.8.1
18 września 2024 r.
androidx.navigation:navigation-*:2.8.1
został zwolniony. Wersja 2.8.1 zawiera te komity.
Nowe funkcje
- Dodano nową regułę lint, aby zapewnić użycie funkcji
popBackStack
, która przyjmuje typ klasy z klasyfikowaniem, podczas próbypopBackStack
za pomocą interfejsów API bezpiecznych pod względem typów. (Ief161, b/358095343)
Poprawki błędów
- Nawigacja wymaga teraz, aby trasa przekazana do parametru
NavGraph
zawierała wartości wszystkich wymaganych argumentów, w tym argumentów, które nie mogą być puste i nie mają wartości domyślnej.startDestination
(I18e74, b/362594265) - Argumenty bezpieczne nawigacji obsługują teraz niepustą postać ciągu znaków, dzięki czemu wartości „null” będą analizowane i przechowywane w pakiecie w postaci domyślnej. Jest to zmiana w porównaniu z obecnym działaniem, w którym wartości „null” były analizowane w postaci obiektu null. Ta zmiana dotyczy tylko typów String, które nie mogą być puste. Ciągi znaków z możliwością przyjęcia wartości null pozostają bez zmian. (I08b4a, b/348936238)
- Do
NavDestination
nie można już dodawać precyzyjnych linków, z wyjątkiem precyzyjnych linków dodanych do miejsca docelowego. Oznacza to też, że możesz nawigować do miejsca docelowego tylko za pomocą przeciążenia funkcji navigate, która przyjmuje ciąg znaków jako trasę. Poprawia to lukę, która umożliwiała tworzenie precyzyjnych linków do potencjalnie chronionych miejsc docelowych. (Ie30e6)
Aktualizacja zależności
- Argumenty bezpiecznej nawigacji są teraz zależne od wersji Kotlin 1.9.24, a nie Kotlin 2.X, co pozwala deweloperom nie aktualizować aplikacji. (a4129a)
- Element Nawigacja Compose zależy teraz od elementu Compose
1.7.2
.
Wersja 2.8.0
4 września 2024 r.
androidx.navigation:navigation-*:2.8.0
został zwolniony. Wersja 2.8.0 zawiera te komity.
Ważne zmiany od wersji 2.7.0
Nawigacja w Kotlinie – typy danych w DSL
- Nawigacja zapewnia teraz bezpieczne typowanie w przypadku Kotlin DSL (używanego przez Navigation Compose) za pomocą Kotlin Serialization, aby umożliwić definiowanie miejsc docelowych w grafach nawigacji za pomocą obiektów i klas danych bezpiecznych pod względem typu:
// 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 na temat funkcji tworzenia kodu i nawigacji w TypeScript.
Nawigacja Utwórz Wstecz z predykcją
- Komponent Navigation Compose obsługuje teraz funkcję przewidywanego powrotu do aplikacji za pomocą nowych interfejsów API
SeekableTransitionState
z komponentu compose-animation. Dzięki temu możesz użyć gestu wstecz, aby wyświetlić poprzedni cel z niestandardowym przejściem, zanim zdecydujesz się na przeprowadzenie transakcji za pomocą gestu potwierdzenia lub anulowania.
Komponent nawigacji Fragment
- Dodaliśmy nowy artefakt
navigation-fragment-compose
, który zawiera alternatywęComposableNavHostFragment
dlaNavHostFragment
, która umożliwia dodawanie miejsc docelowych do plików XML nawigacji. Każde miejsce docelowecomposable
musi być wyrażone jako metoda najwyższego poziomu bez argumentów@Composable
, której pełna nazwa jest używana jako atrybutandroid:name
w każdym miejscu docelowym. Gdy przejdziesz do jednego z tych miejsc docelowych, zostanie utworzony fragment zawierający treści kompozytowe.
// 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
- Składnik Nawigacja zależy teraz od składnika Compose w wersji 1.7.0.
- Nawigacja udostępnia teraz nową klasę
CollectionNavType<T>
, która jest podklasąNavType<T>
i służy do argumentów opartych na kolekcji, takich jak listy, tablice i mapy. Wszystkie domyślne tabliceNavType
(IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
iStringArrayType
) dziedziczą teraz z tej nowej klasy. NavType
obsługuje teraz wbudowane listy typu Int, String, Boolean, Float i Long.
Wersja 2.8.0-rc01
21 sierpnia 2024 r.
androidx.navigation:navigation-*:2.8.0-rc01
został zwolniony. Wersja 2.8.0-rc01 zawiera te komisy.
Poprawki błędów
- Naprawiono błąd nawigacji podczas przekazywania klas Enum najwyższego poziomu jako argumentów bezpiecznych pod względem typu. (I0ba76, b/358137294)
- Biblioteka Navigation w wersji 2.8 działa teraz prawidłowo z pakietem SDK 34 i nie przejdzie na wersję 35, dopóki nie zostanie wydana wersja 2.9 wraz z resztą bibliotek AndroidX. (b/358798728)
Wersja 2.8.0-beta07
7 sierpnia 2024 r.
androidx.navigation:navigation-*:2.8.0-beta07
został zwolniony. Wersja 2.8.0-beta07 zawiera te komity.
Znane problemy
- Z powodu problemu b/358137294 domyślnie obsługiwane są tylko zaimplementowane w innej klasie enumy. W następnej wersji obsługiwane będą enumeracje najwyższego poziomu.
Poprawki błędów
- Podczas nawigacji do powielonych lub udostępnionych miejsc docelowych nawigacja będzie priorytetowo traktować najbliższe pasujące miejsce docelowe od bieżącej lokalizacji na wykresie. (Ic89a4, b/352006850)
- Nawigacja w safe_args ma teraz nową wartość
NavType.EnumType
. Oznacza to, że typyEnum
nie wymagają już niestandardowychNavType
. Pamiętaj, żeEnum
SerialName
musi być pełną i jednoznaczną nazwą domyślną. (I66d22, b/346475493) - Nawigacja w safe_args obsługuje teraz wbudowane typy argumentów, które mogą być puste, m.in.
Int?
,Long?
,Float?
,Boolean?
iEnum<*>?
. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237) - Funkcja
NavGraph
w elementachstartDestination
będzie teraz używać domyślnych wartości argumentów, jeśli ścieżkastartDestination
przekazana do funkcjiNavGraph
jest dokładnie równa ścieżcestartDestination.route
. (I13762, b/354046047)
Wersja 2.8.0-beta06
24 lipca 2024 r.
androidx.navigation:navigation-*:2.8.0-beta06
został zwolniony. Wersja 2.8.0-beta06 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który polegał na tym, że mechanizmy kontroli lint
WrongStartDestinationType
nie sprawdzały obiektów Companion w przekazanych typach klas, co powodowało, że mechanizmy te nie wykrywały błędów. (I92b09)
Wersja 2.8.0-beta05
10 lipca 2024 r.
androidx.navigation:navigation-*:2.8.0-beta05
został zwolniony. Wersja 2.8.0-beta05 zawiera te komity.
Poprawki błędów
- Rozwiązanie problemu z awarią nawigacji
singleTop
, gdy zagnieżdżoneNavGraphs
mają ten samstartDestination
. (I17b94, b/294408596)
Wersja 2.8.0-beta04
26 czerwca 2024 r.
androidx.navigation:navigation-*:2.8.0-beta04
został zwolniony. Wersja 2.8.0-beta04 zawiera te komity.
Poprawki błędów
- Nawigacja obsługuje teraz puste ciągi znaków w argumentach ścieżki. (Ic5dbd, b/339481310)
- Poprawić 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 testowy
SavedStateHandleFactory
można teraz używać w testach innych niż testy na Androida, ale wymaga to obsługi przez Robolectric parsowania argumentów za pomocą pakietów. (I76cdc, b/340966212) - Rozwiązaliśmy problem z zawieszaniem się aplikacji podczas przywracania stanu po wznowieniu aplikacji po zakończeniu procesu przy użyciu nawigacji zabezpieczającej przed błędami typu w Compose. (Ia8f38, b/341801005)
- Rozwiązaliśmy problem w sekcji Nawigacja w komponencie, który powodował, że po anulowaniu przewidywanego gestu wstecz
NavBackStackEntry
, do którego użytkownik wraca, nigdy nie wraca do stanu cyklu życiaRESUMED
. Dzięki temu animacja powrotu do miejsca docelowego będzie prawidłowo odtwarzana zamiast wskakiwać na miejsce po użyciu funkcji przeciągnięcia. (I97a0c, b/346608857) - Gdy używasz przewidywanego przycisku Wstecz w ramach funkcji Compose w nawigacji, wyświetlane będzie teraz właściwe porządkowanie w głąb, co zapewni prawidłową animację nadchodzącego miejsca docelowego. (I2077b, b/345993681)
Wersja 2.8.0-beta03
12 czerwca 2024 r.
androidx.navigation:navigation-*:2.8.0-beta03
został zwolniony. Wersja 2.8.0-beta03 zawiera te komity.
Zmiany w interfejsie API
CollectionNavType
ma nową abstrakcyjną metodęemptyCollection()
. Zastąp to, aby obsłużyć pustą kolekcję przekazaną jako argument. (Ie4d84, b/341723133)
Poprawki błędów
- Dodaliśmy dokumentację dotyczącą funkcji
NavType.serializeAsValue
iserializeAsValues
, aby podkreślić, że końcowe dane wyjściowe powinny być zakodowane za pomocą Uri. (Ida6bd, b/344943214) - Naprawiono błąd powodujący awarię podczas wywoływania funkcji
toRoute<T>
z pustym argumentemCollectionNavType
. Gdy przechodzisz do elementu nullCollectionNavType
, argument 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.
androidx.navigation:navigation-*:2.8.0-beta02
został zwolniony. Wersja 2.8.0-beta02 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem z zawieszaniem się funkcji
ClassCastException
podczas używania argumentuNavBackStackEntry.toRoute
z nieobowiązkową wartością niestandardowąNavType
. (I1c29b, b/342239473) - Rozwiązano problemy z przywracaniem stanu nawigacji w grupie elementów poprzednich, które wystąpiły podczas próby przywrócenia elementu z grupy elementów poprzednich, do którego nie można dotrzeć za pomocą identyfikatora z bieżącego miejsca docelowego. Trasy są obsługiwane przez identyfikatory, więc na te miejsca docelowe, które zostały utworzone za pomocą tras, również to miało wpływ. Ta aktualizacja rozwiązuje też problem z zawieszaniem się aplikacji spowodowany wywołaniem funkcji
clearBackStack()
, która miała ten sam podstawowy problem. (I423c3, b/339908057)
Wersja 2.8.0-beta01
14 maja 2024 r.
androidx.navigation:navigation-*:2.8.0-beta01
został zwolniony. Wersja 2.8.0-beta01 zawiera te komity.
Zmiany w interfejsie API
- Funkcja
SavedStateHandle.toRoute()
przyjmuje teraz parametrtypeMap
dla niestandardowych typów argumentów. (Ie39fb, b/339026523) - Dodano testowy interfejs API do
navigation-testing
, aby utworzyćSavedStateHandle
z obiektu Kotlin Serializable. (Id4867, b/339080702)
Poprawki błędów
- Dodano brakujące dokumenty dotyczące parametrów funkcji DSL w języku Kotlin w przypadku nawigacji. (I26a36)
Wersja 2.8.0-alpha08
1 maja 2024 r.
androidx.navigation:navigation-*:2.8.0-alpha08
został zwolniony. Wersja 2.8.0-alpha08 zawiera te komity.
Safe Args w komponencie Nawigacja i tworzenie wiadomości
- Zakończyły się prace nad obsługą bezpieczeństwa typów w czasie kompilacji w przypadku Navigation Compose i użytkowników Nawigacji w Kotlin DSL na podstawie serializacji Kotlin. 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 Kotlina, aby umożliwić definiowanie miejsc docelowych w grafu nawigacji za pomocą obiektów bezpiecznych pod względem typu 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 na temat funkcji Type Safety w komponencie tworzenia wiadomości.
Nowe funkcje
- Element
navigation-fragment-compose
zawiera teraz kompozycjęLocalFragment
, która jest lokalna dla metod kompozytowych w komponencieComposableFragment
. (If35e5) NavType
obsługuje teraz wbudowane listy typu Int, String, Boolean, Float i Long. (I4b6dd, Ia914c, b/188693139)
Wersja 2.8.0-alpha07
17 kwietnia 2024 r.
androidx.navigation:navigation-*:2.8.0-alpha07
został zwolniony. Wersja 2.8.0-alpha07 zawiera te komity.
Nowe funkcje
Dodaje nowy element
navigation-fragment-compose
, który zawiera alternatywęComposableNavHostFragment
dlaNavHostFragment
, która umożliwia dodawanie miejsc docelowychcomposable
do plików XML nawigacji. Każde miejsce docelowecomposable
musi być wyrażone jako metoda najwyższego poziomu@Composable
bez argumentów, której pełna nazwa jest używana jako atrybutandroid:name
w każdym miejscu docelowym. Gdy przejdziesz do jednego z tych miejsc docelowych, zostanie utworzony fragment zawierający treści kompozytowe. (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
- W Navigation Compose kontynuujemy obsługę Safe Args za pomocą podejścia opartego na serializacji Kotlin. Te interfejsy API są nieukończone i oznaczone adnotacją
ExperimentalSafeArgsApi
. Ta adnotacja zostanie usunięta, gdy w przyszłej wersji zostanie ukończona cała interfejsu API. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I9b73c, I554db, Ib3aba, Ia668d, b/188693139)
Wersja 2.8.0-alpha06
3 kwietnia 2024 r.
androidx.navigation:navigation-*:2.8.0-alpha06
został zwolniony. Wersja 2.8.0-alpha06 zawiera te komity.
Zmiany w interfejsie API
- Rozpoczęliśmy pracę nad obsługą Safe Args w Navigation Compose przy użyciu podejścia opartego na serializacji Kotlina. Te interfejsy API są nieukończone i oznaczone adnotacją
ExperimentalSafeArgsApi
. Ta adnotacja zostanie usunięta, gdy w przyszłej wersji zostanie ukończona cała interfejsu API. (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
NavHost
używa teraz domyślnego argumentu contentAlignmentAlignment.TopStart
. Dzięki temu wartość ta jest zgodna z wartością domyślną dlaAnimatedContent
i rozwiązuje niektóre przypadki nieoczekiwanego skalowania podczas przejścia do środka. (I09e72, b/330111602)- Gdy podczas korzystania z funkcji tworzenia kodu w ramach nawigacji wykonasz gest przewidującego cofnięcia,
NavHost
prawidłowo dokończy niestandardowy przewrót zamiast natychmiastowego zakończenia. (I99017, b/327292110)
Wersja 2.8.0-alpha05
20 marca 2024 r.
androidx.navigation:navigation-*:2.8.0-alpha05
został zwolniony. Wersja 2.8.0-alpha05 zawiera te komity.
Nowe funkcje
- Teraz możesz przekazywać argumenty do funkcji
NavGraph
w metodziestartDestination
bezpośrednio w metodziestartDestination
, nie korzystając z metodydefaultValue
. Dotyczy to również zagnieżdżonych elementówNavGraph
startDestinations
. (I0e0b5, b/109505019, b/188693139)
Zmiany w interfejsie API
- Dodano nową abstrakcyjną klasę
CollectionNavType<T>
, która jest podklasą klasyNavType<T>
i służy do argumentów opartych na zbiorze, takich jak listy, tablice i mapy. (Ic6d63, b/188693139) - Wszystkie domyślne tablice
NavType
(IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
iStringArrayType
) mają teraz typCollectionNavType
(Idcf79, b/188693139) NavType
udostępnia teraz nowy otwarty interfejs APIvalueEquals
, który określa, czy 2 wartości tego samego typu są sobie równe. (I6cb97, b/327229511)
Poprawki błędów
- Parametry zapytań w precyzyjnych linkach mogą teraz zawierać wartości w postaci nawiasów klamrowych wokół nazwy argumentu (np.
{argName}
) jako prawidłowe wartości dla parametruNavTypes
opartego na ciągu znaków. Rozwiązaliśmy problem, w którym taka wartość była uznawana za nieprawidłową (lub za brak wartości) we wszystkich typach. (I18302, b/327274038) - Funkcje
NavController
, które obsługują trasy, takie jaknavigate
lubpopBackStack
, mogą teraz prawidłowo dopasowywać trasy wypełnione argumentami tablicyNavTypes
. (Iea805, b/327229511)
Wersja 2.8.0-alpha04
6 marca 2024 roku
androidx.navigation:navigation-*:2.8.0-alpha04
został zwolniony. Wersja 2.8.0-alpha04 zawiera te komity.
Nowe funkcje
- Teraz możesz określać
SizeTranform
dla przejść w komponencie Navigation Compose, definiując je jako część inicjalizacji funkcjicomposable
lubnavigation
. (I91062, b/296912651)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że przy użyciu przycisku Wstecz systemu bez gestów w komponencie Nawigacja w komponencie Edytuj nie wyświetlał się prawidłowo.
NavHost
(Iceeae, b/325998468)
Wersja 2.8.0-alpha03
21 lutego 2024 r.
androidx.navigation:navigation-*:2.8.0-alpha03
został zwolniony. Wersja 2.8.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
NavBackStackEntry.savedStateHandle
jest teraz oznaczony jako@MainThread
, ponieważ używa kodu, który musi być umieszczony w głównym wątku. (Ibb988, b/299523245)
Poprawki błędów
- Rozwiązaliśmy problem w komponencie Nawigacja, który powodował, że
NavGraph
ViewModels byłyDESTROYED
zbyt wcześnie, ponieważ powiązany wpisViewModel
nie był częścią zapisanego stanu. (Ib6bb7, b/317581849)
Aktualizacja zależności
- Składnik Nawigacja zależy teraz od Compose 1.7.0-alpha03.
Wersja 2.8.0-alpha02
7 lutego 2024 r.
androidx.navigation:navigation-*:2.8.0-alpha02
został zwolniony. Wersja 2.8.0-alpha02 zawiera te commity.
Nowe funkcje
- Komponent Navigation Compose obsługuje teraz funkcję przewidywania powrotu do aplikacji za pomocą nowych interfejsów API
SeekableTransitionState
z komponentu compose-animation. Dzięki temu możesz użyć gestu wstecz, aby wyświetlić poprzedni cel z niestandardowym przejściem, zanim zdecydujesz się na przeprowadzenie transakcji za pomocą gestu ukończenia lub anulowania. (I8b8e9)
Wersja 2.8.0-alpha01
24 stycznia 2024 r.
androidx.navigation:navigation-*:2.8.0-alpha01
został zwolniony. Wersja 2.8.0-alpha01 zawiera te commity.
Poprawki błędów
- Naprawiono wyciek danych
BackStackState
, który powodował, że wielokrotne wywołaniasaveState
w miejscu docelowym powodowały 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 wypełniania tytułu pasków aplikacji za pomocą pomocników
NavigationUI
. (#636, b/316676794)
Aktualizacja zależności
- Funkcja Nawigacja w Compose zależy teraz od Compose
1.7.0-alpha01
, która rozwiązuje problem powodujący nieoczekiwane animacje skalowania. (b/297258205)
Darowizna zewnętrzna
- Dziękujemy SimonMarquis za rozwiązanie problemu z wyświetlaniem argumentów innych niż ciągi znaków podczas używania pomocników
NavigationUI
do wypełniania tytułu pasków aplikacji.
Wersja 2.7.7
Wersja 2.7.7
7 lutego 2024 r.
androidx.navigation:navigation-*:2.7.7
został zwolniony. Wersja 2.7.7 zawiera te zatwierdzenia.
Poprawki błędów
- Zmiana z Nawigacja
2.8.0-alpha01
: rozwiązano problem z wyciekiemBackStackState
, który powodował, że wywołaniasaveState()
do jednejNavBackStackEntry
powodowały zapisanie wielu stanów, ale można było przywrócić tylko pierwszy zapisany stan. (I598b0, b/309559751) - Zmiana z Nawigacja
2.8.0-alpha01
: rozwiązaliśmy problem polegający na tym, że argumenty inne niż ciąg znaków nie były prawidłowo wyświetlane podczas wypełniania tytułów pasków aplikacji za pomocą pomocnikówNavigationUI
. (#636, b/316676794)
Darowizna zewnętrzna
- Dziękujemy SimonMarquis za rozwiązanie problemu z wyświetlaniem argumentów innych niż ciągi znaków podczas używania pomocników
NavigationUI
do wypełniania tytułu pasków aplikacji.
Wersja 2.7.6
Wersja 2.7.6
13 grudnia 2023 r.
androidx.navigation:navigation-*:2.7.6
został zwolniony. Wersja 2.7.6 zawiera te commity.
Poprawki błędów
- Funkcja
NavGraph
equals()
uwzględnia teraz prawidłowo węzły z innego wykresu, a nie tylko z wywołującego. Dzięki temu grafy z węzłami o różnych identyfikatorach nie będą już uważane za równe (I401cb, b/311414915).
Wersja 2.7.5
Wersja 2.7.5
1 listopada 2023 roku
androidx.navigation:navigation-*:2.7.5
został zwolniony. Wersja 2.7.5 zawiera te commity.
Usprawnienia dotyczące wydajności
- Znacznie zwiększyliśmy wydajność (zarówno pod względem czasu, jak i liczby alokacji) porównywania 2 wykresów. Oznacza to, że wywołania takie jak
setGraph
, które porównują wewnętrznie nowy graf z dotychczasowym, są znacznie szybsze i prowadzą do mniejszej liczby pomijanych klatek. Dziękujemy Michał Z za dokładną analizę, która doprowadziła do tej poprawy. (I6ad62) NavHost
będzie teraz renderować miejsce docelowe startu w pierwszym przejeździe kompozycją zamiast czekać na drugi przejazd, aby odczytać zaktualizowany stan. (I439a7, b/304852206)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że zwracany był stos wywołań, jeśli wywołano
setGraph
więcej niż raz z tym samym grafem tylko wtedy, gdy w grafie znajdowało się miejsce docelowe zawierające działanie łączące 2 miejsca docelowe. (Ieaed7) - Dialogi, które zostały wyświetlone i zamknięte w krótkim odstępie czasu, 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, wartość
ViewModel
zostanie prawidłowo wyczyszczona, jeślisaveState
ma wartość false. (Idf242, b/298164648) - Rozwiązano problem, który powodował, że
NavController
mogło obsługiwać ten sam link głęboki więcej niż raz, jeśli stos z poprzednimi wywołaniami był całkowicie pusty przed zmianą konfiguracji lub wywołaniemsetGraph
tylko wtedy, gdy przychodzący zamiar miał ustawioną flagęFLAG_ACTIVITY_NEW_TASK
. (I73c7f)
Aktualizacje zależności
- Nawigacja z fragmentami zależy teraz od Fragmentu 1.6.2. Rozwiązaliśmy problem, który powodował, że
ViewModel
wystąpienia zagnieżdżonych fragmentów nie były usuwane podczas wywoływaniaclearBackStack
.
Wersja 2.7.4
Wersja 2.7.4
4 października 2023 roku
androidx.navigation:navigation-*:2.7.4
został zwolniony. Wersja 2.7.4 zawiera te commity.
Nowe funkcje
- Dodano obsługę
popUpTo
, aby umożliwić korzystanie z tras z argumentami, co pozwala na powrót do konkretnego wpisu, który używa tych samych argumentów, co obsługa wpopBackStack
. (I731f4, b/299255572)
Poprawki błędów
- Rozwiązanie problemu, w którym przerwanie nawigacji przez inną nawigację z użyciem
popUpTo
powodowało awarięFragmentNavigator
. (I3c848, b/301887045) - Rozwiązaliśmy problem, który powodował, że naciśnięcie przycisku Wstecz w systemie nie powodowało prawidłowej aktualizacji
currentDestination
, aby pasował do wyświetlanego fragmentu. (Id0d6c, b/289877514) - Cykl życia
DialogFragment
będzie teraz prawidłowo przechodzić do stanuRESUMED
, gdy dialog nad nim zostanie zamknięty. (I88f0d, b/301811387)
Wersja 2.7.3
Wersja 2.7.3
20 września 2023 r.
androidx.navigation:navigation-*:2.7.3
został zwolniony. Wersja 2.7.3 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem w Nawigacji z użyciem fragmentów, który powodował, że lista
visibleEntries
zawierała nieprawidłowe wpisy. (I5caa9, b/288520638) - Rozwiązaliśmy problem, który powodował, że do celu typu okienko wyłaniające (np.
Dialogs
,Bottomsheets
itp.) nigdy nie docierał wywołanie zwrotne cyklu życiaRESUMED
. (I3b866, b/287505132)
Wersja 2.7.2
Wersja 2.7.2
6 września 2023 r.
androidx.navigation:navigation-*:2.7.2
został zwolniony. Wersja 2.7.2 zawiera te commity.
Poprawki błędów
- Nawigacja zależy teraz od cyklu życia
2.6.2
, co rozwiązuje problem interakcji międzyrememberSaveable
aNavHost
w komponencie Navigation Compose, który uniemożliwiał prawidłowe przywracanie stanurememberSaveable
miejsc docelowych i wszystkich instancjiSavedStateHandle
należących doViewModel
po zakończeniu i powtórnym utworzeniu procesu. (b/298059596, b/289436035) - Rozwiązaliśmy problem polegający na tym, że podczas wyświetlania wielu okien dialogowych w edytowaniu nawigacji okna te były częściowo zasłonięte (np. nie były to okna na samej górze) i miały stan cyklu życia
CREATED
, a nieSTARTED
. (aosp/2728520, b/289257213) - Rozwiązano problem z jednoczesnym wyświetlaniem wielu okienek w komponencie Navigation. Zamknięcie okna na wierzchu powodowało, że nowe okno na wierzchu pozostawało w stanie
STARTED
cyklu życia zamiast przejść do stanuRESUMED
. (aosp/2629401, b/286371387) - Argumenty Bezpieczne parametry nawigacji nie tworzą już natychmiast instancji zadania, jeśli nie jest ono wykonywane. (I0e385, b/260322841)
Aktualizacja zależności
- Komponent Navigation Compose zależy teraz od wersji 1.5.1.
Wersja 2.7.1
Wersja 2.7.1
23 sierpnia 2023 r.
androidx.navigation:navigation-*:2.7.1
został zwolniony. Wersja 2.7.1 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problemy w Nawigacji w Compose, które powodowały wyświetlanie błędu podczas próby uzyskania dostępu do
Scaffold
w ramachLifecycle.State.DESTROYED
ViewModel
. (I1dc11, b/268422136)
Wersja 2.7.0
Wersja 2.7.0
9 sierpnia 2023 r.
androidx.navigation:navigation-*:2.7.0
został zwolniony. Wersja 2.7.0 zawiera te commity.
Ważne zmiany od wersji 2.6.0
Animacje z Accompanist
Teraz, gdy AnimatedContent
jest stabilny, udało nam się przenieść kod z animacji nawigacji towarzyszącej z powrotem do funkcji tworzenia nawigacji.
Oznacza to, że wszystkie funkcje obsługi ustawień przejść niestandardowych, które były dostępne w AnimatedNavHost
, są obsługiwane bezpośrednio w NavHost
.
Nie wprowadzimy żadnych dodatkowych zmian w animacji nawigacji w Accompanist. Wkrótce wycofamy ją oficjalnie, a wraz z nią instrukcje przejścia na kompozycję nawigacji. Będą one odwrotnością instrukcji migracji i nie będą wymagać żadnych innych zmian w interfejsie API, jeśli korzystasz już z najnowszej wersji alpha Accompanist (0.31.2-alpha
). (b/197140101)
Poprawki błędów
- Komponent NavHost w komponencie Navigation Compose teraz 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 tego, czy
1.5.0
jest w komponencie1.1.0
.
Wersja 2.7.0-rc01
26 lipca 2023 r.
androidx.navigation:navigation-*:2.7.0-rc01
został zwolniony. Wersja 2.7.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że funkcje lambda
EnterTransition
iExitTransition
utworzone w ramach funkcjiNavHost
mogły pozostawać w pamięci nawet po usunięciu funkcjiNavHost
z kompozycji. (I893d0)
Znane problemy
- W wersji 2.6.x aplikacji Nawigacja występuje problem, który może powodować
IllegalArgumentException
podczas nawigowania za pomocą funkcji popUpTo. Wyjątku można uniknąć, zmieniając strukturę grafu w sposób podobny do opisanego tutaj. (b/287133013)
Wersja 2.7.0-beta02
28 czerwca 2023 r.
androidx.navigation:navigation-*:2.7.0-beta02
został zwolniony. Wersja 2.7.0-beta02 zawiera te commity.
Poprawki błędów
- W komponencie tworzenia trasy jest teraz prawidłowa kolejność z-dla niestandardowych przejść, które korzystają z opcji
popUpTo
(/Ib1c3a, b/285153947).
Wersja 2.7.0-beta01
7 czerwca 2023 r.
androidx.navigation:navigation-*:2.7.0-beta01
został zwolniony. Wersja 2.7.0-beta01 zawiera te commity.
Poprawki błędów
NavHost
w sekcji Nawigacja w komponowaniu teraz prawidłowo przechwytuje wywołania systemowe nawet po tym, jakActivity
zostałSTOPPED
iRESUMED
. (Icb6de, b/279118447)
Wersja 2.7.0-alpha01
24 maja 2023 r.
androidx.navigation:navigation-*:2.7.0-alpha01
został zwolniony. Wersja 2.7.0-alpha01 zawiera te commity.
Animacje z Accompanist
Teraz, gdy AnimatedContent
jest stabilny, udało nam się przenieść kod z animacji nawigacji towarzyszącej z powrotem do funkcji tworzenia nawigacji.
Oznacza to, że wszystkie funkcje obsługiwane w AnimatedNavHost
w przypadku ustawiania przejść niestandardowych są obsługiwane bezpośrednio w NavHost
.
Nie wprowadzimy żadnych dodatkowych zmian w animacji nawigacji w Accompanist. Wkrótce wycofamy ją oficjalnie, a wraz z nią instrukcje przejścia na kompozycję nawigacji. Będą one odwrotnością instrukcji migracji i nie będą wymagać żadnych innych zmian w interfejsie API, jeśli korzystasz już z najnowszej wersji alpha Accompanist (0.31.2-alpha
). (b/197140101)
Poprawki błędów
- W sekcji Nawigacja
2.6.0-rc02
: rozwiązaliśmy problem z nawigacją w fragmentach, w którym nawigowanie za pomocąpopUpTo
i usuwanie fragmentu ze stosu bez ponownego tworzenia jego widoku powodowało, że system przestawał działać. (Ieb8d4, b/281726455)
Aktualizacje zależności
- Nawigacja zależy teraz od okna tworzenia wiadomości
1.5.0-beta01
.
Wersja 2.6.0
Wersja 2.6.0
7 czerwca 2023 r.
androidx.navigation:navigation-*:2.6.0
został zwolniony. Wersja 2.6.0 zawiera te commity.
Ważne zmiany w nawigacji od wersji 2.5.0
- Argumenty
NavBackStackEntry
.arguments
iarguments
przekazane doOnDestinationChangedListener
są teraz tylko kopią niezmiennych argumentów utworzonych podczas przechodzenia do miejsca docelowego. Oznacza to, że wszelkie zmiany wprowadzone w tych pakietach nie będą widoczne podczas kolejnych dostępów do instancjiarguments
lub innych instancjiOnDestinationChangedListener
. NavDeepLink
obsługuje teraz wartości domyślne dla tablic, co umożliwia obsługę powtarzających się parametrów zapytania, które będą mapowane na typ tablicy argumentu. FunkcjaNavType
zawiera teraz też domyślną metodę, którą można zastąpić, aby połączyć 2 przeanalizowane wartości.- Niestandardowe podklasy klasy
NavType
mogą teraz zastąpić metodęserializeAsValue
, aby za pomocą metodyparseValue
zastosować serializację wartości do typu String. Dzięki temu zarówno serializacja, jak i deserializacja (za pomocą metodyparseValue
) są całkowicie zaszyte w klasieNavType
.StringType
zastępuje teraz tę metodę, aby wywołać metodęUri.encode
w danym obiekcieString
.
Ważne zmiany w komponencie Nawigacja od wersji 2.5.0
- Podczas wyświetlania podglądu kompozytowalnej aplikacji za pomocą
NavHost
domyślnie będzie wyświetlanastartDestination
grafu nawigacyjnego. NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
iNavController.clearBackStack(route)
mają teraz wszystkie ścieżki pomocy z częściowo lub całkowicie wypełnionymi argumentami. Pamiętaj, że argumenty muszą być identyczne z argumentami wpisu.- Próba utworzenia pustego
NavDeepLink
za pomocąnavDeepLink
w Kotlinie DSL spowoduje wyświetlenie ostrzeżenia lint, które wskazuje, że precyzyjny link musi zawierać prawidłowy uri, działanie lub typ MIME.
Ważne zmiany w fragmentach nawigacji od wersji 2.5.0
NavHostFragment
nie przechwytuje już samego przycisku Wstecz. Umożliwia to podrzędnejFragmentManager
obsługę wywołania systemowego. Dzięki temu Fragment1.7.0-alpha01
i nowsze mogą wyświetlać na urządzeniach z Androidem U animację przewidywanego przycisku Wstecz w aplikacji.- Gdy korzystasz z funkcji nawigacji z fragmentami, próba ręcznego wykonania wywołania
FragmentTransaction
, które dodaje fragment do stosuFragmentManager
, spowoduje wyjątekIllegalArgumentException
. Fragmenty należy zawsze dodawać za pomocą interfejsu APInavigate()
. - Jeśli w atributach
app:data
iapp:dataPattern
w elemencie aktywności w pliku XML nawigacji używasz dokładnego ciągu znaków${applicationId}
jako placeholdera, podczas napełniania placeholder zostanie automatycznie wypełniony wartościąpackageName
kontekstu. - Podczas nawigacji i wyświetlania
NavBackStackEntries
FragmentNavigator
używa teraz interfejsów API przejścia. Oznacza to, żeNavBackStackEntry
Lifecycle
będzie teraz czekać na zakończenie efektów specjalnych fragmentu wejścia i wyjścia, zanim przejdzie do ostatniegoLifecycle.State
. - Podczas nawigacji i wywoływania
NavBackStackEntries
interfejsDialogFragmentNavigator
korzysta teraz z interfejsów API przejścia. Oznacza to, żeNavBackStackEntry
Lifecycle
będzie teraz czekać, ażDialogFragment
Lifecycle
przejdzie doDESTROYED
, zanim sama przejdzie doDESTROYED
. NavHostFragment
umożliwia teraz odzyskiwanieNavController
, gdy tylkoNavHostFragment
zostanie dołączony doFragmentManager
, a nie dopiero poonCreate()
.- Obsługa modułów funkcji dynamicznych przez nawigację zależy teraz od szczegółowej biblioteki Play Feature Delivery.
- Argumenty Bezpieczne dane nawigacji są teraz zależne od wtyczki Androida do obsługi Gradle w wersji 7.3.0. Oznacza to, że jest teraz zgodna tylko z wersjami 7.3.0 i nowszymi.
Ważne zmiany w NavigationUI od wersji 2.5.0
- Gdy przekazujesz identyfikator grafu nawigacyjnego do funkcji
AppBarConfiguration
(np. za pomocąMenu
), funkcjaNavigationUI
będzie teraz traktować jako miejsce docelowe najwyższego poziomu tylko miejsce docelowe początkowe tego grafu nawigacyjnego, a nie błędnie wszystkie miejsca docelowe w grafu. Sposób przekazywania identyfikatora pojedynczego miejsca docelowego nie uległ zmianie. Ta sama funkcja jest dostępna w Twoim kodzie za pomocą nowej funkcjiisTopLevelDestination
w komponencieAppBarConfiguration
. - Integracje
setupWithNavController
wNavigationUI
, które korzystają z górnego paska aplikacji, będą teraz analizować wartościR.string
argumentówReferenceType
znalezionych wandroid:label
, aby przekształcać je w wartości ciągu znaków zamiast generować automatycznie liczby całkowite zasobu. NavigationUI
udostępnia teraz logi, gdy nie uda się przejść do wybranegoMenuItem
.
Wersja 2.6.0-rc02
24 maja 2023 r.
androidx.navigation:navigation-*:2.6.0-rc02
został zwolniony. Wersja 2.6.0-rc02 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem z nawigacją w fragmentach, w którym nawigowanie za pomocą
popUpTo
i usuwanie fragmentu ze stosu bez ponownego tworzenia jego widoku powodowało, że system przestał działać. (Ieb8d4, b/281726455)
Wersja 2.6.0-rc01
10 maja 2023 r.
androidx.navigation:navigation-*:2.6.0-rc01
został zwolniony. Wersja 2.6.0-rc01 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem w Nawigacji z fragmentami, w którym usunięcie fragmentu za pomocą funkcji navigate z wartością
popUpTo
w obsługach cyklu życiaonResume()
powodowało błądIllegalStateException
. (I21884, b/279644470)
Wersja 2.6.0-beta01
19 kwietnia 2023 r.
androidx.navigation:navigation-*:2.6.0-beta01
został zwolniony. Wersja 2.6.0-beta01 zawiera te commity.
Nowe funkcje
- Usługa
NavBackStackEntry
udostępnia teraz niestandardową implementacjętoString
. (Iff00b)
Poprawki błędów
- Gdy korzystasz z funkcji nawigacji z fragmentami, próba ręcznego wykonania wywołania
FragmentTransaction
, które dodaje fragment do stosuFragmentManager
, spowoduje wyjątekIllegalArgumentException
. Fragmenty należy zawsze dodawać za pomocą interfejsu APInavigate()
. (I6d38e) - Gdy w tym samym interwale występuje instrukcja
navigate
, która dodaje element, i instrukcjapopBackStack
, która go usuwa, wynikowy element na szczycie stosu będzie konsekwentnie zwracany do instrukcjiRESUMED
Lifecycle.State
. (Id8067, b/276495952)
Wersja 2.6.0-alpha09
5 kwietnia 2023 r.
androidx.navigation:navigation-*:2.6.0-alpha09
został zwolniony. Wersja 2.6.0-alpha09 zawiera te commity.
Poprawki błędów
- Naprawiono sprawdzanie nieprawidłowej trasy. Jeśli
NavDestination
zawiera niepustą wartośćNavArgument
, trasa tego miejsca docelowego musi zawierać zmienne o tych samych nazwach co niepusty argumentNavArgument
. (Ic62bf, b/274697949) - Nawigacja za pomocą precyzyjnych linków na podstawie
Action/MimeType
zakończy się teraz niepowodzeniem, jeśli operacja nawigacji nie zawiera wartości niepustowejNavArgument
wymaganej przezNavDestination
, z którymAction/MimeType
się zgadza. (Ibfa17, b/271777424) - Gdy
NavController
ustawia graf z tymi samymi trasami i miejscami docelowymi co poprzedni graf, teraz prawidłowo zastępuje bieżące węzły grafu i miejsca docelowe w poprzednim łańcuchu za pomocą nowych wystąpień. Rozwiązanie to problem z zawieszaniem się aplikacji podczas używania funkcjionLaunchSingleTop
bez zapisywania stanu w komponencie Navigation Compose. Rozwiązaliśmy też błąd, który powodował nieprawidłowe przechodzenie do miejsc docelowych powiązanych z głównym wykresem i nieprawidłowy stos. (I5bc58, b/275258161, b/275407804)
Wersja 2.6.0-alpha08
22 marca 2023 r.
androidx.navigation:navigation-*:2.6.0-alpha08
został zwolniony. Wersja 2.6.0-alpha08 zawiera te commity.
Nowe funkcje
NavHostFragment
umożliwia teraz odzyskiwanieNavController
, gdy tylkoNavHostFragment
zostanie dołączony doFragmentManager
, a nie dopiero poonCreate()
. (Ic6382, b/220186282)
Poprawki błędów
- Rozwiązaliśmy błąd
NullPointerException
występujący podczas wyjmowania zagnieżdżonego grafu, który zawiera argument niepusty. (6b3581, b/249988437) - Gdy użyjesz przycisku Wstecz po przejściu do innej strony za pomocą
popUpTo
, stanNavController
zmieni się na odpowiedni. (I3a8ec, b/270447657) FragmentNavigator
będzie teraz prawidłowo wyjmować wpisy, gdy stos będzie wyjmowany przez system lubpopBackStack()
, oraz czy transakcja używa efektów dla fragmentu. (I81bdf)- Dodawanie fragmentów do
FragmentNavigator
FragmentManager
bez korzystania z nawigacji nie powoduje już 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.
androidx.navigation:navigation-*:2.6.0-alpha07
został zwolniony. Wersja 2.6.0-alpha07 zawiera te commity.
Poprawki błędów
- Wersje interfejsu API
getBackStackEntry
,popBackStack
iclearBackStack
, które przyjmują trasy, obsługują teraz wzorce tras z argumentami typu nullable i parametrami zapytania typu nullable (I22294, b/269302500) - Rozwiązaliśmy problem polegający na tym, że wywołanie funkcji
clearBackStack()
w funkcjiNavController
nie powoduje wyczyszczenia zapisanego stanu w menedżerze fragmentów powiązanym z oczyszczonym stosem wstecz. (Ic1cce, b/271190202) - Naprawiono regresję w wersji 2.6.0-alpha06, która powodowała podświetlenie nieprawidłowego elementu
MenuItem
w elementachBottomNavigationView
podczas przechodzenia między kartami za pomocą systemu wstecz. (I634f6, b/270447657) - Rozwiązaliśmy regresję w wersji 2.6.0-alpha06, która powodowała, że
NavBackStackEntry
nie były przenoszone do stanu RESUMED (wznowiony) podczas używaniaAnimation
. (Ib3589, b/269646882)
Wersja 2.6.0-alpha06
22 lutego 2023 roku
androidx.navigation:navigation-*:2.6.0-alpha06
został zwolniony. Wersja 2.6.0-alpha06 zawiera te commity.
Nowe funkcje
- Podczas wyświetlania podglądu kompozytowalnej aplikacji za pomocą
NavHost
domyślnie będzie wyświetlanastartDestination
grafu nawigacyjnego. (I2b89f)
Zmiany w interfejsie API
- Wszystkie przeciążenia
NavController
navigate
są teraz opatrzone adnotacją@MainThread
, aby mieć pewność, że są wywoływane w wątku głównym. (I2c0b0, b/263427111)
Poprawki błędów
- Naprawiono awarię podczas próby nawigacji przy użyciu nawigacji dynamicznych fragmentów. (I3ee29, b/268360479)
- Usunięto błąd, który powodował, że przechodzenie do innego fragmentu za pomocą przycisku wstecz systemu nie aktualizowało dolnego paska do wybranego elementu (If559f, b/269044426).
Znane problemy
- Podczas korzystania z nawigacji z fragmentami cykl życia
NavBackStackEntry
nie dociera doRESUMED
, gdy używasz interfejsów APIAnimation
. (b/269646882) - Jeśli używasz nawigacji z fragmentami i przemieszczasz się za pomocą
BottomNavigation
, a potem próbujesz przywrócić stos wstecz z większą liczbą wpisów,BottomMenuItem
nie zostanie prawidłowo zaktualizowany. (b/270447657) - Gdy używasz nawigacji z fragmentami, po przywróceniu stanu
NavBackStackEntry
Lifecycle
nie dostajeDESTROYED
, gdy jego fragment toDESTROYED
. (b/270610768)
Wersja 2.6.0-alpha05
8 lutego 2023 r.
androidx.navigation:navigation-*:2.6.0-alpha05
został zwolniony. Wersja 2.6.0-alpha05 zawiera te commity.
Nowe funkcje
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
iNavController.clearBackStack(route)
mają teraz wszystkie ścieżki pomocy z częściowo lub całkowicie wypełnionymi argumentami. Pamiętaj, że argumenty muszą być identyczne z argumentami wpisu. (Iebd28, Ic678c, I3b37b, b/257514373)- Podczas nawigacji i wyświetlania
NavBackStackEntries
FragmentNavigator
używa teraz interfejsów API przejścia. Oznacza to, żeNavBackStackEntry
Lifecycle
będzie teraz czekać na zakończenie efektów specjalnych fragmentu wejścia i wyjścia, zanim przejdzie do ostatniegoLifecycle.State
. (I3cb19, b/238686802) - Podczas nawigacji i wyświetlania
NavBackStackEntries
DialogFragmentNavigator
używa teraz interfejsów API przejścia. Oznacza to, żeNavBackStackEntry
Lifecycle
będzie teraz czekać, ażDialogFragment
Lifecycle
przejdzie doDESTROYED
, zanim sama przejdzie doDESTROYED
. (I53ee5, b/261213893)
Zmiany w interfejsie API
NavigatorState
udostępnia teraz interfejs APIprepareForTransition
, aby umożliwićNavigator
przenoszenieNavBackStackEntries
do pośrednichLifecycle.State
. (I42c21, b/238686802)- Teraz możesz uzyskać dostęp do warstwy poprzedniej powiązanej z usługą
NavGraphNavigator
lubComposeNavigator
za pomocą usługibackstack
.ComposeNavigator
udostępnia teraz też wywołanie zwrotneonTransitionComplete()
, aby oznaczyćNavBackStackEntry
, które wykonało operację nawigacji lubpopBackStack
, jako zakończone. (I02062, I718db, b/257519195)
Poprawki błędów
- Stan nawigatora będzie teraz nieaktywny, gdy używasz interfejsów API
push/popWithTransition
, a element jest już obsługiwany. (Iadbfa, b/261213893) - Gdy używasz
launchSingleTop
z zagnieżdżonymNavGraph
, wszystkie miejsca docelowe od oryginalnego miejsca docelowego do jegostartDestination
zostaną prawidłowo dodane do góry stosu. (Id4bea, b/253256629) - Nawigacja będzie teraz prawidłowo zastępować instancję
DialogFragment
podczas przechodzenia do tego samego miejsca docelowego z flagąlaunchSingleTop
ustawioną na wartość true. (I45b5a, b/149572817) - Argumenty Navigation SafeArgs nie będą już powodować błędu kompilacji, jeśli mają dokładnie 19 znaków. (Id60bc, b/257110095)
Wersja 2.6.0-alpha04
9 listopada 2022 r.
androidx.navigation:navigation-*:2.6.0-alpha04
został zwolniony. Wersja 2.6.0-alpha04 zawiera te commity.
Nowe funkcje
- Niestandardowe podklasy klasy
NavType
mogą teraz zastąpić metodęserializeAsValue
, aby za pomocą metodyparseValue
zastosować serializację wartości do typu String. Dzięki temu zarówno serializacja, jak i deserializacja (za pomocą metodyparseValue
) są całkowicie zaszyte w klasieNavType
.StringType
zastępuje teraz tę metodę, aby wywołać metodęUri.encode
w danym obiekcieString
. (Ie5213, b/247637434) NavigationUI
udostępnia teraz logi, gdy nie może nawigować za pomocą wybranegoMenuItem
. (I2af5a, b/247730357)
Poprawki błędów
- Precyzyjne linki nawigacyjne są teraz analizowane z minimalnym wysiłkiem zamiast podczas inicjalizacji grafu, co może poprawić wydajność aplikacji podczas uruchamiania. (Iab0ab)
- Rozwiązanie problemu z awarią spowodowaną przewijaniem w górę po przejściu do miejsca docelowego za pomocą precyzyjnego linku z argumentami domyślnymi o wartości null. (I51c24, b/243183636)
Aktualizacja zależności
- Obsługa modułów funkcji dynamicznych przez nawigację zależy teraz od szczegółowej biblioteki Play Feature Delivery. (Ib4ddc)
- Argumenty Bezpieczne dane nawigacji są teraz zależne 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 (I47e49).
Wersja 2.6.0-alpha03
24 października 2022 r.
androidx.navigation:navigation-*:2.6.0-alpha03
został zwolniony. Wersja 2.6.0-alpha03 zawiera te commity.
Poprawki błędów
- W sekcji Nawigacja
2.5.3
:NavHost
nie będzie już powodować błęduNoSuchElementException
, jeśli nie ma dostępnych miejsc docelowych dlaCrossfade
. Teraz po prostu ją pominie. (Ieb46e, b/253299416) - W sekcji Nawigacja
2.5.3
: rozwiązaliśmy problem, który powodował, że zapisany stan tworzenia wiadomości (np. użycierememberSaveable
) nie był zapominany i usuwany, gdy miejsce docelowe było usuwane z grupy. (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.
androidx.navigation:navigation-*:2.6.0-alpha02
został zwolniony. Wersja 2.6.0-alpha02 zawiera te commity.
Zmiany w zachowaniu
- Gdy przekazujesz identyfikator grafu nawigacyjnego do funkcji
AppBarConfiguration
(np. za pomocą funkcjiMenu
), funkcjaNavigationUI
będzie teraz traktować jako miejsce docelowe najwyższego poziomu tylko miejsce docelowe początkowe tego grafu nawigacyjnego, a nie będzie błędnie oznaczać jako miejsce docelowe najwyższego poziomu każdego miejsca docelowego w grafu. Sposób przekazywania identyfikatora pojedynczego miejsca docelowego nie uległ zmianie. Ta sama funkcja jest dostępna w Twoim kodzie za pomocą nowej funkcjiisTopLevelDestination
w komponencieAppBarConfiguration
. (Ie936e, b/238496771)
Poprawki błędów
- Komponent
navigation:navigation-fragment
zależy teraz od wersji fragmentu1.5.2
. (I00ba4) - Wybrany element menu nie będzie już aktualizowany podczas przechodzenia do miejsca docelowego
FloatingWindow
, takiego jak okno dialogowe. (I4cde8, b/240308330)
Wersja 2.6.0-alpha01
7 września 2022 roku
androidx.navigation:navigation-*:2.6.0-alpha01
został zwolniony. Wersja 2.6.0-alpha01 zawiera te commity.
Nowe funkcje
- Integracje
setupWithNavController
wNavigationUI
, które korzystają z górnego paska aplikacji, będą teraz analizować wartościR.string
argumentówReferenceType
znalezionych wandroid:label
, aby przekształcać je w wartości ciągu znaków zamiast generować automatycznie liczby całkowite zasobu. (I5f803, b/167959935) NavDeepLink
obsługuje teraz wartości domyślne dla tablic, co umożliwia obsługę powtarzających się parametrów zapytania, które będą mapowane na typ tablicy argumentu. FunkcjaNavType
zawiera teraz też domyślną metodę, którą można zastąpić, aby połączyć 2 przeanalizowane wartości. (Id68c3, b/209977108)- Jeśli w atributach
app:data
iapp:dataPattern
w elemencie aktywności w pliku XML nawigacji używasz dokładnego ciągu znaków${applicationId}
jako placeholdera, podczas napełniania placeholder zostanie automatycznie wypełniony wartościąpackageName
kontekstu. (Iaabde, b/234223561) - Próba utworzenia pustego
NavDeepLink
za pomocąnavDeepLink
w Kotlinie DSL spowoduje wyświetlenie ostrzeżenia lint, które wskazuje, że precyzyjny link musi zawierać prawidłowy uri, działanie lub typ MIME. (I08d2f, b/154038883)
Zmiany w interfejsie API
- Dodano nową funkcję rozszerzenia
NavDestination
, która umożliwia analizowanie etykiet dynamicznych z argumentami w formieandroid:label="{arg}"
i przekształcanie ich w typ String. Obsługuje argumentyReferenceType
, analizując wartościR.string
na ciągi znaków. (I07d89, b/236269380)
Zmiany w zachowaniu
- Argumenty
arguments
iarguments
obiektu NavBackStackEntry przekazane do obiektuOnDestinationChangedListener
są teraz tylko kopią niezmiennych argumentów utworzonych podczas przechodzenia do miejsca docelowego. Oznacza to, że wszelkie zmiany wprowadzone w tych pakietach nie będą widoczne podczas kolejnych dostępów do instancjiarguments
lub innych instancjiOnDestinationChangedListener
. (I676f5)
Poprawki błędów
- W sekcji Nawigacja
2.5.2
: dynamiczna nawigacja teraz prawidłowo próbuje zainstalować miejsca docelowe aktywności z innych modułów przed przejściem do nich. (Ia2c16, b/240292838) - W Nawigacji
2.5.2
: podczas przechodzenia do tego samego miejsca docelowego i ustawienia flagilaunchSingleTop
na „prawda” nawigacja będzie teraz prawidłowo zastępować wystąpienie Fragmentu. (I5a2f1, b/237374580) - Z Nawigacji
2.5.2
: rozwiązano problemIllegalStateException
spowodowany przejściem do podwójnie zagnieżdżonego grafu, który ma element nadrzędny wspólny z nowym elementem docelowym. (I9f7cb, b/243778589)
Wersja 2.5
Wersja 2.5.3
24 października 2022 r.
androidx.navigation:navigation-*:2.5.3
został zwolniony. Wersja 2.5.3 zawiera te commity.
Poprawki błędów
NavHost
nie będzie już powodowaćNoSuchElementException
, gdy nie będzie dostępnego miejsca docelowego dlaCrossfade
. Teraz po prostu ją pominie. (Ieb46e, b/253299416)- Rozwiązaliśmy problem, który powodował, że zapisany stan tworzenia (np. użycie
rememberSaveable
) nie był zapominany i usuwany, gdy miejsce docelowe było usuwane z zasobów. (I64949)
Wersja 2.5.2
7 września 2022 roku
androidx.navigation:navigation-*:2.5.2
został zwolniony. Wersja 2.5.2 zawiera te zatwierdzenia.
Poprawki błędów
- Dynamiczna nawigacja teraz prawidłowo próbuje zainstalować miejsca docelowe aktywności z innych modułów przed przejściem do nich. (Ia2c16, b/240292838)
- Nawigacja będzie teraz prawidłowo zastępować wystąpienie fragmentu podczas przechodzenia do tego samego miejsca docelowego i ustawiania flagi
launchSingleTop
na wartość true. (I5a2f1, b/237374580) - Rozwiązano błąd
IllegalStateException
spowodowany przejściem do podwójnie zagnieżdżonego grafu, który ma element nadrzędny wspólny z nowym elementem docelowym. (I9f7cb, b/243778589)
Aktualizacja zależności
- Element nawigacji
2.5.2
zależy teraz od elementu Fragment1.5.2
. (aosp/2178734)
Wersja 2.5.1
27 lipca 2022 roku
androidx.navigation:navigation-*:2.5.1
został zwolniony. Wersja 2.5.1 zawiera te zatwierdzenia.
Poprawki błędów
Navigation Safe Args
nie będzie już powodować ostrzeżeń o wycofaniu w wygenerowanych klasach, gdy używasz niestandardowych typów argumentów zapisanych wBundle
. (Id86ed, b/237725966)
Aktualizacje zależności
- Biblioteka Nawigacja jest teraz zależna od Lifecycle
2.5.1
. (Ib4451) - Biblioteka nawigacji zależy teraz od aktywności
1.5.1
. (I3efe8) - Biblioteka nawigacji jest teraz zależna od Fragmenta
1.5.1
. (I56177)
Wersja 2.5.0
29 czerwca 2022 r.
androidx.navigation:navigation-*:2.5.0
został zwolniony. Wersja 2.5.0 zawiera te commity.
Ważne zmiany od wersji 2.4.0
- Integracja z CreationExtras –
Navigation
może teraz udostępniać bezstanowąViewModelProvider.Factory
za pomocąCreationExtras
z Lifecycle2.5.0
.
Nawigacja SafeArgs
Navigation Safe Args
uaktualniła zależnośćAndroid Gradle Plugin
, aby korzystała z7.0.4
, co powoduje utratę zgodności z wersjami AGP starszymi niż7.0
.- Dodaliśmy obsługę atrybutu build.gradle w pliku namespace, który zastępuje applicationId.
Inne zmiany
- Interfejs API
visibleEntries
nie jest już eksperymentalny i zawiera funkcję umożliwiającą pobieranie wszystkich wpisów, których miejsce docelowe jest obecnie widoczne zgodnie z wartością parametruNavController
.
Wersja 2.5.0-rc02
15 czerwca 2022 r.
androidx.navigation:navigation-*:2.5.0-rc02
został zwolniony. Wersja 2.5.0-rc02 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem z awarią spowodowany szybkim przełączaniem się między docelowymi przyciskami na dole podczas korzystania z funkcji tworzenia treści w nawigacji
NavHost
. (I3979a, b/234054916) Navigation SafeArgs
nie będzie się już zawieszać, gdy używaszapplicationIdSuffix
i przestrzeni nazw bezapplicationId
lub gdyapplicationId
i przestrzeń nazw są różne. (I754b1, b/233119646)- Funkcja
NavArgument
ma teraz funkcję niestandardowątoString()
, która wyświetla wewnętrzne wartości argumentu. (I900a8)
Wersja 2.5.0-rc01
11 maja 2022 roku
androidx.navigation:navigation-*:2.5.0-rc01
został zwolniony. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano nową regułę lint, która ostrzega przed umieszczaniem elementów
<deeplink>
wewnątrz elementów<activity>
w plikunavigation.xml
(Ic15a5, b/178403185).
Poprawki błędów
- Zakresy kompozytowe w funkcjach
NavHost
iDialogHost
są teraz usuwane w oczekiwanej kolejności, czyli komponenty wewnętrzne są usuwane przed zewnętrznymi. (I157e6) - Navigation SafeArgs używa teraz
PathSensitivity.RELATIVE
wArgumentsGenerationTask
, aby umożliwić przenoszenie pamięci podręcznej. Oznacza to, że element pamięci podręcznej można teraz ponownie użyć w ramach kompilacji CI w kompilacji lokalnej. (I5f67c, b/173420454) - Zaktualizowano regułę lint
UnrememberedGetBackStackEntryDetector
, aby wywołanie funkcjiremember
otaczające wywołanie funkcjigetBackStackEntry()
również przekazywało jako klucz obiektNavBackStackEntry
.(Ib7081, b/227382831)
Wersja 2.5.0-beta01
20 kwietnia 2022 r.
androidx.navigation:navigation-*:2.5.0-beta01
został zwolniony. Wersja 2.5.0-beta01 zawiera te commity.
Poprawki błędów
DialogNavigator
używa terazpopWithTransition
podczas wykonywania wywołaniadismiss()
. Rozwiązano problem z konkurencją podczas używaniaViewModel
w miejscu docelowymdialog
, który powodowałIllegalStateException
, gdy okno dialogowe było zamykane za pomocą przycisku Wstecz lub gdy użytkownik klikał poza okno. (Id7376, b/226552301)
Aktualizacje zależności
- Nawigacja zależy teraz od cyklu życia
2.5.0-beta01
. Naprawiono błądIllegalStateException
, który występował podczas zagnieżdżania jednegoNavHost
w innymNavHost
na niegłównym dolnym pasku nawigacji przy użyciu wielu poziomów ścieżki wstecznej.
Wersja 2.5.0-alpha04
6 kwietnia 2022 roku
androidx.navigation:navigation-*:2.5.0-alpha04
został zwolniony. Wersja 2.5.0-alpha04 zawiera te commity.
Zmiany w interfejsie API
- Funkcja
visibleEntries
nie jest już eksperymentalna. (I4829f, b/225394514)
Poprawki błędów
- Element NavHost zależy teraz od wartości
visibleEntries
z elementuNavController
, aby określić, które wpisy mają być tworzone. Oznacza to, że podczas korzystania z zagnieżdżonego elementu NavHost wewnętrzny elementNavHost
powinien być prawidłowo animowany. (I4ba2b, b/225394514) - Wartość
visibleEntries
StateFlow
zwracana przezNavController
jest teraz obliczana na podstawie maksymalnego stanu cyklu życia wpisu, a nie jego bieżącego stanu. Oznacza to, że nawet jeśli cykl życia gospodarzanavController
jest krótszy niż STARTED, lista widocznych elementów pozostanie taka sama. (I9e2a8, b/225394514) SavedStateViewFactory
obsługuje terazCreationExtras
nawet wtedy, gdy został zainicjowany za pomocąSavedStateRegistryOwner
. Jeśli podano dodatkowe argumenty, argumenty zainicjowane są ignorowane. (I6c43b, b/224844583)NavDeepLink
może teraz analizować adresy Uri z jednym parametrem zapytania bez wartości. (I0efe8, b/148905489)- Pusty ciąg znaków jest teraz uznawany za prawidłowy argument w precyzyjnych linkach. (I70a0d, b/217399862)
Navigation Safe Args
nie będzie się już zawieszać podczas korzystania z przestrzeni nazw, jeśli nie maAndroidManifest.xml
. (I17ccf, b/227229815)
Wersja 2.5.0-alpha03
23 lutego 2022 r.
androidx.navigation:navigation-*:2.5.0-alpha03
został zwolniony. Wersja 2.5.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- Teraz możesz przekazać parametr
CreationExtras
do funkcjiby navGraphViewModels
, aby utworzyć elementViewModel
. (I29217, b/217618359)
Poprawki błędów
NavDeepLinks
obsługuje teraz prawidłowo zakodowane znaki nowego wiersza osadzone w identyfikatorach URI tras/precyzyjnych linków. (I513d1, b/217815060)CreationExtras
będzie teraz prawidłowo działać w połączeniu zNavBackStackEntries
do tworzenia widoków modelu. (I69161, b/217617710)- Argumenty Bezpieczne dane nawigacji obsługują teraz użycie przestrzeni nazw zdefiniowanej w
build.gradle
zamiast pakietu w AndroidManifest. (I659ef, b/217414933)
Wersja 2.5.0-alpha02
9 lutego 2022 r.
androidx.navigation:navigation-*:2.5.0-alpha02
został zwolniony. Wersja 2.5.0-alpha02 zawiera te commity.
Poprawki błędów
- W sekcji Nawigacja
2.4.1
: elementNavHostFragment
będzie teraz prawidłowo ustawiał elementOnBackPressedDispatcher
podczas korzystania z wiązania widoku z zagnieżdżonymi wykresami. (Ifbb51, b/214577959) - W sekcji Nawigacja
2.4.1
: gdy linkujesz do głębokich treści w wielu zagnieżdżonychNavGraph
, w sekcji „Wstecz” będą teraz prawidłowo uwzględniane pośrednie miejsca docelowe. (I504c0, b/214383060)
Wersja 2.5.0-alpha01
26 stycznia 2022 r.
androidx.navigation:navigation-*:2.5.0-alpha01
został zwolniony. Wersja 2.5.0-alpha01 zawiera te commity.
Nowe funkcje
NavBackStackEntry
jest teraz zintegrowany z dodatkami do tworzenia widoku modelu, które zostały wprowadzone w ramach cyklu życia2.5.0-alpha01
. (Ib9fe2, b/207012490)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że dostęp do
ViewModel
utworzonego za pomocąby navGraphViewModels()
zonCreate()
fragmentu kończył się błędemIllegalStateException
. (I8a14d) NavDeepLink
s nie będzie już niepotrzebnie dekodować argumentów dwukrotnie, co oznacza, że docelowe argumenty są teraz przekazywane do miejsca docelowego. (I31b0a, b/210711399)
Safe Args
- Argumenty bezpieczne są teraz zależne od wtyczki Androida do obsługi Gradle w wersji 7.0.4. Oznacza to, że Navigation Safe Args nie będzie już zgodny z wersjami Android Studio starszymi niż 7.0, ale jest teraz zgodny z Android Gradle Plugin w wersji 7.1.0 lub nowszej. (I41c88, b/213086135, b/207670704)
Wersja 2.4.2
Wersja 2.4.2
6 kwietnia 2022 roku
androidx.navigation:navigation-*:2.4.2
został zwolniony. Wersja 2.4.2 zawiera te commity.
Poprawki błędów
- Zmiana z Nawigacja
2.5.0-alpha03
:NavDeepLinks
obsługuje teraz prawidłowo zakodowane znaki nowego wiersza wbudowane w identyfikatorach URI tras/precyzyjnych linków. (I513d1, b/217815060) - Wprowadzone z wersji Nawigacja
2.5.0-alpha03
: w Navigation SafeArgs można teraz używać przestrzeni nazw zdefiniowanej wbuild.gradle
zamiast pakietu w AndroidManifest. (I659ef, b/217414933) - Wprowadzone z Nawigacji
2.5.0-alpha04
:Navigation Safe Args
nie będzie się już zawieszać podczas korzystania z przestrzeni nazw, jeśli nie maAndroidManifest.xml
. (I17ccf, b/227229815) - Zmiana z Nawigacja
2.5.0-alpha04
: pusty ciąg znaków jest teraz uznawany za prawidłowy argument w precyzyjnych linkach. (I70a0d, b/217399862)
Wersja 2.4.1
Wersja 2.4.1
9 lutego 2022 r.
androidx.navigation:navigation-*:2.4.1
został zwolniony. Wersja 2.4.1 zawiera te zatwierdzenia.
Poprawki błędów
- Funkcja
NavHostFragment
będzie teraz prawidłowo ustawiać parametrOnBackPressedDispatcher
podczas korzystania z viewbindingu z zagnieżdżonymi wykresami. (Ifbb51, b/214577959) - Gdy użytkownik kliknie precyzyjny link do strony z wieloma zagnieżdżonymi
NavGraph
, w sekcji „Wstecz” pojawią się teraz prawidłowe pośrednie miejsca docelowe. (I504c0, b/214383060) - Zmiana z Nawigacja
2.5.0-alpha01
: rozwiązaliśmy problem, który powodował, że dostęp do ViewModel utworzonego za pomocąby navGraphViewModels()
w metodachonCreate()
Fragmentu kończył się błędemIllegalStateException
. (I8a14d) - Zmiana z Nawigacja
2.5.0-alpha01
:NavDeepLink
s nie dekoduje już niepotrzebnie argumentów dwukrotnie, co oznacza, że poprawnie zakodowane argumenty są teraz przekazywane do miejsca docelowego. (I31b0a, b/210711399) - Zmiana z Nawigacji
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 wersjami Android Studio starszymi niż 7.0, ale jest teraz zgodny z Android Gradle Plugin w wersji 7.1.0 lub nowszej. (I41c88, b/213086135, b/207670704)
Wersja 2.4.0
Wersja 2.4.0
26 stycznia 2022 r.
androidx.navigation:navigation-*:2.4.0
został zwolniony. Wersja 2.4.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 2.3.0
- Wszystkie elementy nawigacji zostały przepisane w języku Kotlin. Poprawiono w nim możliwość zwracania wartości null przez klasy korzystające z typów ogólnych (np. podklasy
NavType
). Wszystkie funkcje rozszerzeń Kotlina, które wcześniej były częścią artefaktów-ktx
, zostały przeniesione do odpowiednich głównych artefaktów. Elementy-ktx
będą nadal publikowane, ale będą całkowicie puste. - Element
navigation-fragment
zawiera teraz wstępnie zbudowaną implementację układu z 2 panelami za pomocą nowego elementuAbstractListDetailFragment
. Ten fragment używa obiektuSlidingPaneLayout
do zarządzania panelem listy (który udostępnia Twoja podklasa) i panelem szczegółów, który używa obiektuNavHostFragment
jako implementacji, jak widać w naszym przykładzie implementacji. - Metoda
currentBackStackEntryAsFlow()
w obiekcieNavController
udostępnia obiektFlow
, który emituje się za każdym razem, gdy zmienia się bieżący obiektNavBackStackEntry
. Ten proces może być stosowany jako alternatywa dla ręcznego zarządzaniaOnDestinationChangedListener
. - Kontroler nawigacji umożliwia teraz pobieranie listy wszystkich widocznych instancji
NavBackStackEntry
jakoStateFlow
za pomocą eksperymentalnej właściwościvisibleEntries
. - Teraz możesz rozszerzyć klasę
NavType
, aby utworzyć niestandardowe typy NavType. Typy niestandardowe są obsługiwane tylko wtedy, gdy tworzysz graficzną mapę nawigacyjną programowo, np. za pomocą języka DSL do tworzenia graficznej mapy nawigacyjnej w Kotlinie. Navigation udostępnia teraz interfejsy API
findStartDestination()
igetHierarchy()
, które można wykorzystać do implementacji niestandardowego interfejsu NavigationUI.findStartDestination()
to funkcja rozszerzenia funkcjiNavGraph
, która wyszukuje rzeczywiste miejsce docelowe, które będzie wyświetlane po przejściu do wykresu, nawet jeślistartDestination
jest zagnieżdżoną funkcjąNavGraph
.getHierarchy()
to funkcjaNavDestination
, której można użyć do sprawdzenia, 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ły parametrBottomNavigationView
, zostały zaktualizowane tak, aby przyjmowały zamiast tego superklasę wprowadzoną w Material1.4.0
,NavigationBarView
. Dzięki temu te metody można stosować w przypadkuNavigationRailView
.Podczas napełniania elementu
<action>
za pomocą kodu 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 programowania Kotlin
W poprzednich wersjach Nawigacji każda lokalizacja miała stały identyfikator liczbowy, który pozwalał ją jednoznacznie odróżnić od innych lokalizacji i umożliwiał navigate()
bezpośrednio lub za pomocą działania. Chociaż nadal jest to prawidłowe i przydatne, zwłaszcza w przypadku definiowania grafu nawigacji w formacie XML i możliwości korzystania z automatycznie generowanych stałych R.id
lub argumentów bezpiecznych (które używają tych stałych do generowania kodu w czasie kompilacji), ten system unikalnych liczb całkowitych nie pozwalał na uchwycenie znaczenia semantycznego i wyrazistości potrzebnych do obsługi w pełni dynamicznych grafów tworzonych programowo w czasie wykonywania za pomocą języka DSL Kotlina do nawigacji.
W tej wersji wprowadzamy nową opcję umożliwiającą jednoznaczne zidentyfikowanie miejsca docelowego w grafie nawigacji za pomocą jego trasy. Trasa to String
, która definiuje unikalną ścieżkę do miejsca docelowego. Wszystkie metody Kotlin DSL, które przyjmowały identyfikator miejsca docelowego, są teraz wycofane i zastąpione odpowiednim interfejsem API, który przyjmuje trasę.
Każda trasa powinna być traktowana jako część „ścieżki” w elementach Uri
, która definiuje ten cel, np. home
, profile/{userId}
, profile/{userId}/friends
itd. Gdy tożsamość miejsca docelowego jest powiązana z konkretnym rodzajem treści, te argumenty dynamiczne powinny być częścią trasy, zgodnie z tymi samymi regułami co domyślne linki do treści.
Wszystkie interfejsy API NavController
, które wcześniej przyjmowały tylko identyfikator, mają teraz przeciążenie, które przyjmuje trasę String
. Obejmuje to navigate()
, popBackStack()
, popUpTo()
i getBackStackEntry()
.
Miało to pewne konsekwencje dla interfejsów API:
- Właściwość Kotlina
popUpTo
w Kotlin DSL została wycofana na rzecz właściwościpopUpToId
. - Interfejs API
getStartDestination()
został wycofany na rzecz interfejsugetStartDestinationId()
.
W odróżnieniu od nawigacji według identyfikatora nawigacja według trasy podlega tym samym regułom co ukryte linki głębokie, co oznacza, że możesz bezpośrednio przejść do dowolnego miejsca docelowego w dowolnym zagnieżdżonym grafie. Dzięki temu te trasy będą dostępne w projektach wielomodułowych bez dodawania widocznych z zewnątrz linków głębokich do poszczególnych miejsc docelowych.
Nawigacja – tworzenie
Element navigation-compose
zapewnia integrację między komponentem nawigacji a Jetpack Compose. Używa funkcji @Composable
jako miejsc docelowych w aplikacji.
Ta wersja zawiera:
- Komponent
NavHost
, który umożliwia tworzenie grafu nawigacji za pomocą języka programowania Kotlin DSL, przy użyciu punktów docelowychcomposable
idialog
oraz obsługę opcjonalnych nawigacji, takich jak te z materiału na temat nawigacji towarzyszącej. - Obowiązkowa obsługa przejścia między miejscami docelowymi. Animacja nawigacji towarzyszącej może służyć do kontrolowania przejść wejścia i wyjścia za pomocą eksperymentalnych interfejsów Compose API.
- Zakres
Lifecycle
dla każdego miejsca docelowego z możliwością łączenia. Każda ścieżka osiąga stanRESUMED
dopiero po zakończeniu wszystkich przejść wejściowych i natychmiast przechodzi w stanSTARTED
po rozpoczęciu wszystkich przejść wyjściowych. Dzięki temu możesz uniknąć wszystkich problemów związanych zIllegalStateException
i wielodotykiem, wywołując wywołanienavigate
tylko wtedy, gdyLifecycle
ma wartośćRESUMED
. - Wyodrębnienie
ViewModel
(za pomocą interfejsu APIviewModel()
w komponencie Lifecycle ViewModel Compose2.4.0
lubhiltViewModel()
w komponencie Hilt Navigation Compose1.0.0
) na poziomie miejsca docelowego, zapewniając zakres, który przetrwa zmiany konfiguracji i znajduje się na stosie z poziomu poprzedniego (gdy kompozytowany element treści jest w inny sposób usuwany) oraz sygnał w komponencieonCleared()
ViewModel, który wskazuje na trwałe usunięcie i wyczyszczenie stanu związanego z tymNavBackStackEntry
. - określenie zakresu stanu
rememberSaveable
na poziomie miejsca docelowego, co zapewnia automatyczne zapisywanie i przywracanie stanu wszystkich komponentów po powrocie do miejsca docelowego; - Pełna obsługa zapisywania i przywracania stanu
NavController
oraz stanu miejsca docelowego po zakończeniu i odtworzeniu 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 w komponencie
rememberNavController()
icurrentBackStackEntryAsState()
konkretne pomocnicze komponenty, aby umożliwić przenoszenie stanu i połączenie komponentuNavController
z komponentami kompozytowymi spoza komponentuNavHost
(np. z paskiem nawigacyjnym na dole).
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 nawigacji w edytorze.
Wiele ścieżek wstecznych
Kontroler nawigacji odpowiada za zarządzanie stosem wstecz miejsc docelowych, dodając do niego miejsca docelowe, gdy navigate()
do nich przechodzisz, i usuwając je, gdy wywołujesz popBackStack()
lub naciskasz przycisk wstecz w systemie. Istniejąca klasa NavOptions
i integracja z elementami <action>
w pliku XML z grafem nawigacji zostały rozszerzone, aby obsługiwać zapisywanie i przywracanie stosu wstecz.
W ramach tej zmiany metody NavigationUI
w klasach onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
i NavigationView.setupWithNavController()
automatycznie zapisują i przywracają stan wylistowanych miejsc docelowych, umożliwiając obsługę wielu stosów wstecznych bez wprowadzania żadnych zmian w kodzie. Jeśli używasz nawigacji z fragmentami, jest to zalecany sposób integracji z wieloma stosami poprzednich elementów.
Interfejsy API służące do zapisywania i przywracania stanu są dostępne na różnych platformach:
W pliku XML nawigacji element
<action>
może teraz używać atrybutów logicznychapp:popUpToSaveState
iapp:restoreState
, aby zapisywać stan wszystkich miejsc docelowych wylistowanych za pomocą elementuapp:popUpTo
, a następnie przywracać stan powiązany z miejscem docelowym przekazanym jako elementapp: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
navOptions
Kotlin DSL możesz dodać właściwości logicznerestoreState
isaveState
w komponenciepopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
Aby ręcznie utworzyć obiekt
NavOptions
za pomocą metodyNavOptions.Builder
, możesz użyć metodysetRestoreState()
i nowej przeciążonej metodysetPopUpTo()
, która 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);
Automatyczne wywołania
popBackStack()
mogą teraz zawierać dodatkowy parametrsaveState
.Metoda
clearBackStack()
służy do wyczyszczenia stanu zapisanego za pomocą metodypopBackStack()
lubpopUpToSaveState
.
We wszystkich przypadkach NavController
zapisze i przywróci stan każdego NavBackStackEntry
, w tym wszystkie wystąpienia ViewModel
ograniczone do miejsca docelowego nawigacji. Interfejsy API Navigator
zostały zaktualizowane, aby umożliwić każdemu Navigator
zapisywanie i przywracanie własnego stanu.
Zmiany w zachowaniu
NavDeepLinkBuilder
dodaje terazPendingIntent.FLAG_IMMUTABLE
doPendingIntent
zwracanego przezcreatePendingIntent()
, co zapewnia prawidłowe działanie tego interfejsu API w przypadku kierowania na Androida 12.- Nawigacja zależy teraz od Lifecycle
2.3.1
i teraz oznaczasetGraph()
,popBackStack()
,navigateUp()
inavigate()
, czyli metody, które aktualizująNavBackStackEntry
Lifecycle
, jako@MainThread
, dostosowując Nawigację do głównego wątku wdrożenia wprowadzonego w Lifecycle2.3.0
. - Precyzyjne linki sprawdzają teraz, czy w elementach
Uri
znajdują się wszystkie wymagane argumenty (te bez wartości domyślnych). NavDeepLink
Parsowane argumenty są teraz traktowane tak samo jak znaki zapytania jako separatory między segmentami ścieżki, co zapobiega rozciąganiu się argumentu na znak zapytania.- Podczas generowania działań kod Kotlina wygenerowany z 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 powinieneś już otrzymywać ostrzeżenia dotyczącego
applicationIdTextResource
.
Znane problemy
- Naprawiono błąd w Nawigacji
2.5.0-alpha01
: dostęp doViewModel
utworzonego za pomocąby navGraphViewModels()
zonCreate()
Fragmentu nie powiedzie się i wyświetli błądIllegalStateException
. (b/213504272) - Naprawiono błąd w Nawigacji
2.5.0-alpha01
: Safe Args 2.4.0 jest niezgodna z wtyczką Android Gradle Plugin 7.1.0 i nowszą. (b/213086135) - Linkowanie precyzyjne z wieloma zagnieżdżonymi szkicami nawigacji nie tworzy prawidłowo pełnego stosu. (b/214383060)
Wersja 2.4.0-rc01
15 grudnia 2021 roku
androidx.navigation:navigation-*:2.4.0-rc01
został zwolniony. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.
Zmiany w zachowaniu
NavDeepLink
przeanalizowane argumenty są teraz traktowane jako znaki funta w taki sam sposób jak znaki zapytania jako separatory między argumentami. (I21309, b/180042703)
Poprawki błędów
- Linki głębokie nie będą już ignorować argumentów o wartościach takich samych jak nazwa obiektu zastępczego. (If8017, b/207389470)
NavController
nie będzie się już zawieszać podczas wyjmowania zagnieżdżonego miejsca docelowego za pomocą przejść po przywróceniuNavController
. (I0f7c9, b/205021623)- Komunikat o błędzie wyświetlany podczas używania nieprawidłowego elementu
startDestination
będzie teraz domyślnie wskazywać trasę do miejsca docelowego, jeśli jest ona dostępna. (I86b9d, b/208041894)
Poprawki błędów w sekcji Nawigacja w Compose
- Usunięto potencjalny błąd powodowany szybkim przełączaniem się między miejscem początkowym a innym miejscem docelowym za pomocą elementów menu nawigacji dolnej. (Ic8976, b/208887901)
- Miejsce docelowe okna dialogowego jest teraz prawidłowo przywracane u góry ekranu po zmianie konfiguracji lub zakończeniu procesu. (I4c0dc, b/207386169)
- Rozwiązaliśmy problem, który powodował, że próba pobrania
ViewModel
z elementuNavBackStackEntry
w oknie dialogowym kończyła się niepowodzeniem, gdy okno było zamknięte. (I6b96d, b/206465487) - Rozwiązaliśmy problem, który występował podczas używania miejsc docelowych
activity
z elementemNavHost
w komponowaniu trasy, co powodowało nieskończone ponowne tworzenie kompozycji. (I8f64c) - Usunięto wyciek pamięci w komponencie Navigation Compose, który zatrzymywał odwołanie do starej aktywności po zmianie konfiguracji lub zakończeniu procesu. (I4efcb, b/204905432)
Poprawki błędów Safe Args
SafeArgs
nie ulega już awarii podczas próby przywrócenia niestandardowych tablic do przesyłania po zakończeniu procesu. (I618e8, b/207315994)- Naprawiono błąd w safe args, który uniemożliwiał tablicom booleanów przyjmowanie wartości
null
. (I8c396, b/174787525)
Wersja 2.4.0-beta02
3 listopada 2021 r.
androidx.navigation:navigation-*:2.4.0-beta02
został zwolniony. Wersja 2.4.0-beta02 zawiera te commity.
Zmiany w interfejsie API
- Obsługa zarówno jawnych, jak i domyślnych linków głębokich automatycznie dodaje flagę
saveState
podczas przechodzenia do innego grafu, co zapewnia, że kod, np.NavigationUI.setupWithNavController
i kod korzystający z wielu stosów wywołań, działa zgodnie z oczekiwaniami. (Ic8807)
Zmiany w zachowaniu
- W ramach funkcji NavDeepLink wzorce precyzyjnych linków są teraz kompilowane w sposób leniwy, a nie podczas napełniania. Powinna ona skrócić czas inflacji wykresów nawigacji zawierających precyzyjne linki. (b8d257, b/184149935)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że elementy NavBackStackEntries były przesuwane w dół do
Lifecycle.State.CREATED
po przeniesieniu doLifecycle.State.STARTED
, gdy elementNavHost
jest dodawany bezpośrednio dosetContent()
aktywności. (Ia5ac1, b/203536683) - Rozwiązaliśmy problem polegający na tym, że usunięcie miejsca docelowego
DialogFragment
ze stosu poprzednich wywołań przed wyświetleniem okna dialogowego nie powodowało jego zamknięcia. W efekcie, gdy użytkownik ręcznie zamykał błędne okno, aplikacja się zawieszała. (I687e5) - Rozwiązaliśmy problem, który powodował, że interfejs API
onNavDestinationSelected
wNavigationUI
zwracał odpowiedźtrue
, nawet jeśli nienavigate()
do tego grafu nawigacyjnego. Teraz używa on tej samej logiki, której używa wewnętrznie usługasetupWithNavController
, aby wybierać tylkoMenuItem
powiązane z bieżącym miejscem docelowym za pomocą atrybutuhierarchy
tego miejsca. (I2b053)
Wersja 2.4.0-beta01
27 października 2021 roku
androidx.navigation:navigation-*:2.4.0-beta01
został zwolniony. Wersja 2.4.0-beta01 zawiera te commity.
Nowe funkcje
- Możesz teraz używać
by navGraphViewModel
z trasą jako alternatywy dla identyfikatora, aby lepiej obsługiwać korzystanie z języka DSL nawigacji w Kotlinie z fragmentami. (I901e3, b/201446416)
Zmiany w interfejsie API
- Interfejs API
visibleEntries
jest obecnie w fazie eksperymentalnej. (I93f6f)
Poprawki błędów
- Modele widoku nie będą już usuwane, gdy przejścia zostaną przerwane przez przełączanie się między tymi samymi ekranami (Id52d8, b/200817333)
- Argumenty
NavDeepLink
, które mogą być puste, nie wymagają już wartości domyślnej podczas dodawania precyzyjnych linków do pólNavDestination
. (I5aad4, b/201320030) - Elementy NavBackStackEntries z różnymi cyklami życia nie są już uważane za równe. Oznacza to, że podczas nawigacji za pomocą singleTop i podczas ponownego wybierania elementów menu dolnego NavHost będzie prawidłowo przetwarzać wszystkie miejsca docelowe. (I1b351, b/196997433)
- Rozwiązaliśmy problem z funkcją
AbstractListDetailFragment
, który powodował, że atrybutylayout_width
ilayout_weight
w płytce listy zwracanej przez funkcjęonCreateListPaneView()
były nieprawidłowo obsługiwane lub ignorowane. (f5fbf3) - Stan wizualny miejsc docelowych dialogu jest teraz prawidłowo zsynchronizowany ze stanem
DialogFragmentNavigator
. Oznacza to, że ręczne wywołanie asynchronicznego interfejsu APIdismiss()
dlaDialogFragment
prawidłowo usuwa wszystkie miejsca docelowe dialogu powyżej zamkniętego dialogu. Nie ma to wpływu na przypadki, gdy do zamknięcia okna dialogowego używaszpopUpTo
lubpopBackStack()
. (I77ba2) AbstractAppBarOnDestinationChangedListener
ma teraz bardziej czytelne komunikaty o błędach dotycząceonDestinationChanged()
. (Ie742d)
Wersja 2.4.0-alpha10
29 września 2021 r.
androidx.navigation:navigation-*:2.4.0-alpha10
został zwolniony. Wersja 2.4.0-alpha10 zawiera te zatwierdzenia.
Nowe funkcje
- Kontroler NavController umożliwia teraz pobieranie listy wszystkich widocznych instancji
NavBackStackEntry
za pomocąvisibleEntries
StateFlow (Ia964e). - Funkcja
rememberNavController()
przyjmuje teraz opcjonalny zbiór instancjiNavigator
, który zostanie dodany do zwróconegoNavController
, aby lepiej obsługiwać opcjonalne nawigatory, takie jak te z Materiału nawigacyjnego towarzysza. (I4619e)
Poprawki błędów
- Nawigacja dynamiczna nie będzie się już zawieszać, gdy ponownie utworzysz aktywność. (Ifa6a3, b/197942869)
- Rozwiązanie problemu z przyciskiem wstecz systemu, który występuje tylko po powrocie do miejsca docelowego w ramach komponentu zawierającego element
NavHost
. (3ed148, b/195668143) - SafeArgs generuje teraz argumenty dla
fromBundle()
ifromSavedStateHandle()
w odpowiedniej kolejności. (I824a8, b/200059831)
Wersja 2.4.0-alpha09
15 września 2021 r.
androidx.navigation:navigation-*:2.4.0-alpha09
został zwolniony. Wersja 2.4.0-alpha09 zawiera te commity.
Nowe funkcje
- Możesz teraz użyć metody
clearBackStack()
, aby wyczyścić stan zapisany za pomocą metodypopBackStack()
lubpopUpToSaveState
. (I80a0f) - Możesz teraz przekazać w kreatorze grafu zagnieżdżonej nawigacji listę argumentów lub linków dogłębnych, które zostaną automatycznie dodane do tworzonego grafu. (I8a470, b/182545357)
Zmiany w interfejsie API
- Funkcja
navArgument
w Kotlin DSL jest teraz częścią funkcjinavigation-common
, a nienavigation-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 tymi z wartościami domyślnymi. (I89709, b/198493585)
Poprawki błędów
- Gdy używasz węzła kompozytowego Nawigacja, węzły NavGraph są
DESTROYED
dopiero wtedy, gdy wszystkie ich elementy sąDESTROYED
. (I86552, b/198741720) - Argumenty
NavDeepLink
, które mogą być puste, nie wymagają już wartości domyślnej. (Ia14ef, b/198689811) - Wywołanie funkcji
setGraph()
z nowym grafem spowoduje teraz również wyczyszczenie wszystkich zapisanych stosów odwrotnych, a nie tylko odrzucenie poprzedniego stosu odwrotnego, jak miało to miejsce wcześniej. (I97f96) - Rozwiązaliśmy problem, który powodował, że instancje
OnDestinationChangedListener
icurrentBackStackEntryFlow
nie były powiadamiane podczas korzystania zlaunchSingleTop
. (Iaaebc)
Aktualizacje zależności
- Panel Nawigacja w Compose teraz zależy od Activity Compose w wersji 1.3.1. (I05829)
- Komponent Compose w komponencie Nawigacja zależy teraz od komponentu Lifecycle ViewModel Compose
2.4.0-beta01
. (Ib86a3)
Wersja 2.4.0-alpha08
1 września 2021 roku
androidx.navigation:navigation-*:2.4.0-alpha08
został zwolniony. Wersja 2.4.0-alpha08 zawiera te commity.
Nowe funkcje
- Teraz możesz rozszerzyć klasę
NavType
, aby utworzyć niestandardowe typy NavType. Typy niestandardowe są obsługiwane tylko wtedy, gdy tworzysz graficznie interfejs użytkownika za pomocą kodu, np. za pomocą języka DSL do tworzenia graficznego interfejsu użytkownika w języku Kotlin. (I78440, b/196871885)
Zmiany w zachowaniu
- Podczas generowania działań kod Kotlina wygenerowany z 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 elementach
Uri
znajdują się wszystkie wymagane argumenty (te bez wartości domyślnych). (#204, b/185527157)
Poprawki błędów
- Używanie funkcji
getBackStackEntry
ipreviousBackStackEntry
w ramach funkcji composable() w połączeniu z funkcjąremember()
nie spowoduje już wyjątku, jeśli w grupie elementów zwracanych przez funkcję nie ma elementu docelowego. (I75138, b/194313238) - Element Navigation Compose jest teraz prawidłowo przetwarzany po zmianie argumentów podrzędnego stosu i użyciu
launchSingleTop=true
. (Iebd69, b/186392337) - Nie będzie już funkcji
ArrayIndexOutOfBoundsException
podczas wywoływania funkcjisetGraph
z grafem zawierającym 13 lub 29 miejsc docelowych. (I1a9f1, b/195171984) - Generator SafeArgs Java nie powinien już generować ostrzeżeń lint podczas generowania klas Args. (I1a666, b/185843837)
Darowizna zewnętrzna
- Dziękujemy ospixd za sprawdzenie, czy w precyzyjnych linkach są obecne wszystkie wymagane argumenty (te bez wartości domyślnych) w funkcji
Uri
. (#204, b/185527157)
Wersja 2.4.0-alpha07
18 sierpnia 2021 r.
androidx.navigation:navigation-*:2.4.0-alpha07
został zwolniony. Wersja 2.4.0-alpha07 zawiera te commity.
Poprawki błędów
- Element kompozytywny Nawigacja teraz prawidłowo zapisuje stan po zmianach konfiguracji i podczas zmiany wykresów przy użyciu funkcji wielu warstw ścieżki wstecznej. (If5a3d, b/195141957)
- Ponowny wybór tej samej karty podczas korzystania z funkcji tworzenia nawigacji z wieloma warstwami cofnięcia nie spowoduje już pustego ekranu. (I860dc, b/194925622)
NavHost
sprawdza teraz zmiany wLifecycle.State
NavBackStackEntry
, co oznacza, że fragment z użyciemNavHost
będzie teraz odpowiednio przekomponowany w zależności od zmian w cyklu życia, zamiast wyświetlać pusty ekran. (I4eb85, b/195864489)- Rozwiązaliśmy problem, który powodował, że po utworzeniu nowej aktywności (np. po zmianie konfiguracji) usunięcie stanu
DialogFragment
nie aktualizowało prawidłowo stanuNavController
. (Icd72b) - Rozwiązaliśmy problem polegający na tym, że wywołanie metody pop w klasie DialogDestination nie aktualizowało obsługi przycisku Wstecz w systemie NavController, co mogło powodować przechwytywanie tego przycisku przez NavController, mimo że nie było żadnego stosu wstecz do wyjęcia. (If3b34)
- Safe-args automatycznie generuje teraz metodę
toSavedStateHandle
do argumentów, która może służyć do testowania koduViewModel
. (If1e2d, b/193353880)
Wersja 2.4.0-alpha06
4 sierpnia 2021 r.
androidx.navigation:navigation-*:2.4.0-alpha06
został zwolniony. Wersja 2.4.0-alpha06 zawiera te commity.
Zmiany w interfejsie API
- Metody
requireSlidingPaneLayout()
irequireDetailPaneNavHostFragment()
wAbstractListDetailFragment
zostały odpowiednio przemianowane nagetSlidingPaneLayout()
igetDetailPaneNavHostFragment()
. (I34a08)
Zmiany w zachowaniu
- Podczas nawigacji z animacjami (np.
Crossfade
) nowy celLifecycle
dotrze doRESUMED
dopiero po zakończeniu animacji. (If0543, b/172112072, b/194301889) - Element
NavHost
w sekcji Nawigacja w sekcji Tworzenie tekstu ustawia teraz wykres jako część pierwszej kompozycji. (Ieb7be)
Poprawki błędów
- Wyświetlenie ostatniego miejsca docelowego w grafie 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 bezUri
i przechodzenia do niego z trasy lub precyzyjnego linku. (938a0c, b/193805425) - Rozwiązaliśmy problem w komponencie Edytor nawigacji polegający na tym, że precyzyjny link do
NavBackStackEntry
nie osiągał stanuRESUMED
. (I192c5) - Rozwiązaliśmy problem, który powodował, że wyświetlenie miejsca docelowego okna dialogowego nie aktualizowało obsługi przycisku Wstecz w systemie NavController, co mogło spowodować przechwycenie przycisku Wstecz przez NavController, mimo że nie było żadnego stosu Wstecz do wyświetlenia. (aosp/1782668)
Wersja 2.4.0-alpha05
21 lipca 2021 r.
androidx.navigation:navigation-*:2.4.0-alpha05
został zwolniony. Wersja 2.4.0-alpha05 zawiera te commity.
Zmiany w zachowaniu
- Podczas nawigacji do różnych miejsc funkcja
NavHost
w sekcji Kompozycja w Nawigacji zawsze korzysta z przejść. (I07049, b/172112072) - Możesz teraz wprowadzać zmiany w grafu hosta nawigacji. Grafy z tym samym startDestination i tymi samymi miejscami docelowymi na rysunku będą uważane za równe i nie będą czyszczyć
NavController
stosu odwrotnego. (I0b8db, b/175392262)
Poprawki błędów
- Naprawiono błąd
NoSuchElementException
występujący podczas wywoływania metodypopBackStack()
w ramach metodyLifecycleObserver
dołączonej do obiektuNavBackStackEntry
, spowodowany przez rekurencyjne aktualizacje stanu klasy NavController. (I64621) AbstractListDetailFragment
pozwala teraz całkowicie usunąćSlidingPaneLayout
z pliku APK, gdyAbstractListDetailFragment
nie jest używany. (I611ad)- Obiekty
NavGraph
iNavDestination
teraz zastępują metodę equals, więc dwa obiekty o tych samych wartościach będą uważane za równe. (I166eb, b/175392262)
Wersja 2.4.0-alpha04
1 lipca 2021 r.
androidx.navigation:navigation-*:2.4.0-alpha04
został zwolniony. Wersja 2.4.0-alpha04 zawiera te commity.
Nowe funkcje
- Element
navigation-fragment
zawiera teraz wstępnie zbudowaną implementację układu z 2 panelami za pomocą nowego elementuAbstractListDetailFragment
. Ten fragment używa obiektuSlidingPaneLayout
do zarządzania panelem listy (który udostępnia Twoja podklasa) i panelem szczegółów, który używa obiektuNavHostFragment
jako implementacji, jak widać w naszym przykładzie implementacji. (Iac4be, b/191276636) NavHost
elementunavigation-compose
obsługuje terazdialog
miejsca docelowe opróczcomposable
miejsc docelowych. Te miejsca docelowe dialogu będą wyświetlane w komponowalnym elemencieDialog
, który będzie unosić 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
add
w funkcjiNavigatorState
nosi teraz nazwępush
. Wszystkie bieżące wywołania funkcjiadd()
należy zmienić na push(). (Ie89fc, b/172112072) - Niestandardowe instancje
Navigator
mogą teraz używać interfejsów APIpushWithTransaction
ipopWithTransition
wNavigatorState
, aby asynchronicznie przesyłać lub usuwać dane do miejsca docelowego. Pamiętaj, że te interfejsy API nie są jeszcze używane przez żadnego z dołączonych nawigatorów. (Ic4d7c, b/172112072)
Zmiany w zachowaniu
NavDeepLinkBuilder
dodaje terazPendingIntent.FLAG_IMMUTABLE
doPendingIntent
zwracanego przezcreatePendingIntent()
, co zapewnia prawidłowe działanie tego interfejsu API w przypadku kierowania na Androida 12. (If8c52)
Poprawki błędów
- Rozwiązanie problemu z funkcją
<include-dynamic>
, w którym argumenty przekazywane do wykresu nie były prawidłowo przekazywane do dynamicznie uwzględnianego wykresu. (I3e115) - Rozwiązano błąd
NullPointerException
występujący podczas 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 występujące podczas korzystania z pełnego trybu R8 3.1. (I2add9, b/191654433) - SafeArgs nie będzie już generować błędów podczas kompilowania aplikacji z wersjami
Kotlin
starszymi niż1.5.0
. (Icd1ff, b/190739257)
Wersja 2.4.0-alpha03
16 czerwca 2021 r.
androidx.navigation:navigation-*:2.4.0-alpha03
został zwolniony. Wersja 2.4.0-alpha03 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że do przejścia do zawartego wykresu dynamicznego potrzebne były 2 wywołania funkcji
navigate()
. (I7785c, b/188859835) - Naprawiliśmy regresję wprowadzoną w Nawigacji
2.4.0-alpha01
, w którejsetupActionBarWithNavController()
nie usuwała prawidłowo ikony W górę, gdy użytkownik znajdował się na poziomie najwyższym. (I5d443, b/189868637) - Rozwiązaliśmy błąd
IllegalStateException
występujący podczas wywoływania metodypopBackStack()
po wyrzuceniu wcześniej grafu głównego kontrolera NavController. (I2a330, b/190265699) - Reguły ProGuard dotyczące
by navArgs()
są teraz prawidłowo stosowane podczas korzystania znavigation-common
lub innych artefaktów, które od niego zależą. (I68800, b/190082521) - Usługa
OnDestinationChangedListener
, która wywołuje usługęnavigate()
po raz pierwszy, gdy otrzyma wywołanie zwrotne, teraz prawidłowo otrzyma drugie wywołanie zwrotne z miejscem docelowym, do którego się przekierowała. (Ie5f9e, b/190228815) - Safe Args nie ulega już awarii podczas używania z modułami dynamicznych funkcji i AGP 7.0 lub nowszą wersją (I69518, b/189966576).
Znany problem
- Jeśli używasz Gradle
6.7.0
, funkcja Safe Args nie zadziała z powodu błęduUnable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’
, ponieważ zależy od starszej wersji Kotlina. Aby rozwiązać ten problem, zaktualizuj Gradle do wersji 7.0. (b/190739257)
Wersja 2.4.0-alpha02
2 czerwca 2021 r.
androidx.navigation:navigation-*:2.4.0-alpha02
został zwolniony. Wersja 2.4.0-alpha02 zawiera te commity.
Nowe funkcje
- Trasy są teraz obsługiwane w przypadku miejsc docelowych Activity, Fragment i Dialog, a także w ramach DynamicNavigation Kotlin DSL. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
NavigationUI
tymczasowo dodał eksperymentalne interfejsy API, aby umożliwić rezygnację z zapisywania stanu. Zawsze zapisywanie stanu jest prawidłowym działaniem, ale nadal występują przypadki korzystania z nieobsługiwanych bibliotek (czyli zachowanych fragmentów), które nie mogą być obsługiwane podczas zapisywania stanu. Daje to aplikacjom możliwość stopniowego rezygnowania z nieobsługiwanych interfejsów API. (Idf93c)Navigation udostępnia teraz interfejsy API
findDestination()
igetHierarchy()
, które można wykorzystać do implementacji niestandardowego interfejsu NavigationUI.findDestination()
to funkcja rozszerzenia funkcjiNavGraph
, która wyszukuje miejsce docelowe na graf.getHierarchy()
to funkcjaNavDestination
, której można użyć do sprawdzenia, czy dana lokalizacja docelowa znajduje się w hierarchii innej lokalizacji docelowej (I2932f, b/188183365).val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
Metody NavigationUI, które przyjmowały parametr
BottomNavigationView
, zostały zaktualizowane tak, aby przyjmowały zamiast tego superklasę wprowadzoną w Material1.4.0
,NavigationBarView
. Dzięki temu te metody można stosować w przypadkuNavigationRailView
. (Ib0b36, b/182938895)Podczas wczytywania elementu
<action>
za pomocą kodu 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
- Budowniki Kotlin DSL, które używają identyfikatora, zostały wycofane i powinny zostać zastąpione przez te, które korzystają z tras (I85b42, b/188816479) (I9f58f, b/188816479)
Poprawki błędów
DialogFragmentNavigator
korzysta teraz z interfejsu APINavigatorState.pop()
, aby informowaćNavController
o zamknięciu okna dialogowego przez naciśnięcie przycisku Wstecz w systemie lub kliknięcie poza okno. Dzięki temu stanNavController
jest zawsze zsynchronizowany ze stanem nawigatora. (I2ead9)Nawigacja nie zwraca już wartości
ConcurrentModificationException
, gdy używasz manipulowania listąOnDestinationChangedListeners
z wywołaniem zwrotnymonDestinationChanged
. (Ib1707, b/188860458)Safe Args nie ulega już awarii podczas próby wygenerowania właściwości kierunku w Kotlinie. (Id2416, b/188564435)
Metoda setId w klasie NavDestination jest teraz odpowiednio oznaczona za pomocą
@IdRes
, więc akceptuje tylko identyfikatory zasobów. (I69b80)Parametr int w funkcji
findNode
to terazresId
, a nieresid
. (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 powinieneś już otrzymywać ostrzeżenia dotyczącego
applicationIdTextResource
. (I6d67b, b/172824579)
Wersja 2.4.0-alpha01
18 maja 2021 r.
androidx.navigation:navigation-*:2.4.0-alpha01
został zwolniony. Wersja 2.4.0-alpha01 zawiera te commity.
Nowe funkcje
- Metoda
currentBackStackEntryAsFlow()
w obiekcieNavController
udostępnia obiektFlow
, który emituje się za każdym razem, gdy zmienia się bieżący obiektNavBackStackEntry
. Ten proces może być stosowany jako alternatywa dla ręcznego zarządzaniaOnDestinationChangedListener
. (I19c4a, #89, b/163947280)
Wiele ścieżek wstecznych
Kontroler nawigacji odpowiada za zarządzanie stosem wstecz miejsc docelowych, dodając do niego miejsca docelowe, gdy navigate()
do nich przechodzisz, oraz usuwając je, gdy wywołujesz popBackStack()
lub naciskasz przycisk wstecz w systemie. Istniejąca klasa NavOptions
i integracja z rekordami <action>
w pliku XML z grafem nawigacji zostały rozszerzone, aby obsługiwać zapisywanie i przywracanie stosu wstecz. (b/80029773)
W ramach tej zmiany metody NavigationUI
w klasach onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
i NavigationView.setupWithNavController()
automatycznie zapisują i przywracają stan wylistowanych miejsc docelowych, umożliwiając 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 poprzednich elementów. (Ie07ca)
Interfejsy API służące do zapisywania i przywracania stanu są dostępne na różnych platformach:
W pliku XML nawigacji element
<action>
może teraz używać atrybutów logicznychapp:popUpToSaveState
iapp:restoreState
, aby zapisywać stan wszystkich miejsc docelowych wylistowanych za pomocą elementuapp:popUpTo
, a następnie przywracać stan powiązany z miejscem docelowym przekazanym jako elementapp: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
navOptions
Kotlin DSL możesz dodać właściwości logicznerestoreState
isaveState
w komponenciepopUpTo
:// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
Aby ręcznie utworzyć obiekt
NavOptions
za pomocą metodyNavOptions.Builder
, możesz użyć metodysetRestoreState()
i nowego przeciążenia metodysetPopUpTo()
, która 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);
Automatyczne wywołania
popBackStack()
mogą teraz zawierać dodatkowy parametrsaveState
.
We wszystkich przypadkach NavController
zapisze i przywróci stan każdego NavBackStackEntry
, w tym wszystkie wystąpienia ViewModel
ograniczone do 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 do obsługi miejsc docelowych composable
w komponencie Navigation Compose oraz interfejsy FragmentNavigator
i DynamicFragmentNavigator
używane do obsługi miejsc docelowych <fragment>
w komponencie 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óry jednoznacznie identyfikuje miejsce docelowe. Chociaż wcześniej była używana tylko w komponencie Navigation Compose, teraz jest częścią podstawowych interfejsów API nawigacji. Jest to alternatywa dla używania identyfikatorów liczbowych podczas tworzenia grafu za pomocą Nawigacji w Kotlin DSL. (b/172823546)
Wszystkie interfejsy API, które wcześniej przyjmowały tylko identyfikator, mają teraz przeciążenie, które przyjmuje trasę String
. Obejmuje to navigate()
, popBackStack()
, popUpTo()
i getBackStackEntry()
.
Miało to pewne konsekwencje dla interfejsów API:
- Właściwość
popUpTo
w języku Kotlin DSL została wycofana na rzecz właściwościpopUpToId
. (I59c73, b/172823546) - Interfejs API
getStartDestination()
został wycofany na rzecz interfejsugetStartDestinationId()
. (I0887f, b/172823546)
Dla deweloperów, którzy przechodzą z poprzednich wersji Navigation Compose na Navigation Compose 2.4.0-alpha01
, oznacza to, że te importy metod 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łanie funkcji navBackStackEntry.destination.route
.
Zmiany w interfejsie API
- Wszystkie elementy nawigacji zostały przepisane w języku Kotlin. Poprawiono w nim możliwość zwracania wartości null przez klasy korzystające z typów ogólnych (takich jak podklasy
NavType
). Wszystkie funkcje rozszerzeń Kotlina, które wcześniej były częścią artefaktów-ktx
, zostały przeniesione do odpowiednich głównych artefaktów. Elementy-ktx
będą nadal publikowane, ale będą całkowicie puste. (b/184292145) NavDeepLinkBuilder
obsługuje teraz dodawanie do wygenerowanego zbioru reguł wielu różnych miejsc docelowych. (I3ee0d, b/147913689)- Dodawanie funkcji fabrycznych dla
DynamicNavHostFragment
(Icd515, b/175222619) - Unikalny identyfikator
NavBackStackEntry
jest teraz dostępny w ramach publicznego interfejsu API. (Ie033a) - Pola
name
iargument
oraz funkcje destrukturyzujące typuNamedNavArgument
są teraz publiczne. (#174, b/181320559) - Wprowadziliśmy nowe rozszerzenie
NavBackStackEntry#provideToCompositionLocals
, które udostępnia wartośćNavBackStackEntry
odpowiednim lokalnym elementom 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ło ono od KotlinPoet
1.8.0
. (#172, b/183990444)
Zmiany w zachowaniu
- Nawigacja zależy teraz od Lifecycle
2.3.1
i oznacza metodysetGraph()
,popBackStack()
,navigateUp()
inavigate()
, które aktualizująNavBackStackEntry
Lifecycle
, jako@MainThread
, dostosowując Nawigację do głównego wątku w drodze wprowadzonej w Lifecycle2.3.0
. (b/171125856) - Parsowanie argumentów typu Enum z precyzyjnych linków jest teraz nieczułe na wielkość liter, dzięki czemu precyzyjny link
http://www.example.com/red
pasuje do precyzyjnego linkuwww.example.com/{color}
, nawet jeśli typ Enum ma wartośćRED
. (#152, b/135857840)
Zgodność funkcji tworzenia
androidx.navigation:navigation-compose:2.4.0-alpha01
jest zgodna tylko z Compose w wersji1.0.0-beta07
lub nowszej.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że argumenty zastępcze na końcu miały pierwszeństwo przed precyzyjnymi linkami, które mają pasujący przyrostek. (#153, b/184072811)
NavHostFragment
obsługuje teraz niestandardowe nawigacje, które używają tego samego@Navigator.Name("dialog")
co domyślnaDialogFragmentNavigator
. (Ib1c2c, b/175979140)- Ulepszono działanie funkcji
NavigatorProvider#addNavigator
, aby zapewnić, że jej wielokrotne wywoływanie z tym samym wystąpieniem nie powoduje problemów. (#176, b/187443146)
Wkład zewnętrzny
- Dziękujemy simonschiller za dodanie obsługi Safe Args generującej metodę
fromSavedStateHandle()
dla każdej klasyNavArgs
. (#122, b/136967621) - Dziękujemy Bradleycorn za zignorowanie wielkości liter podczas parsowania argumentów typu Enum z precyzyjnych linków. (#152, b/135857840)
- Dziękujemy użytkownikowi osipxd za rozwiązanie problemu polegającego na tym, że zmienne argumentów końcowych miały pierwszeństwo przed precyzyjnymi linkami, które mają pasujący sufiks. (#153, b/184072811)
- Dziękujemy tatocaster za zaktualizowanie Safe Args, aby zależało ono od KotlinPoet
1.8.0
. (#172, b/183990444) - Dziękujemy użytkownikowi jossiwolf za udostępnienie publicznie pól
name
iargument
oraz funkcji destrukturyzowania w funkcjiNamedNavArgument
. (#174, b/181320559) - Dziękujemy użytkownikowi jossiwolf za wprowadzenie nowego rozszerzenia
NavBackStackEntry#provideToCompositionLocals
, które zapewniaNavBackStackEntry
odpowiednim lokalnym elementom kompozycji. (#175, b/187229439) - Dziękujemy użytkownikowi jossiwolf za ulepszenie działania funkcji
NavigatorProvider#addNavigator
, aby jej wielokrotne wywoływanie z tą samą instancją nie powodowało problemów. (#176, b/187443146)
Nawigacja Compose w wersji 1.0.0
Wersja 1.0.0-alpha10
7 kwietnia 2021 r.
androidx.navigation:navigation-compose:1.0.0-alpha10
został zwolniony. Wersja 1.0.0-alpha10 zawiera te zatwierdzenia.
Zmiany w interfejsie API
NavHost
przyjmuje terazModifier
, który jest przekazywany do kontenera składanego, który zawiera docelowe elementy składane. (I85aca, b/175125483)
Poprawki błędów
NavHost
działa teraz nawet wtedy, gdy nie znalezionoOnBackPressedDispatcherOwner
. Dzieje się tak podczas wyświetlania podgląduNavHost
. (I7d8b4)- Funkcja tworzenia trasy w nawigacji zależy teraz od nawigacji
2.3.5
, co rozwiązuje problem z korzystaniem z elementuBackHandler
w miejscu docelowymNavHost
. (I7e63b, b/182284739)
Wersja 1.0.0-alpha09
10 marca 2021 r.
androidx.navigation:navigation-compose:1.0.0-alpha09
został zwolniony. Wersja 1.0.0-alpha09 zawiera te commity.
Zmiany w interfejsie API
- Funkcja
LocalViewModelStoreOwner.current
zwraca teraz wartośćViewModelStoreOwner
, która może być pusta, aby lepiej określić, czyViewModelStoreOwner
jest dostępna w bieżącej kompozycji. Interfejsy API, które wymagają parametruViewModelStoreOwner
, takie jakviewModel()
iNavHost
, nadal wywołują wyjątek, jeśli parametrViewModelStoreOwner
nie jest ustawiony. (Idf39a)
Poprawki błędów
- Navigation Compose zależy teraz od Navigation 2.3.4, która zawiera poprawkę dotyczącą próby ustawienia tego samego obiektu ViewModelStore po ustawieniu grafu. (I65c24, b/177825470)
Wersja 1.0.0-alpha08
24 lutego 2021 r.
androidx.navigation:navigation-compose:1.0.0-alpha08
został zwolniony. Wersja 1.0.0-alpha08 zawiera te commity.
Nowe funkcje
NavHost
wypełnia teraz obiektLocalSavedStateRegistryOwner
CompositionLocal wartościami obiektuNavBackStackEntry
tej lokalizacji, co zapewnia, że każdy stan zapisany bezpośrednio wSavedStateRegistry
zostanie zapisany i przywrócony wraz z tą lokalizacją. (I435d7, b/179469431)
Wersja 1.0.0-alpha07
10 lutego 2021 r.
androidx.navigation:navigation-compose:1.0.0-alpha07
został zwolniony. Wersja 1.0.0-alpha07 zawiera te commity.
Aktualizacje zależności
- Navigation Compose zależy teraz od Lifecycle ViewModel Compose 1.0.0-alpha01, aby zapewnić obsługę
viewModel()
dla miejsc docelowychcomposable
. (I7a374) NavHost
używa teraz nowego parametruLocalOnBackPressedDispatcherOwner
z wersji Activity-Compose 1.3.0-alpha01, aby pobrać parametrOnBackPressedDispatcher
ustawiony wNavController
. (I65b12)
Wersja 1.0.0-alpha06
28 stycznia 2021 roku
androidx.navigation:navigation-compose:1.0.0-alpha06
został zwolniony. Wersja 1.0.0-alpha06 zawiera te commity.
Zmiany w interfejsie API
- Dodano rozszerzoną metodę
getBackStackEntry(route: String)
w klasieNavController
, która zwraca powiązany obiektNavBackStackEntry
. (If8931)
Wersja 1.0.0-alpha05
13 stycznia 2021 r.
androidx.navigation:navigation-compose:1.0.0-alpha05
został zwolniony. Wersja 1.0.0-alpha05 zawiera te commity.
Zaktualizowano, aby zależało od Compose 1.0.0-alpha10.
Wersja 1.0.0-alpha04
16 grudnia 2020 roku
androidx.navigation:navigation-compose:1.0.0-alpha04
został zwolniony. Wersja 1.0.0-alpha04 zawiera te commity.
- Zaktualizowano w celu zapewnienia zgodności z Compose
1.0.0-alpha09
.
Wersja 1.0.0-alpha03
2 grudnia 2020 r.
androidx.navigation:navigation-compose:1.0.0-alpha03
został zwolniony. Wersja 1.0.0-alpha03 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że funkcje
popBackStack()
inavigateUp()
nie działały po zmianie konfiguracji lub po zakończeniu i ponownym utworzeniu procesu. (Icea47, b/173281473) - Przechodzenie do zagnieżdżonego grafu w gospodarzu nawigacji działa teraz prawidłowo. (I0948d, b/173647694)
Wersja 1.0.0-alpha02
11 listopada 2020 roku
androidx.navigation:navigation-compose:1.0.0-alpha02
został zwolniony. Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Komponent nawigacji obsługuje teraz opcje NavOptions do obsługi operacji popUpTo i launchSingleTop (If96c3, b/171468994)
- Dodaliśmy funkcję nawigacji, która zamiast identyfikatora przyjmuje trasę. Umożliwia to tworzenie zagnieżdżonych wykresów w składniku DSL funkcji nawigacji. (I1661d)
- startDestination znajduje się teraz przed trasą na liście parametrów NavHost (Ie620e).
- Teraz możesz tworzyć graf, używając trasy jako punktu początkowego lub docelowego poza komponentem NavHost. (Iceb75)
Wersja 1.0.0-alpha01
28 października 2020 r.
android.navigation:navigation-compose:1.0.0-alpha01
został zwolniony. Wersja 1.0.0-alpha01 zawiera te commity.
Nowe funkcje
Element navigation-compose
zapewnia integrację między komponentem nawigacji a Jetpack Compose. Używa funkcji @Composable
jako miejsc docelowych w aplikacji.
Ta pierwsza wersja zawiera:
- Komponent
NavHost
, który umożliwia tworzenie grafu nawigacji za pomocą Kotlin DSL. - Zakres cyklu życia,
ViewModel
i 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 w komponencie
rememberNavController()
icurrentBackStackEntryAsState()
konkretne pomocnicze komponenty, aby umożliwić przenoszenie stanu i połączenie komponentuNavController
z komponentami kompozytowymi spoza komponentuNavHost
(np. z paskiem nawigacyjnym na dole).
Więcej informacji znajdziesz w przewodniku po nawigacji w edytorze.
Wersja 2.3.5
Wersja 2.3.5
7 kwietnia 2021 r.
androidx.navigation:navigation-*:2.3.5
został zwolniony. Wersja 2.3.5 zawiera te commity.
Nowe funkcje
- Podczas nawigacji za pomocą elementu
NavDeepLinkRequest
lubUri
możesz teraz uzyskać dostęp do elementuUri
, działania i typu mime w wynikającym miejscu docelowym, uzyskując zamiar z argumentów za pomocą elementuKEY_DEEP_LINK_INTENT
, co odzwierciedla funkcję już dostępną w przypadku zewnętrznego linkowania głębokiego. (I975c3, b/181521877)
Poprawki błędów
OnBackPressedCallbacks
dodana do modułu rozsyłającego z użyciemNavBackStackEntry
jako LifecycleOwner, który teraz prawidłowo przechwytuje dane po zakończeniu cyklu życia aktywnościSTOPPED
, a potemSTARTED
(Iff94f, b/182284739)- Analizowanie domen precyzyjnych linków nie rozróżnia już wielkości liter, dzięki czemu
www.example.com
pasuje zarówno dowww.example.com
, jak i dowww.Example.com
. Pamiętaj, że w nazwach parametrów zapytania wielkość liter nadal ma znaczenie. (#144, b/153829033) - Naprawiono błąd
NullPointerException
, który mógł występować, gdy miejsce docelowe ma kilka argumentów domyślnych, które nie mogą być puste, a przechodzisz 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 jest teraz zależna od wtyczki Kotlin Gradle w wersji 1.4.31. (aosp/1661058, b/181156413)
Darowizna zewnętrzna
- Dziękujemy
bentrengrove
za prośbę o włączenie funkcji, która wyłącza rozróżnianie wielkości liter przy parsowaniu domen precyzyjnych linków. (#144, b/153829033)
Wersja 2.3.4
Wersja 2.3.4
10 marca 2021 r.
androidx.navigation:navigation-*:2.3.4
został zwolniony. Wersja 2.3.4 zawiera te commity.
Nowe funkcje
- Argumenty
ReferenceType
są teraz poprawnie analizowane, gdy są wysyłane jako część identyfikatora URI precyzyjnego linku. Ta funkcja obsługuje zarówno wartości całkowite, jak i wartości szesnastkowe z prefiksem0x
. (#127, b/179166693) - Argument
android:defaultValue
w przypadku funkcjiapp:argType="float"
obsługuje teraz wartości domyślne typu całkowitego, co pozwala na użycie argumentuandroid:defaultValue="0"
zamiast wymaganego wcześniej argumentu0.0
. (#117, b/173766247)
Poprawki błędów
- Naprawiono problem z zawieszaniem się instalacji podczas korzystania z obsługi funkcji dynamicznych w Nawigacji. (Ib27a7, b/169636207)
- Wywoływanie funkcji
setViewModelStore
lubsetLifecycleOwner
z tym samym obiektem, który został już ustawiony, będzie teraz bezczynne (Idf491, b/177825470) - Safe-Args dodaje teraz adnotacje tłumienia w odpowiednich metodach podczas używania języka Java. (I8fbc5, b/179463137)
Wkład zewnętrzny
- Dziękujemy
JvmName
za prośbę o przejęcie kodu, aby zapewnić poprawne parsowanie argumentówReferenceType
, gdy są wysyłane jako część identyfikatora URI linku do treści. (#127, b/179166693) - Dziękujemy
tatocaster
za prośbę o przesłanie kodu, która umożliwiła dodanie do argumentudefaultValue
wartości domyślnych typu całkowitego (int) w funkcjiapp:argType=”float”
. (#117, b/173766247)
Wersja 2.3.3
Wersja 2.3.3
27 stycznia 2021 r.
androidx.navigation:navigation-*:2.3.3
został zwolniony. Wersja 2.3.3 zawiera te commity.
Poprawki błędów
- Nie dochodzi już do awarii podczas wyświetlania
NavBackStackEntry
, zanim jegoLifecycle
zostanie przeniesiony doCREATED
. (Ie3ba3) - Rozwiązano regresję spowodowaną przez błąd b/171364502, w którym przejście do aktywności z wartością zasobu animacji
0
powodowało błądResourceNotFoundException
. (I7aedb, b/176819931)
Wersja 2.3.2
Wersja 2.3.2
2 grudnia 2020 r.
androidx.navigation:navigation-*:2.3.2
został zwolniony. Wersja 2.3.2 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy regresję w
NavigationUI
, w której korzystanie z miejsca docelowego<activity>
zonNavDestinationSelected
powodowało niemożność przejścia do Aktywności. (I22e34, b/171364502) - Rozwiązaliśmy problem, który powodował, że
navigation-dynamic-features-fragment
prowadziło do wielokrotnego przechodzenia do nowo zainstalowanego miejsca docelowego. (aosp/1486056, b/169636207) - Rozwiązaliśmy problem, który powodował, że podczas używania funkcji
launchSingleTop
do instancji funkcjiOnDestinationChangedListener
nie były wysyłane argumenty domyślne. (I2c5cb) - Rozwiązaliśmy problem, który powodował, że przejście do zagnieżdżonego grafu nawigacyjnego nie tworzyło nowego wystąpienia grafu na stosie. (Ifc831)
- Rozwiązaliśmy problem, który powodował, że użycie
navigate()
zpopUpTo
, które usuwało ostatni cel w grafie nawigacji, nie powodowało natychmiastowego zniszczenia i usunięcia samego grafu nawigacji z bieżącego stosu. (I910a3) - Navigation SafeArgs używa teraz wersji KotlinPoet 1.7.2, która obsługuje tryb jawnego interfejsu API w Kotlinie. (I918b5)
NavHostFragment.findNavController(Fragment)
sprawdza teraz także widok głównego elementu dekoracyjnego w DialogFragment, oprócz dotychczasowych kontroli hierarchii Fragment i hierarchii widoku Fragment. Umożliwia to testowanie fragmentów dialogu, które używają funkcji Nawigacja z użyciem elementówFragmentScenario
iNavigation.setViewNavController()
. (I69e0d)
Wersja 2.3.1
Wersja 2.3.1
14 października 2020 r.
androidx.navigation:navigation-*:2.3.1
został zwolniony. Wersja 2.3.1 zawiera te commity.
Nowe funkcje
- Domyślne zasoby animatora zostały dodane do interfejsu nawigacji i są zalecane zamiast domyślnych zasobów animacji. (b/167430145)
- Opcja NavOptions zastępuje teraz metody hashcode i equals (b/161586466).
- Nawigacja uwzględnia teraz bieżące miejsce docelowe w wyjątku IllegalArgumentException „No destination with ID”, co powinno ułatwić debugowanie programistom. (b/168311416)
Poprawki błędów
- Safe Args nie będzie już zawijać linii z zwracaną wartością, nawet jeśli wygenerowana nazwa klasy argumentów jest dłuższa niż 100 znaków. (b/168584987)
Zmiany w zależnościach
- Komponent
navigation-ui
zależy teraz od komponentu DrawerLayout 1.1.1, co zapewnia, że komponentNavigationUI
może otworzyć panel nawet wtedy, gdy używasz komponentuLOCK_MODE_LOCKED_CLOSED
lubLOCK_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.
androidx.navigation:navigation-*:2.3.0
został zwolniony. Wersja 2.3.0 zawiera te commity.
Najważniejsze zmiany od wersji 2.2.0
- Integracja z Modułem funkcji: elementy
navigation-dynamic-features-runtime
inavigation-dynamic-features-fragment
umożliwiają nawigację do miejsc docelowych zdefiniowanych w Modułach funkcji. W razie potrzeby automatycznie obsługują one instalację tych modułów. Więcej informacji znajdziesz w artykule Przechodzenie między modułami funkcji. - Testowanie nawigacji: artefakt
navigation-testing
udostępnia elementTestNavHostController
, który pozwala ustawić bieżący cel i sprawdzać stos wsteczny po operacjach nawigacyjnych. Więcej informacji znajdziesz w artykule Testowanie nawigacji. - Zwracanie wyniku: obiekt
NavBackStackEntry
powiązany z każdą lokalizacją w nawigacji na stosie wstecznym umożliwia teraz dostęp do obiektuSavedStateHandle
, który jest odpowiedni do przechowywania niewielkich ilości zapisanego stanu, które powinny być powiązane z konkretnym wpisem na stosie wstecznym. Więcej informacji znajdziesz w artykule Zwracanie wyniku do poprzedniego miejsca docelowego. - Obsługa
NavigationUI
wOpenable
: wszystkie wystąpieniaDrawerLayout
wNavigationUI
zostały zastąpione bardziej uniwersalnym interfejsemOpenable
dodanym w CustomView1.1.0
i wdrożonym przezDrawerLayout
w DrawerLayout1.1.0
. - Obsługa akcji i typu MIME w precyzyjnych linkach: oprócz obsługiwanego wcześniej typu
app:uri
precyzyjne linki obsługują teraz także typyapp:action
iapp:mimeType
.NavController
obsługuje teraz nawigację za pomocą dowolnej kombinacji tych pól za pomocą nowej klasyNavDeepLinkRequest
. Więcej informacji znajdziesz w artykule Nawigowanie za pomocą żądania NavDeepLinkRequest.
Znane problemy
- Obsługa działań związanych z precyzyjnymi linkami i typów MIME nie jest jeszcze dostępna w Manifest Merger. Do czasu ukończenia tych prac wszystkie wygenerowane elementy
<intent-filter>
z elementu<nav-graph>
w pliku manifestu nie będą zawierać typu mime w elementach<data>
ani w elementach niestandardowych<action>
. Musisz ręcznie dodać do pliku manifestu odpowiedni element<intent-filter>
.
Wersja 2.3.0-rc01
10 czerwca 2020 r.
androidx.navigation:navigation-*:2.3.0-rc01
został zwolniony. Wersja 2.3.0-rc01 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy błąd
NullPointerException
, który występował podczas zastępowania wystąpienia miejsca docelowego bez argumentów innym wystąpieniem z argumentamisingleTop
. (b/158006669) - Wszystkie wyjątki
destination is unknown
zgłaszane przezNavController
zawierają teraz dodatkowe informacje debugowania, które ułatwiają określenie stanuNavController
. (b/157764916)
Wersja 2.3.0-beta01
20 maja 2020 r.
androidx.navigation:navigation-*:2.3.0-beta01
zostały opublikowane. Wersja 2.3.0-beta01 zawiera te commity.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że
Lifecycle
NavBackStackEntry
nie był prawidłowo aktualizowany po zakończeniu procesu. (b/155218371) - instancje
OnDestinationChangedListener
zarejestrowane przed wywołaniemsetGraph()
są teraz prawidłowo wysyłane do przywróconego miejsca docelowego po zakończeniu działania procesu. (b/155218371) - Gdy używasz funkcji
singleTop
, funkcjaNavBackStackEntry
ma teraz prawidłowo aktualizowane argumenty, które są wysyłane do wszystkich wystąpień funkcjiOnDestinationChangeListener
. (b/156545508)
Aktualizacje zależności
- Element
NavigationUI
zależy teraz od komponentu CustomView1.1.0-rc01
i elementu sterującego DrawerLayout1.1.0-rc01
. (aosp/1309696)
Wersja 2.3.0-alpha06
29 kwietnia 2020 r.
androidx.navigation:navigation-*:2.3.0-alpha06
został zwolniony. (te commity zawiera wersja 2.3.0-alpha06)
Nowe funkcje
- Precyzyjne linki zostały rozszerzone o obsługę
app:action
iapp:mimeType
, oprócz wcześniej dostępnej opcjiapp:uri
. Kontroler nawigacji 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 celów dynamicznej nawigacji. (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
androidx.navigation:navigation-*:2.3.0-alpha05
został zwolniony. Wersja 2.3.0-alpha05 zawiera te commity.
Nowe funkcje
- W przypadku dynamicznych elementów zawierających wykres za pomocą funkcji
<include-dynamic>
nie musisz już podawać wartościapp:graphPackage
. Zamiast tego zostanie użyta wartość domyślna, która zostanie utworzona przez dodanie sufiksumoduleName
do wartościapplicationId
po kropce. Jeśli chcesz dostosowaćgraphPackage
, możesz teraz użyć placeholdera${applicationId}
. (b/152696768) - Pakiet DSL Kotlina do korzystania z grafu nawigacji udostępnia teraz element
defaultArguments
Map
do działań, co odzwierciedla możliwość ustawiania wartości domyślnych elementów<action>
w plikach XML nawigacji. (b/150345605)
Poprawki błędów
- Z Nawigacja 2.2.2: naprawiono błąd
IllegalStateException
podczas tworzenia precyzyjnego linku do punktu początkowego na wykresie, gdy w Aktywności masz wiele wystąpieńNavHostFragment
. (b/147378752)
Aktualizacje zależności
- Nawigacja zależy teraz od Fragmentu
1.2.4
. (aosp/1277325) - Dynamiczna nawigacja zależy teraz od Play Core
1.7.2
. (aosp/1282257)
Wersja 2.3.0-alpha04
18 marca 2020 r.
androidx.navigation:navigation-*:2.3.0-alpha04
został zwolniony. Wersja 2.3.0-alpha04 zawiera te commity.
Nowe funkcje
- Dodano obsługę aktywności modułu funkcji i miejsc docelowych fragmentów w Nawigacji w Kotlin DSL. (b/148969800)
Zmiany w interfejsie API
- Klasa
DynamicExtras
nie używa już wzorca konstruktora i może być tworzona bezpośrednio. (aosp/1253671) - Konstruktor metody
DynamicActivityNavigator
przyjmuje teraz obiektContext
, a nieActivity
. (aosp/1250252)
Poprawki błędów
NavigationUI
nie ignoruje już pustych etykiet (np. miejsca docelowego zandroid:label=””
) i teraz prawidłowo ustawia pusty ciąg tekstowy jako tytuł. (b/148679860)
Aktualizacje zależności
- Elementy funkcji dynamicznych nawigacji są teraz zależne od Play Core
1.6.5
. (b/149556401)
Wersja 2.3.0-alpha03
4 marca 2020 r.
androidx.navigation:navigation-*:2.3.0-alpha03
został zwolniony. Wersja 2.3.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- Zamiast korzystać z konkretnej klasy
DrawerLayout
,AppBarConfiguration
używa teraz interfejsuOpenable
wprowadzonego w CustomView1.1.0-alpha02
(któryDrawerLayout
implementuje w ramach DrawerLayout1.1.0-alpha04
), co umożliwia korzystanie z niestandardowych implementacjiOpenable
w komponencieNavigationUI
. (b/129030452)
Poprawki błędów
- Reguły
navigation-common-ktx
ProGuard zachowują teraz tylko używane klasyNavArgs
, a nie wszystkie wystąpieniaNavArgs
. (b/150213558)
Zmiany w zależnościach
- Komponent Nawigacja nie jest już zależny od Core
1.2.0
, a obecnie zależy od Core1.1.0
. Dzięki temu deweloperzy nie będą musieli przechodzić na nowszą wersję, ponieważ Nawigacja nie jest zależna od nowych interfejsów API w Core1.2.0
.
Wersja 2.3.0-alpha02
19 lutego 2020 r.
androidx.navigation:navigation-*:2.3.0-alpha02
został zwolniony. Wersja 2.3.0-alpha02 zawiera te commity.
Nowe funkcje
- Pole
NavBackStackEntry
umożliwia teraz dostęp do polaSavedStateHandle
, które jest odpowiednie do przechowywania niewielkich ilości zapisanego stanu, który powinien być powiązany z określonym wpisem w steku wywołań. Przykład zastosowania znajdziesz w artykule Zwracanie wyniku. (b/79672220)
Zmiany w interfejsie API
- Dodano wygodne metody
getCurrentBackStackEntry()
igetPreviousBackStackEntry()
, aby ułatwić pobieranieNavBackStackEntry
dla bieżącego i poprzedniego miejsca docelowego. (b/79672220)
Poprawki błędów
navigateUp()
przekazuje teraz argumenty bieżącego miejsca docelowego iKEY_DEEP_LINK_INTENT
poprzedniemu miejscu docelowemu podczas uruchamiania aplikacji na własnym stosie zadań. (b/147456890)
Zmiany w zależnościach
- Nawigacja zależy teraz od poziomu Core
1.2.0
.
Wersja 2.3.0-alpha01
5 lutego 2020 r.
androidx.navigation:navigation-*:2.3.0-alpha01
został zwolniony. Wersja 2.3.0-alpha01 zawiera te commity
Nowe funkcje
- Nowy artefakt
navigation-testing
udostępnia klasęTestNavHostController
. Ta klasa stanowi alternatywę dla mockaNavController
podczas testowania nawigacji i pozwala ustawić bieżący element docelowy oraz zweryfikować stos wsteczny po operacjach nawigacyjnych. (b/140884273) - Nowy element
navigation-dynamic-features-fragment
(oraz jego zależnośćnavigation-dynamic-features-runtime
) umożliwia uwzględnianie miejsc docelowych lub całych diagramów nawigacji (za pomocą elementu<include-dynamic>
) z modułów funkcji, co zapewnia płynną instalację modułów funkcji na żądanie podczas przechodzenia do tych miejsc docelowych. Więcej informacji znajdziesz w artykule Przechodzenie między modułami funkcji. (b/132170186)
Poprawki błędów
- W sekcji Nawigacja
2.2.1
: precyzyjne linki bez parametrów zapytań są teraz prawidłowo ignorowane, zamiast dołączane do elementów końcowych{argument}
lub niepasujących do precyzyjnego linku. (b/147447512) - W sekcji Nawigacja
2.2.1
: regułynavigation-ui
w ProGuard dotycząceDrawerArrowDrawable
zostały zaktualizowane, aby nie wymagałyandroid.enableJetifier=true
. (b/147610424) - W sekcji Nawigacja
2.2.1
: modułnavigation-common-ktx
ma teraz unikalną nazwę pakietu manifestu zamiast tej samej nazwy co modułnavigation-runtime-ktx
. (aosp/1141947)
Aktualizacje zależności
- Nawigacja
2.2.1
: funkcja nawigacji2.2.1
zależy teraz od stanów zapisanych Lifecycle ViewModel2.2.0
i Fragment1.2.1
.
Wersja 2.2.2
Wersja 2.2.2
15 kwietnia 2020 roku
androidx.navigation:navigation-*:2.2.2
zostały opublikowane. Wersja 2.2.2 zawiera te commity.
Poprawki błędów
- Naprawiono błąd
IllegalStateException
występujący podczas tworzenia precyzyjnego linku do punktu docelowego na początku wykresu, gdy w Aktywności masz wiele wystąpieńNavHostFragment
. (b/147378752) NavigationUI
nie ignoruje już pustych etykiet (np. miejsca docelowego zandroid:label=””
) i teraz prawidłowo ustawia pusty ciąg tekstowy jako tytuł. Ta funkcja została wcześniej opublikowana w wersji Nawigacja 2.3.0-alpha04. (b/148679860)- Reguły
navigation-common-ktx
ProGuard zachowują teraz tylko używane klasyNavArgs
, a nie wszystkie wystąpieniaNavArgs
. Ta funkcja została wcześniej opublikowana w wersji Nawigacja 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.
androidx.navigation:navigation-*:2.2.1
został zwolniony. Wersja 2.2.1 zawiera te zatwierdzenia:
Poprawki błędów
- Precyzyjne linki bez parametrów zapytania są teraz prawidłowo ignorowane, zamiast dołączania ich do elementów końcowych
{argument}
lub niepasowania do precyzyjnego linku. (b/147447512) - Reguły
navigation-ui
ProGuard dlaDrawerArrowDrawable
zostały zaktualizowane, aby nie wymagałyandroid.enableJetifier=true
. (b/147610424) - Moduł
navigation-common-ktx
ma teraz unikalną nazwę pakietu pliku manifestu, zamiast tej samej nazwy co modułnavigation-runtime-ktx
. (aosp/1141947)
Aktualizacje zależności
- Nawigacja
2.2.1
zależy teraz od Lifecycle ViewModel SavedState2.2.0
i Fragment1.2.1
.
Wersja 2.2.0
Wersja 2.2.0
22 stycznia 2020 r.
androidx.navigation:navigation-*:2.2.0
został zwolniony. 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 grafu nawigacji w back stacku. Zwrócony obiektNavBackStackEntry
zawiera obiektLifecycleOwner
sterowany przez funkcję Nawigacja, obiektViewModelStoreOwner
(ten sam, który zwraca funkcjaNavController.getViewModelStoreOwner()
) oraz obiektSavedStateRegistryOwner
, a także argumenty użyte do uruchomienia tego miejsca docelowego. - Łączenie Lifecycle ViewModel z SavedState:
SavedStateViewModelFactory
jest teraz domyślną fabryką używaną podczas korzystania zby navGraphViewModels()
lub konstruktoraViewModelProvider
zViewModelStoreOwner
zwracanym przezNavController.getBackStackEntry()
lubNavController.getViewModelStoreOwner()
. - Obsługa parametrów zapytań w precyzyjnych linkach: precyzyjne linki z parametrami zapytań obsługują teraz zapytania z przetasowanymi parametrami. Argumenty, które mają wartość domyślną lub mogą być puste, są teraz opcjonalne podczas dopasowywania precyzyjnych linków.
- Ulepszona obsługa animacji:
NavHostFragment
korzysta teraz zFragmentContainerView
z Fragment 1.2.0, co rozwiązuje problemy z kolejnością animacji i z przesyłaniem do fragmentów wstawionych okien.
Wersja 2.2.0-rc04
18 grudnia 2019 r.
androidx.navigation:navigation-*:2.2.0-rc04
został zwolniony. Wersja 2.2.0-rc04 zawiera te zatwierdzenia:
Poprawki błędów
- Dostosowano domyślne animacje zanikania używane przez
navigation-ui
, aby pasowały do dostosowanych animacji zanikania w Fragment1.2.0-rc04
. (b/145769814)
Wersja 2.2.0-rc03
4 grudnia 2019
androidx.navigation:navigation-*:2.2.0-rc03
został zwolniony. Wersja 2.2.0-rc03 zawiera te zatwierdzenia:
Poprawki błędów
- Rozwiązano problem z analizowaniem linków głębokich podczas używania parametrów zapytania i argumentu jako ostatniej części ścieżki, który uniemożliwiał przeanalizowanie więcej niż 1 znaku ostatniego argumentu ścieżki. (b/144554689)
- Rozwiązaliśmy problem z analizowaniem precyzyjnych linków, w którym parametry opcjonalne otrzymywały wartość
"@null"
zamiastnull
. (b/141613546) - Funkcja
NavHostFragment
teraz prawidłowo przywraca wykres po zmianie konfiguracji, gdy jest używana z funkcjąFragmentContainerView
. (b/143752103)
Zmiany w zależnościach
- Nawigacja zależy teraz od odpowiednich elementów: Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
, Activity1.1.0-rc03
i Fragment1.2.0-rc03
.
Wersja 2.2.0-rc02
7 listopada 2019 r.
androidx.navigation:navigation-*:2.2.0-rc02
został zwolniony. Wersja 2.2.0-rc02 zawiera te zatwierdzenia:
Zmiany w zależnościach
- 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
jest publikowany bez zmian od 2.2.0-beta01
. Wersja 2.2.0-rc01 zawiera te zatwierdzenia:
Wersja 2.2.0-beta01
9 października 2019 r.
androidx.navigation:navigation-*:2.2.0-beta01
został zwolniony. Wersja 2.2.0-beta01 zawiera te commity:
Nowe funkcje
NavDestination
i jego podklasy zastępują teraztoString()
, aby udostępniać bardziej przydatne informacje podczas debugowania. (b/141264986)
Zmiany w zachowaniu
- Dodatkowe parametry zapytania są teraz ignorowane podczas dopasowywania precyzyjnych linków, a nie powodują niepowodzenia dopasowania. (b/141482822)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że argumenty na ścieżce precyzyjnego linku były ignorowane, jeśli były też określone parametry zapytania. (b/141505755)
- Rozszerzenie Kotlina
navArgs()
wActivity
zawiera teraz lepszy komunikat o błędzie, gdy nie ma żadnych dodatków. (b/141408999) - Wygenerowane przez Safe Args klasy Java
Directions
zawierają teraz wartości domyślne. (b/141099045) - Generowane przez Safe Args klasy Java
Args
zawierają teraz wartości domyślne. (b/140123727) - Gdy używasz
Toolbar
,NavigationUI
nie animuje już zmiany tekstu podczas przechodzenia między 2 miejscami docelowymi najwyższego poziomu. (b/140848160)
Wersja 2.2.0-alpha03
18 września 2019 r.
androidx.navigation:navigation-*:2.2.0-alpha03
został zwolniony. Wersja 2.2.0-alpha03 zawiera te commity
Zmiany w zachowaniu
- Zadzwonienie pod numer
setViewModelStore()
po wywołaniusetGraph
powoduje terazIllegalStateException
. Wartość ta powinna być zawsze ustawiana przezNavHost
w ramach początkowej konfiguracji, aby zapewnić spójne miejsce na dane dla wszystkich instancjiNavBackStackEntry
.ViewModel
(aosp/1111821)
Poprawki błędów
- Rozwiązano problem z
ConcurrentModificationException
podczas używania instancjiViewModel
dołączonych do wielu różnych instancjiViewModelStore
z ograniczonym zakresem w grafach nawigacji. (aosp/1112257)
Wersja 2.2.0-alpha02
5 września 2019 r.
androidx.navigation:navigation-*:2.2.0-alpha02
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Precyzyjne linki z parametrami zapytania obsługują teraz zapytania z przetasowanymi parametrami. Argumenty, które mają wartość domyślną lub mogą być puste, są teraz opcjonalne w przypadku dopasowywania precyzyjnych linków. (b/133273839)
- Teraz możesz wywołać funkcję
NavController.getBackStackEntry()
, przekazując identyfikator miejsca docelowego lub grafu nawigacji na ostatnim poziomie stosu. Zwrócony obiektNavBackStackEntry
zawiera obiektLifecycleOwner
sterowany przez funkcję Nawigacja, obiektViewModelStoreOwner
(ten sam, który zwraca funkcjaNavController.getViewModelStoreOwner()
) oraz obiektSavedStateRegistryOwner
, 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ł niepowodzenie dodawania
NavHostFragment
doViewPager2
z użyciemIllegalArgumentException
. (b/133640271) NavInflater
nie wywołuje już niepotrzebnie funkcjigetResourceName()
, co przyspiesza inflację nawet o 40%. (b/139213740)
Wersja 2.2.0-alpha01
7 sierpnia 2019 r.
androidx.navigation:navigation-*:2.2.0-alpha01
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
SavedStateViewModelFactory
jest teraz domyślną fabryką używaną podczas wywoływania funkcjiby navGraphViewModels()
lub konstruktoraViewModelProvider
z argumentemViewModelStoreOwner
zwracanym przezNavController.getViewModelStoreOwner()
. (b/135716331)
Zmiany w interfejsie API
- W sekcji Nawigacja
2.1.0-rc01
: wycofany interfejs APIgetViewModelStore()
w usługachNavController
, wprowadzony w wersji2.1.0-alpha02
, został usunięty. (aosp/1091021)
Poprawki błędów
NavHostFragment
używa terazFragmentContainerView
, co rozwiązuje problemy z kolejnością animacji i z przesyłaniem wstawionych okien do fragmentów. (b/137310379)
Wersja 2.1.0
Wersja 2.1.0
5 września 2019 r.
androidx.navigation:navigation-*:2.1.0
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Ważne zmiany od wersji 2.0.0
- Zakres ViewModels ograniczony do grafu nawigacji: teraz możesz tworzyć widoki ViewModels, które są ograniczone do poziomu grafu nawigacji, za pomocą obiektu delegowanego
by navGraphViewModels()
dla użytkowników Kotlina korzystających z bibliotek-ktx
lub za pomocą interfejsu APIgetViewModelStoreOwner()
dodanego doNavController
. Więcej informacji znajdziesz w artykule Udostępnianie danych związanych z interfejsem użytkownika między miejscami docelowymi. - Miejsca docelowe dialogu: możesz teraz tworzyć miejsca docelowe
<dialog>
, które będą wyświetlaćDialogFragment
, gdynavigate
do nich przejdziesz.NavHostFragment
domyślnie obsługuje miejsca docelowe dialogu. Więcej informacji znajdziesz w artykule Tworzenie strony docelowej z fragmentu dialogowego. - Nawigacja za pomocą adresu URI: możesz teraz
navigate
za pomocąUri
, który używa<deepLink>
dodanego do miejsca docelowego, aby nawigować do niego. Więcej informacji znajdziesz w artykule Nawigowanie za pomocą Uri. - NavHostController: interfejsy API używane do tworzenia niestandardowych
NavHost
zostały przeniesione doNavHostController
, co umożliwia implementacjom łączenieNavController
z hostingiemLifecycleOwner
,OnBackPressedDispatcher
iViewModelStore
.
Wersja 2.1.0-rc01
7 sierpnia 2019 r.
androidx.navigation:navigation-*:2.1.0-rc01
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Wycofany interfejs API
getViewModelStore()
w wersjiNavController
, wprowadzony w wersji2.1.0-alpha02
, został usunięty. (aosp/1091021)
Wersja 2.1.0-beta02
19 lipca 2019 r.
androidx.navigation:*:2.1.0-beta02
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
- Usunięto niezamierzoną zależność od jacoco, która została wprowadzona w
2.1.0-beta01
. (b/137782950)
Wersja 2.1.0-beta01
17 lipca 2019 r.
androidx.navigation:*:2.1.0-beta01
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
NavigationUI
teraz animuje usuwanie przycisku W górę, gdy używaszsetupWithNavController()
zToolbar
lubCollapsingToolbarLayout
. (b/131403621)
Poprawki błędów
- Rozwiązaliśmy problem z synchronizacją podczas używania wielu fragmentów NavHost w tym samym kontenerze z użyciem
findNavController()
. (b/136021571)
Wersja 2.1.0-alpha06
2 lipca 2019 r.
androidx.navigation:*:2.1.0-alpha06
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Atrybut
app:navGraph
uż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 umożliwić integrację z panelem gospodarza w Edytorze nawigacji. (b/133880955)
Zmiany w interfejsie API
- Interfejs API
getViewModelStore()
w usłudzeNavController
został wycofany na rzecz nowej metodygetViewModelStoreOwner()
, która zwraca obiektViewModelStoreOwner
. (aosp/987010) - Wdrożenie miejsc docelowych okna pływającego, takich jak miejsca docelowe
<dialog>
, zostało uogólnione w interfejsie markeraFloatingWindow
, który jest teraz stosowany we wszystkich miejscach docelowych<dialog>
. Metody NavigationUI służące do interakcji z górnym paskiem aplikacji ignorują teraz miejsca doceloweFloatingWindow
. (b/133600763)
Zmiany w zachowaniu
- Nawigacja jest teraz prawidłowo synchronizowana z tym, co widać na ekranie podczas korzystania z miejsca docelowego
<dialog>
. W rezultacie nawigacja automatycznie wyświetla miejsca docelowe<dialog>
, gdy nawigujesz do miejsca docelowego, które nie jest miejscem docelowym dialogu ani aktywności, np.<fragment>
. (b/134089818)
Poprawki błędów
- Nawigacja teraz tłumi animację, która występuje podczas odtwarzania aktywności podczas obsługi precyzyjnego linku, naprawiając błysk wizualny. (b/130362979)
- Naprawiono błąd polegający na tym, że stos elementów wstecz w nawigacji był niezsynchronizowany podczas usuwania fragmentu, gdy dodawany był początkowy fragment. (b/133832218)
Wersja 2.1.0-alpha05
5 czerwca 2019 r.
androidx.navigation:*:2.1.0-alpha05
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Zmiany w interfejsie API
- Interfejsy API związane z hostem w usłudze
NavController
zostały przemianowane i przeniesione do nowej podklasyNavController
,NavHostController
. (aosp/966091) - Metoda
NavController
setHostOnBackPressedDispatcherOwner()
została zastąpiona metodąNavHostController
setOnBackPressedDispatcher()
i teraz wymaga wywołania metodysetLifecycleOwner()
. (aosp/965409) NavHostController
zawiera teraz metodęenableOnBackPressed(boolean)
, która zastępuje klasęNavHostOnBackPressedManager
zwracaną wcześniej przez funkcjęsetHostOnBackPressedDispatcherOwner()
. (aosp/966091)
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że po przejściu do strony za pomocą identyfikatora URI stos wsteczny nie był prawidłowy. (b/132509387)
- Precyzyjne linki obsługiwane automatycznie przez kontroler nawigacji są teraz wywoływane tylko raz. (b/132754763)
Wersja 2.1.0-alpha04
16 maja 2019 r.
androidx.navigation:*:2.1.0-alpha04
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Poprawki błędów
NavHostFragment
prawidłowo uwzględniaapp:defaultNavHost
podczas przechwytywania zdarzeń przycisku Wstecz systemu, co naprawia regresję w Nawigacji2.1.0-alpha03
. b/132077777DialogFragmentNavigator
poprawnie obsługuje teraz operacjepopBackStack()
inavigateUp()
. b/132576764- Rozwiązaliśmy problem
IllegalStateException: unknown destination during restore
występujący podczas wielokrotnego przechodzenia między zagnieżdżonymi wykresami. b/131733658
Wersja 2.1.0-alpha03
7 maja 2019 r.
androidx.navigation:*:2.1.0-alpha03
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Znane problemy
- Komponent NavHostFragment nadal przechwytuje przycisk Wstecz systemu, mimo użycia
app:defaultNavHost="false"
b/132077777
Nowe funkcje
- Możesz teraz tworzyć
<dialog>
, które będą wyświetlaćDialogFragment
, gdynavigate
do nich przejdziesz.NavHostFragment
domyślnie obsługuje miejsca docelowe dialogów. b/80267254 - Oprócz wywoływania
navigate
z identyfikatorem zasobu lub wystąpieniemNavDirections
możesz teraz nawigować za pomocąUri
, który używa<deepLink>
dodany do miejsca docelowego, aby nawigować do prawidłowego miejsca docelowego. b/110412864
Zmiany w zachowaniu
- Domyślne animacje udostępniane przez NavigationUI zostały przyspieszone z 400 ms do 220 ms, aby dopasować je do domyślnej szybkości animacji aktywności i fragmentów. b/130055522
Zmiany w interfejsie API
- Metoda
createFragmentNavigator()
klasyNavHostFragment
została wycofana, a jej funkcjonalność została przeniesiona do nowej metodyonCreateNavController()
, aby było jasne, że jest to właściwy punkt wejścia do dodawania niestandardowych obiektów Navigator podczas tworzenia podklas klasyNavHostFragment
. b/122802849 - Do metody
NavDestination
dodano metodęhasDeepLink()
, która umożliwia sprawdzenie, czy daneUri
może obsłużyć to miejsce docelowe. W przypadku metodyNavGraph
można sprawdzić 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 NavHostFragment
przechwytuje teraz zdarzenia systemu Wstecz za pomocą funkcjiOnBackPressedDispatcher
, co rozwiązuje problem z warunkową nawigacją w metodach cyklu życia fragmentu po powrocie do fragmentu. b/111598096- W przypadku Safe Args argument
android:defaultValue=”@null”
z nieokreślonymapp:argType
jest teraz prawidłowo interpretowany jako argumentstring
. b/129629192
Wersja 2.1.0-alpha02
3 kwietnia 2019 r.
androidx.navigation:*:2.1.0-alpha02
został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.
Nowe funkcje
- Teraz możesz tworzyć modele ViewModel, które są ograniczone do poziomu grafu nawigacji za pomocą obiektu zastępczego usługi
by navGraphViewModels()
dla użytkowników Kotlina lub za pomocą interfejsugetViewModelStore()
dodanego doNavController
. b/111614463
Zmiany w interfejsie API
- Możesz teraz dodać
app:targetPackage
do miejsca docelowego<activity>
, aby ograniczyć dopasowywanie nazwy pakietu. Obsługujeapp:targetPackage="${applicationId}"
do ograniczania pakietu do własnego identyfikatora aplikacji. b/110975456
Poprawki błędów
- Wartość
android:name
dla miejsc docelowych<activity>
nie jest już analizowana w klasie w momencie jej tworzenia, co zapobiega wyjątkom ClassNotFoundExceptions 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 w zależnościach
- Nawigacja zależy teraz od
androidx.core:core:1.0.1
iandroidx.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ą metodę
Navigation.createNavigateOnClickListener(NavDirections)
jako alternatywę dla tworzenia listenera kliknięć za pomocą identyfikatora zasobu i paczki. b/127631752 - Właściwość
FragmentNavigator.instantiateFragment
została wycofana. Domyślna implementacja używa teraz funkcjiFragmentFactory
do tworzenia instancji fragmentów. b/119054429
Poprawki błędów
- Nawigacja nie wysyła już wartości null do funkcji
Bundle
, gdy do miejsca docelowego są dołączone argumenty. Rozwiązano w ten sposób problem z użyciem funkcjiandroid: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
została opublikowana bez zmian w porównaniu z wersją 2.0.0-rc02
.
Wersja 2.0.0-rc02
6 marca 2019 r.
Navigation 2.0.0-rc02 zawiera nowe elementy z identyfikatorem grupy androidx.navigation
oraz zmienia zależności na ich odpowiedniki w AndroidX.
Zalecenia 2.0.0-rc02 są identyczne z zaleceniami 1.0.0-rc02, a aby zaktualizować wersję 1.0.0-rc02, nie musisz wprowadzać żadnych zmian w kodzie, poza aktualizacją zależności, aby pasowały do nowych zależności.
Aby korzystać z wersji 2.X biblioteki Navigation, musisz przeprowadzić migrację projektu na AndroidX. Wersja stabilna nawigacji 1.0 będzie ostatnią wersją korzystającą z zależności biblioteki obsługi. Cała przyszła praca nad wersją 1.0 będzie oparta na AndroidX i będzie opierać się na stabilnej wersji 2.0.
Zależności sprzed AndroidX
W przypadku wersji Nawigacji z czasów poprzedzających 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 przypadku Safe args dodaj ścieżkę classpath w pliku top level 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
została opublikowana bez zmian w porównaniu z wersją 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 aplikacji Nawigacja. 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 graf główny nie miał identyfikatora b/126251695 navigateUp()
obsługuje teraz prawidłowo przechodzenie do zadania w aplikacji po wywołaniu po obsłudze precyzyjnego linku bezFLAG_ACTIVITY_NEW_TASK
b/126082008- Rozwiązaliśmy problem polegający na tym, że
ActivityNavigator.applyPopAnimationsToPendingTransition
nie stosował prawidłowej animacji zakończenia okna wyskakującego b/126237567 - Kod Kotlina wygenerowany przez Safe Args jest teraz odpowiednio zabezpieczany przed ucieczką słów kluczowych Kotlina, takich jak
in
ifun
, w nazwie pakietu powiązanego z klasąR
. b/126020455
Wersja 1.0.0-rc01
21 lutego 2019 r.
To jest wersja kandydująca do publikacji stabilnej wersji 1.0.0 nawigacji. Ta wersja zawiera jedną poprawkę błędu.
Poprawki błędów
- Rozwiązaliśmy problem z użyciem operacji nawigacji Fragments i
singleTop
(b/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ć argumentu
0
jako argumentuandroid:defaultValue
w przypadku argumentureference
.b/124248602
Zmiany w zachowaniu
- Dopasowania precyzyjnych linków są teraz traktowane priorytetowo w stosunku do precyzyjnych linków z dopasowaniem
.*
lub argumentów. b/123969518
Poprawki błędów
- Funkcje
popBackStack()
inavigateUp
zwracają teraz prawidłowo wartośćfalse
, gdy usuwają ostatni element z bieżącego stosu. Rozwiązano w ten sposób regresję wprowadzoną w wersji1.0.0-beta01
. b/123933201 - Nawigacja teraz prawidłowo ustawia
ClassLoader
podczas przywracania stanu zapisanego w przypadku instancji, co pozwala uniknąć problemów podczas używania niestandardowych klas w przypadku zapisanego stanuNavigator
lub w argumentach wysyłanych doNavDestination
. b/123893858 - Generowane przez Safe Args klasy NavArgs nie powodują już awarii podczas przywracania argumentu
Parcelable[]
ze stanu zapisanej instancji. b/123963545 - Funkcja 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 nawigacji. Od teraz interfejs API nawigacji powinien być stabilny do czasu wydania kolejnej wersji, chyba że wystąpi krytyczny problem. Ta wersja zawiera kilka poprawek błędów i zmian zachowania.
Zmiany w zachowaniu
- Nawigacja zapewnia teraz, że wartości domyślne argumentów są traktowane tak samo w czasie wykonywania i za pomocą Safe Args. W konsekwencji tylko argumenty z wartością domyślną
app:argType="reference"
mogą wskazywać na inny zasób (np.@color/colorPrimary
). Próba użycia wartości domyślnej odwołania z innymapp:argType
spowoduje wyjątek podczas analizowania pliku 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 Kotlina 1.3.20 aosp/888414
Poprawki błędów
- Argumenty bezpieczne można teraz używać w bibliotekach i modułach 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 zamiast tylko jednego miejsca docelowego naraz. b/123552990 - Rozwiązaliśmy problem polegający na tym, że stan
FragmentNavigator
był rozsynchronizowany ze stanemNavController
, co powodowało błądIllegalStateException
podczas próby przywrócenia stosu. b/123803044 - Rozwiązaliśmy problem polegający na tym, że strzałka wstecz z uchwytem
NavigationUI
nie była widoczna podczas używania ProGuarda z zaciemnieniem. b/123449431 - Kod wygenerowany przez Safe Args obsługuje teraz poprawnie użycie
app:argType
wskazującego stałą 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.
To jest wersja 1.0.0-alpha10
z poprawką, która rozwiązuje problem z Safe Args.
Poprawki błędów
- Rozwiązanie problemu, który powodował, że Safe Args nie importował klasy Directions powiązanej z działaniami globalnymi. b/123307342
Wersja 1.0.0-alpha10
23 stycznia 2019 r.
Znane problemy
- Safe Args nie może zaimportować klasy Directions powiązanej z działaniami globalnymi. b/123307342
Ta wersja zawiera zmiany API powodujące niezgodność. Zapoznaj się z sekcją Zmiany powodujące niezgodność.
Nowe funkcje
- Użytkownicy Kotlina mogą teraz używać delegata właściwości
by navArgs()
do leniwego uzyskiwania odwołania do klasyNavArgs
wygenerowanej przez Safe Args w klasieActivity
lubFragment
. b/122603367 - Safe Args umożliwia teraz generowanie kodu Kotlina przez zastosowanie wtyczki
androidx.navigation.safeargs.kotlin
. Kod Kotlina jest tworzony specjalnie dla modułów tylko w Kotlinie, przy użyciu argumentów domyślnych i klas niezmiennych zamiast wzorca konstruktora, który jest nadal dostępny za pomocą poprzedniego wtyczkiandroidx.navigation.safeargs
. b/110263087
Zmiany w zachowaniu
- Dopasowywanie precyzyjnych linków jest teraz preferowane w przypadku precyzyjnego linku, który ma najwięcej pasujących argumentów.b/118393029
- Wywołanie
setGraph()
w komponencieNavController
spowoduje zresetowanie stosu. b/111450672 - Nieznane precyzyjne linki nie powodują już błędu
IllegalStateException
, ale są ignorowane. Rozwiązano problemy z zagnieżdżonymi lub wielokrotnymiNavHostFragment
. b/121340440
Zmiany powodujące niezgodność
- Metoda
NavOptions.applyPopAnimationsToPendingTransition()
dotycząca stosowania animacji wyskakujących w aktywności została przeniesiona do metodyActivityNavigator
. b/122413117 - Safe Args zapobiega teraz duplikowaniu 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 - Generowane przez Safe Args klasy Directions nie mają już publicznego konstruktora – należy korzystać tylko z wygenerowanych statycznych metod.b/123031660
- Generowane przez Safe Args klasy
NavDirections
nie mają już publicznego konstruktora – powinny być generowane tylko za pomocą metod statycznych w wygenerowanych klasach Directions.b/122963206 - Zwrócony
Bundle
zNavDirections
getArguments()
jest teraz oznaczony jako@NonNull
, a nie@Nullable
. b/123243957
Poprawki błędów
NavDeepLinkBuilder
obsługuje teraz prawidłowo wiele jednoczesnychPendingIntent
do tego samego miejsca docelowego, używając przekazanych przez Ciebie argumentów do określenia unikalności. b/120042732- Fragment
NavController
poprawnie obsługuje teraz operacjepopBackStack()
, gdy używasz zagnieżdżonego fragmentuNavHostFragment
lub innych podrzędnych fragmentów z elementem wstecznym.b/122770335 NavigationUI
teraz poprawnie ustawia opis treści przycisku W górę. b/120395362- Generowane przez Safe Args klasy Directions teraz poprawnie obsługują działania globalne, które mają ten sam identyfikator co działanie na miejscu docelowym. b/122962504
- Generowane przez Safe Args klasy
NavDirections
mają teraz prawidłowo wartości równehashCode()
, gdyequals()
zwraca wartość true. b/123043662 FragmentNavigator
wyświetla teraz lepszy komunikat o błędzie, jeśli spróbujesz dodać niestandardową wartośćFragmentTransactions
do właściwościNavHostFragment
w elementachFragmentManager
. Należy zawsze używaćgetChildFragmentManager()
. b/112927148
Wersja 1.0.0-alpha09
18 grudnia 2018 r.
Ta wersja zawiera zmiany API powodujące niezgodność. Zapoznaj się z sekcją Zmiany powodujące niezgodność.
Postanowiliśmy nie kontynuować rozwoju artefaktu android.arch.navigation:navigation-testing
. Chociaż ta metoda sprawdza się w przypadku testów wewnętrznych aplikacji NavController
, zdecydowanie zalecamy stosowanie alternatywnych strategii testowania, takich jak symulowanie wystąpienia NavController
, aby sprawdzić, czy wywołania navigate()
są prawidłowe. To podejście jest szczegółowo omawiane w prezentacji dotyczącej pojedynczej aktywności na konferencji AndroidDevSummit 2018. Będziemy też pracować nad dodatkową dokumentacją dotyczącą testowania z użyciem funkcji Nawigacja.
Nowe funkcje
MenuItem
zmenuCategory="secondary"
nie będą już pojawiać się w pliku wyjściowym, gdy są używane z metodamiNavigationUI
.b/120104424AppBarConfiguration
umożliwia teraz ustawienie instancjiOnNavigateUpListener
, która zostanie wywołana, gdynavController.navigateUp()
zwróci wartośćfalse
. b/79993862 b/120690961
Zmiany powodujące niezgodność
- Gdy używasz
<argument>
zargType="reference"
, funkcja Nawigacja nie analizuje już odwołania, ale podaje sam identyfikator zasobu.b/111736515 onNavDestinationSelected()
teraz domyślnie wraca do punktu docelowego na początku wykresu nawigacyjnego, co zapewnia spójność z metodamisetup
. DodajmenuCategory="secondary"
doMenuItem
, aby uniknąć wyrzucania stosu. aosp/852869- Metody
fromBundle()
wygenerowanych klasArgs
przyjmują teraz niepustą wartośćBundle
zamiast zmiennejBundle
, która może przyjmować wartość pustą. aosp/845616
Poprawki błędów
- Argumenty są teraz prawidłowo parsowane z precyzyjnych linków jako
argType
, a nie zawsze jako ciągi znaków.b/110273284 - Nawigacja teraz prawidłowo eksportuje zasoby publiczne b/121059552
- Safe Args jest teraz zgodny z Android Gradle Plugin 3.4 Canary 4 lub nowszą wersją b/119662045
Wersja 1.0.0-alpha08
6 grudnia 2018 r.
Ta wersja zawiera zmiany API powodujące niezgodność. Zapoznaj się z sekcją Zmiany powodujące niezgodność.
Nowe funkcje
- Etykiety miejsc docelowych używane z metodami
NavigationUI
będą teraz automatycznie zastępować wystąpienia{argName}
w funkcjiandroid:label
odpowiednim argumentem.b/80267266 - Nawigacja zależy teraz od biblioteki wsparcia 28.0.0 b/120293333
Zmiany powodujące niezgodność
- Nazwa
OnNavigatedListener
została zmieniona naOnDestinationChangedListener
b/118670572 - Funkcja
OnDestinationChangedListener
przekazuje teraz również argumentBundle
aosp/837142 - Atrybuty
app:clearTask
iapp:launchDocument
oraz powiązane z nimi metody zostały usunięte. Użyjapp:popUpTo
w głównym węźle swojego diagramu, aby usunąć wszystkie miejsca docelowe ze stosu. b/119628354 ActivityNavigator.Extras
używa teraz wzorcaBuilder
i dodaje możliwość ustawiania flagIntent.FLAG_ACTIVITY_
aosp/828140- Nazwa
NavController.onHandleDeepLink
została zmieniona nahandleDeepLink
aosp/836063 - Wiele klas i metod, które nie są przeznaczone do tworzenia podklas, takich jak
NavOptions
,NavInflater
,NavDeepLinkBuilder
iAppBarConfiguration
, zostało oznaczonych jakofinal
.aosp/835681 - Usunięto nieużywaną metodę
NavHostFragment.setGraph()
aosp/835684 - Metoda
NavigationUI.navigateUp(DrawerLayout, NavController)
, która została wycofana, została usunięta. aosp/835684 - Tworzenie fragmentów zostało przeniesione do
FragmentNavigator
, dzięki czemu łatwiej jest delegować tworzenie fragmentów doFragmentFactory
. b/119054429 - Konstruktor
NavGraphNavigator
nie przyjmuje już argumentuContext
aosp/835340 - NavigatorProvider jest teraz klasą, a nie interfejsem. Funkcja
NavigatorProvider
zwracana przezgetNavigatorProvider()
nie zmieniła się. aosp/830660 NavDestination.navigate()
został(a) usunięty(a). Zadzwoń pod numernavigate()
z numeruNavigator
. aosp/830663- Znacząca zmiana
Navigator
, która eliminuje konieczność korzystania z funkcjiOnNavigatorNavigatedListener
i zamiast tego pozwala funkcjinavigate
zwracaćNavDestination
, do którego nastąpiło przejście. - instancje
Navigator
nie mogą już wysyłać zdarzeń pop doNavController
. Rozważ użycieOnBackPressedCallback
do przechwytywania naciśnięć przycisku Wstecz i wywołania funkcjinavController.popBackStack()
. aosp/833716
Poprawki błędów
- Funkcja
popUpTo
działa teraz konsekwentnie, gdy miejsce docelowe to element<navigation>
b/116831650 - Naprawiliśmy kilka błędów, które powodowały
IllegalArgumentException
podczas używania zagnieżdżonych wykresów b/118713731 b/113611083 b/113346925 b/113305559 - Atrybut
dataPattern
miejsc docelowych<activity>
będzie teraz wypełniać argumenty z argumentów innych niż ciąg znaków, wywołując funkcjętoString()
.b/120161365
Safe Args
- Safe Args obsługuje obiekty serializacji, w tym wartości enum. Typy wyliczeniowe mogą mieć wartość domyślną ustawioną 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 adnotacje
@Override
w odpowiednich miejscach.b/117145301
Wersja 1.0.0-alpha07
29 października 2018 r.
Nowe funkcje
- Nowa klasa AppBarConfiguration umożliwia dostosowanie miejsc docelowych, które są uważane za miejsca docelowe najwyższego poziomu. Więcej informacji znajdziesz w zaktualizowanej dokumentacji. b/117333663
- Teraz możesz przekazywać argumenty do punktu początkowego na wykresie. 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-ktx
został włączony do modułunavigation-testing artifact
i nie będzie już publikowany. - Element
navigation-testing
jest teraz zależny od standardowej biblioteki Kotlin. Interfejs API został zmieniony, aby był bardziej zgodny z konwencjami języka Kotlin, ale nadal możesz go używać do testów napisanych w języku Java. - Nie są już obsługiwane grafy nawigacyjne zarejestrowane w pliku manifestu metadanych.b/118355937
- Nie można już dołączać działań do miejsc docelowych <activity>. aosp/785539
Poprawki błędów
- Precyzyjne linki poprawnie analizują teraz parametry zapytań.b/110057514
- Miejsca docelowe aktywności teraz prawidłowo stosują wszystkie animacje wejścia i wyjścia. b/117145284
- Naprawiono awarię występującą po zmianach konfiguracji podczas używania niestandardowych nawigatorów. b/110763345
Safe Args
- Argumenty bezpieczne mają teraz naprawioną zależność od wtyczki Androida do obsługi Gradle w wersji 3.2.1. b/113167627
- Wskazania można teraz generować dla klas wewnętrznych.b/117407555
- Rozwiązanie problemu z generowaniem tras na liście <include>. b/116542123
Wersja 1.0.0-alpha06
20 września 2018 r.
Nowe funkcje
- Przejścia między elementami wspólnymi w przypadku fragmentów i miejsc docelowych działań są teraz obsługiwane b/79665225. Więcej informacji znajdziesz w artykule Wdrażanie nawigacji za pomocą komponentu architektury nawigacji.
- Wybranie elementu w
NavigationView
spowoduje zamknięcie wszystkich kart dolnych, które go zawierają b/112158843
Zmiany w interfejsie API
- Zmiany wprowadzające: metoda Navigatora
navigate()
przyjmuje teraz parametrNavigator.Extras
. - Metoda
getGraph()
kontrolera nawigacji jest terazNonNull
b/112243286
Poprawki błędów
NavigationUI.setupWithNavController()
nie powoduje już wycieku widoków, jeśli jest używany z widokami z pojedynczych miejsc docelowych b/111961977- Navigator
onSaveState()
jest teraz wywoływany tylko raz b/112627079
Safe Args
- Klasy wskazówek miejsca docelowego nawigacji rozszerzają teraz klasę wskazówek swojego nadrzędnego, jeśli taka 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
- Naprawiono błąd powodujący nieprawidłowe działanie stosu. b/111907708
- Naprawiono błąd w
equals()
klasy wygenerowanych argumentów. b/111450897 - Naprawić błąd kompilacji w Safe Args. b/109409713
- Naprawić konwersję z identyfikatorów zasobów na nazwy w języku Java b/111602491
- Poprawiono komunikaty o błędach dotyczące możliwości wystąpienia wartości null w pluginie Safe Args.
- Dodaj brakujące adnotacje dotyczące możliwości wystąpienia wartości null.
Wersja 1.0.0-alpha04
19 lipca 2018 r.
Nawigacja 1.0.0-alpha04
i powiązana wtyczka Safe Args do Gradle zawierają wiele zmian w interfejsie API, zmian zachowania i poprawek błędów.
Zmiany w interfejsie API i zachowaniu
- Element NavHostFragment zawsze ustawia bieżący fragment jako główny fragment nawigacji, co zapewnia, że menedżer podrzędny fragmentu jest usuwany przed usunięciem zewnętrznego elementu NavController b/111345778
Safe Args
- Zmiany powodujące niezgodność:
app:type
został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 argumentów potwierdzają teraz, że atrybuty
NonNull
nie są puste b/111451769 - Do klas generowanych przez funkcje NavDirections i Args dodano dodatkowe adnotacje
NonNull
b/111455455 b/111455456
Poprawki błędów
- Rozwiązaliśmy problem z przyciskiem powrotu systemu po utworzeniu precyzyjnego linku do fragmentu docelowego b/111515685
Wersja 1.0.0-alpha03
12 lipca 2018 r.
Nawigacja 1.0.0-alpha03
i powiązana wtyczka Safe Args do Gradle zawierają wiele zmian w interfejsie API, zmian zachowania 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
- Funkcja popBackStack() zwraca teraz wartość false, gdy stos wstecz jest pusty lub podany identyfikator miejsca docelowego nie znajduje się w stosie wstecz b/110893637
- FragmentNavigator ignoruje teraz operacje nawigacji po zapisaniu stanu przez FragmentManagera, co zapobiega wyjątkom „Nie można wykonać tej czynności po wywołaniu onSaveInstanceState” b/110987825
Safe Args
- Zmiany w funkcjonalności: znaki niealfanumeryczne w nazwach działań i argumentów zostaną zastąpione wielkimi literami w odpowiednich nazwach metod NavDirections.
- Przykład:
DemoController.index
zmieni się nasetDemoControllerIndex
b/79995048. - Przykład:
action_show_settings
stanie sięactionShowSettings
b/79642240.
- Przykład:
- Zmiany wprowadzające: argumenty są teraz domyślnie traktowane jako niepusty. Aby umożliwić stosowanie wartości null w przypadku ciągów znaków i argumentów parcelowalnych, dodaj
app:nullable="true"
b/79642307. - Możesz teraz używać
app:type="long"
z wartościami domyślnymi w formie „123L” b/79563966 - Argumenty parcelable są teraz obsługiwane przy użyciu pełnej nazwy klasy dla
app:type
. Jedyną obsługiwaną wartością domyślną jest"@null"
b/79563966 - Klasy argumentów implementują teraz
equals()
ihashCode()
b/79642246 - Wtyczkę Safe Args można teraz zastosować do projektów bibliotek b/80036553
- Wtyczka Safe Args może być teraz stosowana w projektach funkcji b/110011752
Poprawki błędów
- Rozwiązano problemy z przechodzeniem do metod cyklu życia fragmentu b/109916080
- Rozwiązaliśmy problemy z wielokrotnym przechodzeniem między zagnieżdżonymi wykresami b/110178671
- Rozwiązaliśmy problemy z użyciem elementu
setPopUpTo
w przypadku pierwszego miejsca docelowego na wykresie (błąd b/109909461). - Rozwiązaliśmy problem, który powodował, że wszystkie wartości
app:defaultValue
były przekazywane jako ciągi znaków. b/110710788 - aapt2 w pakiecie z wtyczką Android Gradle Plugin 3.2 Beta 01 dodaje teraz reguły zachowania dla każdego atrybutu
android:name
w plikach XML nawigacji (b/79874119). - Naprawiono wyciek pamięci podczas zastępowania domyślnego FragmentNavigatora b/110900142
Wersja 1.0.0-alpha02
7 czerwca 2018 r.
Zmiany w zachowaniu
FragmentNavigator
używa terazsetReorderingAllowed(true)
. b/109826220Nawigacja teraz dekoduje argumenty zanalizowane z precyzyjnych linków. b/79982454
Poprawki błędów
Naprawiono błąd
IllegalStateException
występujący podczas wywoływania metody navigate z metod cyklu życia Fragment. b/79632233Nawigacja zależy teraz od biblioteki pomocy 27.1.1, aby naprawić migotanie podczas korzystania z animacji. b/80160903
Naprawiono błąd
IllegalArgumentException
występujący podczas używania parametru defaultNavHost="true" jako fragmentu podrzędnego. b/79656847Rozwiązano błąd
StackOverflowError
występujący podczas korzystania z funkcji NavDeepLinkBuilder. b/109653065Rozwiązano błąd
IllegalArgumentException
występujący podczas przechodzenia z powrotem do zagnieżdżonego wykresu. b/80453447Rozwiązaliśmy problem z nakładającymi się fragmentami podczas używania
launchSingleTop
. b/79407969Nawigacja tworzy teraz poprawny syntetyczny stos z powrotem dla zagnieżdżonych wykresów. b/79734195
NavigationUI będzie teraz wyróżniać właściwy element, gdy użyjesz zagnieżdżonego grafu jako
MenuItem
. b/109675998
Zmiany w interfejsie API
Atrybut
clearTask
działań i powiązanego z nimi interfejsu API wNavOptions
został wycofany. b/80338878Atrybut
launchDocument
działań i powiązany z nimi interfejs API wNavOptions
zostały wycofane. b/109806636
Wersja 1.0.0-alpha01
8 maja 2018 r.
Nawigacja zapewnia ramy do tworzenia nawigacji w aplikacji. Ta pierwsza wersja to 1.0.0-alpha01
.