Nawigacja

Nawigacja to platforma do poruszania się między „miejscami docelowymi” w aplikacji na Androida, która udostępnia spójny interfejs API niezależnie od tego, czy miejsca docelowe są zaimplementowane jako fragmenty, aktywności czy inne komponenty.
Najnowsza aktualizacja Wersja stabilna Wersja kandydująca do publikacji Wersja Beta Wersja alfa
2 lipca 2025 r. 2.9.1 - - -

Deklarowanie zależności

Aby dodać zależność od Navigation, musisz dodać repozytorium Google Maven do projektu. Więcej informacji znajdziesz w repozytorium Maven Google.

Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle aplikacji lub modułu:

Groovy

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

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

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

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

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

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

Kotlin

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

dependencies {
  val nav_version = "2.9.1"

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

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

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

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

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

Safe Args

Aby dodać Safe Args do projektu, umieść w pliku najwyższego poziomu build.gradle ten element classpath:

Groovy

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

Kotlin

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

Musisz też zastosować jedną z 2 dostępnych wtyczek.

Aby wygenerować kod w języku Java odpowiedni dla modułów Java lub mieszanych modułów Java i Kotlin, dodaj ten wiersz do pliku build.gradle aplikacji lub modułu:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Aby wygenerować kod Kotlina odpowiedni dla modułów tylko w Kotlinie, dodaj:

Groovy

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

Kotlin

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

W pliku gradle.properties musisz mieć wartość android.useAndroidX=true, zgodnie z informacjami w artykule Przenoszenie na AndroidX.

Informacje o korzystaniu z rozszerzeń Kotlin znajdziesz w dokumentacji ktx.

Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.

Opinia

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.

Tworzenie nowego problemu

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 2.9

Wersja 2.9.1

2 lipca 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.1 Wersja 2.9.1 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że obiekty NavEntries utworzone za pomocą pojedynczego elementu najwyższego poziomu nigdy nie wykraczały poza stan CREATED w swoim Lifecycle.State. (I043ba, b/421095236)

Wersja 2.9.0

7 maja 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0 Wersja 2.9.0 zawiera te zmiany.

Ważne zmiany od wersji 2.8.0

  • Działania Navigation Safe Args są teraz generowane z adnotacją @CheckResult, aby zapewnić ich użycie.

Interfejs SupportingPane

  • Nawigatory niestandardowe mogą teraz oznaczać swoje miejsca docelowe jako implementujące interfejs SupportingPane, co oznacza dla NavController, że te miejsca docelowe będą wyświetlane obok innych. Korzystając z tego interfejsu, możesz na przykład RESUMED wiele miejsc docelowych jednocześnie.

Compose Kotlin Multiplatform

  • Nawigacja oferuje teraz nową, wspólną funkcję NavController.handleDeepLink(), która przyjmuje NavDeepLinkRequest zamiast Intent. Dzięki temu platformy inne niż Android mogą prawidłowo obsługiwać precyzyjne linki. Dziękujemy Konstantinowi Tskhovrebovowi!
  • Nawigacja oferuje teraz NavUri, nową funkcję wspólnego analizatora, która jest zgodnym interfejsem API dla identyfikatora URI Androida na innych platformach. Umożliwia to tworzenie identyfikatorów URI w sposób niezależny od platformy. Dziękujemy Konstantinowi Tskhovrebovowi!

Funkcje bezpieczne pod względem typów

  • Interfejsy API bezpieczne pod względem typów, które wcześniej były dostępne tylko za pomocą metod reified, czyli composable<YourScreen> mają teraz wersje nieuprzedmiotowione, które bezpośrednio przyjmują instancję KClass.
  • Bezpieczeństwo typu nawigacji obsługuje teraz klasy wartości jako trasę lub jako typ argumentu trasy.

Wersja 2.9.0-rc01

23 kwietnia 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0-rc01 Wersja 2.9.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Usunęliśmy z Jetpack Navigation wszystkie platformy inne niż Android, ponieważ te cele w rzeczywistości nie działają. Zamiast tego udostępniane są teraz stuby dla różnych platform.(I2877d)

Wersja 2.9.0-beta01

9 kwietnia 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0-beta01 Wersja 2.9.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • Wspólny interfejs API parseStringAsNavUri został zmieniony na funkcję fabryczną NavUri, która przyjmuje ciąg znaków. (I4db6e, b/403616316)

Aktualizacje zależności

  • Ta biblioteka jest teraz kierowana na poziom języka Kotlin 2.0 i wymaga KGP w wersji 2.0.0 lub nowszej. (Idb6b5)

Wersja 2.9.0-alpha09

26 marca 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0-alpha09 Wersja 2.9.0-alpha09 zawiera te zmiany.

Nowe funkcje

  • Moduł navigation-testing jest teraz obsługiwany na komputerach, w systemach Linux, macOS i iOS, a także na urządzeniach z Androidem. (I2b770, b/398265336)
  • NavType jest teraz obsługiwana na komputerach, w systemach Linux, macOS i iOS, a także na Androidzie. (I297d8)

Wersja 2.9.0-alpha08

12 marca 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0-alpha08 Wersja 2.9.0-alpha08 zawiera te zmiany.

Poprawki błędów

  • Nawigacja2.8.9: naprawiliśmy regresję znalezioną w Nawigacji w wersji 2.8.8, która wymagała, aby precyzyjny link pasował do wszystkich pól żądania precyzyjnego linku lub intencji, aby można było uznać go za pasujący. Spowodowało to, że precyzyjne linki, które zawierały częściowe dopasowania pól i nie miały innych, przestały działać. (Ie5e36, b/399826566)

Wkład zewnętrzny

  • Nowa wspólna funkcja parsera do tworzenia NavUri. Dziękujemy Konstantinowi Tskhovrebovowi! (If0a6a)

Wersja 2.9.0-alpha07

26 lutego 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0-alpha07 Wersja 2.9.0-alpha07 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że próba saveState z wykluczającym wyskakującym okienkiem powodowała zapisanie stanu null, co mogło prowadzić do awarii podczas przywracania. (I9f3e8, b/395091644)
  • Navigation 2.8.8: NavDeepLink poprawiono dopasowywanie, w którym precyzyjny link i żądanie precyzyjnego linku muszą być dokładnie zgodne pod względem identyfikatora URI, działania i typu MIME. Jeśli tylko 1 lub 2 pola są zgodne, dopasowywanie nie jest już dozwolone. (I3b029, b/395712033)
  • Od wersji Navigation 2.8.8: naprawiono błąd, w którym trasy ze ścieżkami z wieloznacznymi znakami nie pasowały do dodanego linku do aplikacji (I7ea92, b/389970341).

Wkład zewnętrzny

  • Wyodrębnij interfejsy API navigation-common, navigation-runtime i navigation-compose na wspólną platformę. Dziękujemy Konstantinowi Tskhovrebovowi! (I1e626, Ica76f, Idf479)

Znane problemy

  • W związku z pracami nad rozwiązaniem problemu b/395712033 precyzyjne linki są nieprawidłowo wymagane do posiadania wszystkich tych samych pól co żądanie precyzyjnego linku lub Intent. Linki bezpośrednie powinny być dopasowywane tylko do pól, które zawierają, a pola nieobjęte dopasowaniem powinny być ignorowane. Problem ten został rozwiązany w kolejnej wersji w ramach zgłoszenia b/399826566.

Wersja 2.9.0-alpha06

12 lutego 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0-alpha06 Wersja 2.9.0-alpha06 zawiera te zmiany.

Nowe funkcje

  • Działania Navigation Safe Args są teraz generowane z adnotacją @CheckResult, aby zapewnić ich użycie. (I14d4c, b/356323084)

Poprawki błędów

  • Naprawiono błąd w NavController, w którym stany backStack były nieprawidłowo przywracane do tablicy, gdy były zapisywane na liście. (Idfb9b)
  • Navigation 2.8.7: Navigation Safe Args obsługuje teraz miejsca docelowe, które można łączyć. (I35320, b/362791955)

Wersja 2.9.0-alpha05

29 stycznia 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0-alpha05 Wersja 2.9.0-alpha05 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował nieoczekiwaną animację skalowania podczas korzystania z Navigation Compose. (I480f4, b/353294030)
  • W sekcji Nawigacja2.8.6: etykiety NavDestination dostarczone w formacie XML będą analizowane za pomocą funkcji NavType.get, aby zapewnić zgodność z niestandardową logiką NavType. (I7ec2f, b/388100796)
  • Nawigacji2.8.6: podczas nawigacji do aktywności za pomocą dataPattern usługa ActivityNavigator będzie teraz próbować zakodować wartość argumentu za pomocą NavType argumentu. (I16376, b/383616432)
  • Nawigacji2.8.5 rozwiązaliśmy problem, który powodował nieoczekiwaną animację skalowania podczas korzystania z Nawigacji Compose i wywoływania funkcji nawigacji w tej samej klatce, w której kończy się bieżąca animacja. (I26cb1, b/353294030)

Wersja 2.9.0-alpha04

11 grudnia 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0-alpha04 Wersja 2.9.0-alpha04 zawiera te zmiany.

Nowe funkcje

W tabeli poniżej znajdziesz interfejsy API reified i KClass.

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

Zmiany w interfejsie API

  • Przeciążenie NavGraph.setStartDestination specyficzne dla języka Kotlin, które zapewnia bezpieczeństwo typów, jest ukryte przed źródłami w języku Java. (Ic640c, b/364634035)

Poprawki błędów

  • Nawigacji2.8.5 rozwiązaliśmy problem, w wyniku którego funkcja NavHost mogła zgłaszać wyjątek w PredictiveBackHandler, jeśli stos wsteczny został zredukowany do 1 pozycji, a w tej samej ramce wywołano systemowe cofnięcie. (I1a429, b/375343407)
  • W sekcji Nawigacja2.8.5: naprawiono błąd NavDestination NullPointerException podczas aktualizowania startDestination wykresu. (I99421, b/361560785)

Wkład zewnętrzny

  • W sekcji Nawigacja 2.8.5: bezpieczeństwo typu nawigacji obsługuje teraz List<Enum> jako typ argumentu trasy bez konieczności stosowania niestandardowego elementu NavType. Dziękujemy, Csaba Kozák! (GH-725, b/375559962)

Wersja 2.9.0-alpha03

13 listopada 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0-alpha03 Wersja 2.9.0-alpha03 zawiera te zmiany.

Nowe funkcje

  • Bezpieczeństwo typu nawigacji obsługuje teraz klasy wartości jako trasę lub jako typ argumentu trasy. (I9344a, b/374347483)

Poprawki błędów

  • Naprawiliśmy ConcurrentModificationException, który mógł wystąpić, gdy LifecycleObserver dołączony do NavBackStackEntry powoduje zmianę stosu wstecznego, gdy host LifecycleOwner, np. zawierająca go aktywność lub fragment, zmienia stan cyklu życia. (Ia9494)

Wersja 2.9.0-alpha02

30 października 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0-alpha02 Wersja 2.9.0-alpha02 zawiera te zmiany.

Wkład zewnętrzny

  • Nowa wspólna metoda NavController.handleDeepLink(request: NavDeepLinkRequest). Dziękujemy Konstantinowi Tskhovrebovowi! (I3e228)

Wersja 2.9.0-alpha01

16 października 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.9.0-alpha01 Wersja 2.9.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Nawigatory niestandardowe mogą teraz oznaczać swoje miejsca docelowe jako implementujące interfejs SupportingPane, co oznacza dla NavController, że te miejsca docelowe będą wyświetlane obok innych. Korzystając z tego interfejsu, możesz na przykład RESUMED wiele miejsc docelowych jednocześnie. (Id5559)
  • W sekcji Nawigacja 2.8.3 dodaliśmy nowe testy lint dla modułów navigation-common, navigation-runtimenavigation-compose, aby ułatwić identyfikowanie tras bezpiecznych pod względem typów, które nie są prawidłowo oznaczone adnotacją @Serializable. Sprawdzanie to jest stosowane do wszystkich funkcji rozszerzeń NavGraphBuilderNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • W sekcji Nawigacja2.8.3 dodaliśmy nowe testy lint dla modułów navigation-common, navigation-runtimenavigation-compose, aby pomóc w identyfikowaniu bezpiecznych pod względem typów tras z argumentami wyliczeniowymi, które nie są prawidłowo oznaczone adnotacją @Keep. Sprawdzanie to jest stosowane do wszystkich funkcji rozszerzeń NavGraphBuilderNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

Zmiany w zachowaniu

  • Próba użycia NavController, która została wcześniej DESTROYED, spowoduje teraz IllegalStateException. (I520da, b/369616172)

Poprawki błędów

  • Zaktualizowano wyjątek „Nie znaleziono klasy Enum”, aby w przypadku usunięcia klasy Enum w zminimalizowanych kompilacjach sugerować użycie adnotacji @Keep. (I90e79, b/358137294)

Znane problemy

  • W nowych regułach lint dodanych w Navigation 2.8.* występuje problem, który powoduje błąd Obsolete custom lint check podczas próby uruchomienia lint z użyciem wtyczki Android Gradle w wersji 8.4 lub nowszej (b/368070326, b/371463741).

Wersja 2.8

Wersja 2.8.9

12 marca 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.9 Wersja 2.8.9 zawiera te zmiany.

Poprawki błędów

  • Naprawiono regresję w Navigation 2.8.8, która wymagała, aby precyzyjny link był dokładnie zgodny ze wszystkimi polami żądania precyzyjnego linku lub intencji, aby można było uznać go za pasujący. Spowodowało to, że precyzyjne linki, które zawierały częściowe dopasowania pól i nie miały innych, przestały działać. (Ie5e36, b/399826566)

Wersja 2.8.8

26 lutego 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.8 Wersja 2.8.8 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że trasy ze ścieżkami zawierającymi symbole wieloznaczne nie pasowały do dodanego linku. (I7ea92, b/389970341)
  • Naprawiono dopasowywanie NavDeepLink, w przypadku którego precyzyjny link i żądanie precyzyjnego linku muszą być dokładnie zgodne pod względem identyfikatora URI, działania i typu MIME. Jeśli tylko 1 lub 2 pola są zgodne, dopasowywanie nie jest już dozwolone. (I3227f, b/395712033)

Znane problemy

  • W związku z pracami nad rozwiązaniem problemu b/395712033 precyzyjne linki są nieprawidłowo wymagane do posiadania wszystkich tych samych pól co żądanie precyzyjnego linku lub Intent. Linki bezpośrednie powinny być dopasowywane tylko do pól, które zawierają, a pola nieobjęte dopasowaniem powinny być ignorowane. Problem ten został rozwiązany w kolejnej wersji w ramach zgłoszenia b/399826566.

Wersja 2.8.7

12 lutego 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.7 Wersja 2.8.7 zawiera te zmiany.

Poprawki błędów

  • Bezpieczne argumenty nawigacji obsługują teraz miejsca docelowe, które można łączyć. (I35320, b/362791955)

Wersja 2.8.6

29 stycznia 2025 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.6 Wersja 2.8.6 zawiera te zmiany.

Poprawki błędów

  • NavDestination etykiety podane w pliku XML będą analizowane za pomocą NavType.get, aby zapewnić zgodność z niestandardową logiką NavType. (Id366d, b/388100796)
  • Podczas przechodzenia do aktywności za pomocą dataPattern usługa ActivityNavigator będzie teraz próbować zakodować wartość argumentu za pomocą NavType argumentu. (I1a71d, b/383616432)

Wersja 2.8.5

11 grudnia 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.5 Wersja 2.8.5 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że funkcja NavHost mogła zgłaszać wyjątek w funkcji PredictiveBackHandler, jeśli stos wsteczny został zredukowany do 1 pozycji, a w tej samej ramce wywołano systemowe cofnięcie. (I1a429, b/375343407)
  • Usunęliśmy błąd NavDestination NullPointerException, który występował podczas aktualizowania startDestination wykresu. (I99421, b/361560785)
  • Rozwiązaliśmy problem, który powodował nieoczekiwaną animację skalowania podczas korzystania z Navigation Compose i wywoływania funkcji navigate w tej samej klatce, w której kończy się bieżąca animacja. (I26cb1, b/353294030)
  • Naprawiliśmy ConcurrentModificationException, który mógł wystąpić, gdy LifecycleObserver dołączony do NavBackStackEntry powoduje zmianę stosu wstecznego, gdy host LifecycleOwner, np. zawierająca go aktywność lub fragment, zmienia stan cyklu życia. (Ia9494)

Wkład zewnętrzny

  • Bezpieczeństwo typu nawigacji obsługuje teraz List<Enum> jako typ argumentu trasy bez konieczności stosowania niestandardowego NavType. Dziękujemy, Csaba Kozák! (GH-725, b/375559962)

Wersja 2.8.4

13 listopada 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.4 Wersja 2.8.4 zawiera te zmiany.

Nowe funkcje

Poprawki błędów

Wersja 2.8.3

16 października 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.3 Wersja 2.8.3 zawiera te zmiany.

Nowe funkcje

  • Dodano nowe testy lint dla modułów navigation-common, navigation-runtimenavigation-compose, aby pomóc w identyfikowaniu tras bezpiecznych pod względem typów, które nie są prawidłowo oznaczone adnotacją @Serializable. Sprawdzanie to jest stosowane do wszystkich funkcji rozszerzeń NavGraphBuilderNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • Dodano nowe testy lint dla modułów navigation-common, navigation-runtimenavigation-compose, aby pomóc w identyfikowaniu bezpiecznych pod względem typów tras z argumentami wyliczeniowymi, które nie są prawidłowo oznaczone adnotacją @Keep. Sprawdzanie to jest stosowane do wszystkich funkcji rozszerzeń NavGraphBuilderNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

Poprawki błędów

  • Naprawiono problem, w którym nowe reguły lint dodane w Navigation 2.8.* powodowały błąd Obsolete custom lint check podczas próby uruchomienia lint z wtyczką Androida do obsługi Gradle w wersji 8.4 lub nowszej. (I1be3d, b/368070326, b/371463741)

Znane problemy

  • Podczas próby uruchomienia narzędzia Lint w wersji 16 (AGP 8.7) lub nowszej narzędzie Lint do nawigacji zgłosi błąd Obsolete custom lint check. (b/371926651)

Wersja 2.8.2

2 października 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.2 Wersja 2.8.2 zawiera te zmiany.

Nowe funkcje

  • Navigation Type Safety obsługuje teraz klasy Serializable, które zawierają Double, Double?, DoubleArray, DoubleArray?, List<Double>List<Double>? bez konieczności stosowania niestandardowego NavType. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753)

Poprawki błędów

  • Ulepszono komunikat o błędzie, który pojawia się, gdy nawigacja nie może przypisać argumentu trasy do NavType. Nowy komunikat o błędzie będzie zawierać nazwę argumentu, w pełni kwalifikowaną nazwę argumentu i w pełni kwalifikowaną nazwę trasy. (Id8416, b/346264232)

Wersja 2.8.1

18 września 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.1 Wersja 2.8.1 zawiera te zmiany.

Nowe funkcje

  • Dodaliśmy nową regułę lint, która zapewnia używanie funkcji popBackStack przyjmującej typ klasy reifikowanej podczas próby popBackStack za pomocą interfejsów API bezpiecznych pod względem typów. (Ief161, b/358095343)

Poprawki błędów

  • Nawigacja wymaga teraz, aby trasa przekazywana do NavGraphstartDestination zawierała wartości wszystkich wymaganych argumentów, w tym argumentów, które nie mogą mieć wartości null i nie mają wartości domyślnej. (I18e74, b/362594265)
  • Argumenty bezpieczne nawigacji obsługują teraz ciągi znaków, które nie mogą mieć wartości null, dzięki czemu wartości „null” będą analizowane i przechowywane w pakiecie w takiej postaci, w jakiej zostały podane. Odstępuje to od dotychczasowego zachowania, w którym wartości „null” były analizowane jako obiekt null. Ta zmiana dotyczy tylko typów String, które nie mogą mieć wartości null. Ciągi znaków dopuszczające wartość null pozostają bez zmian. (I08b4a, b/348936238)
  • Do NavDestination nie można już kierować precyzyjnych linków, z wyjątkiem tych, które zostały wyraźnie dodane do miejsca docelowego. Oznacza to również, że do miejsca docelowego możesz dotrzeć tylko za pomocą funkcji nawigacji, która przyjmuje ciąg tekstowy trasy. Eliminuje to lukę w zabezpieczeniach, która umożliwiała tworzenie precyzyjnych linków do potencjalnie chronionego miejsca docelowego. (Ie30e6)

Aktualizacja zależności

  • Bezpieczne argumenty nawigacji zależą teraz od Kotlin w wersji 1.9.24, a nie 2.X, dzięki czemu deweloperzy nie muszą przeprowadzać aktualizacji. (a4129a)
  • Biblioteka Navigation Compose zależy teraz od Compose 1.7.2.

Wersja 2.8.0

4 września 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0 Wersja 2.8.0 zawiera te zmiany.

Ważne zmiany od wersji 2.7.0

Bezpieczeństwo typów w języku Kotlin DSL w przypadku nawigacji

  • Nawigacja zapewnia teraz bezpieczeństwo typów w przypadku Kotlin DSL (używanego przez Navigation Compose) za pomocą Kotlin Serialization, co umożliwia definiowanie miejsc docelowych na wykresie nawigacji za pomocą obiektów bezpiecznych pod względem typów i klas danych:
    // Define a home destination that doesn't take any arguments
    @Serializable
    object Home

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

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

Więcej informacji znajdziesz w poście na blogu o bezpieczeństwie typów w Navigation Compose.

Nawigacja w Compose z predykcyjnym powrotem

  • Biblioteka Navigation Compose obsługuje teraz predykcyjne cofanie w aplikacji za pomocą nowych interfejsów API SeekableTransitionState z biblioteki compose-animation. Dzięki temu możesz użyć gestu przejścia wstecz, aby zobaczyć poprzednie miejsce docelowe z niestandardowym przejściem, zanim zdecydujesz, czy chcesz zatwierdzić transakcję za pomocą ukończonego gestu, czy ją anulować.

Kompozycja Navigation Fragment

  • Dodaliśmy nowy artefakt navigation-fragment-compose, który zawiera alternatywę ComposableNavHostFragment dla NavHostFragment, umożliwiającą dodawanie miejsc docelowych z możliwością komponowania do plików XML nawigacji. Każde composable miejsce docelowe musi być wyrażone jako metoda najwyższego poziomu bez argumentów @Composable, której pełna nazwa jest używana jako atrybut android:name w każdym miejscu docelowym. Podczas przechodzenia do jednego z tych miejsc docelowych tworzony jest fragment zawierający, który wyświetla treści kompozycyjne.
  // In HomeScreen.kt
  @Composable
  fun HomeScreen() {
    // Your Composable content here
  }

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

Inne zmiany

  • Biblioteka Navigation Compose zależy teraz od biblioteki Compose w wersji 1.7.0.
  • Nawigacja udostępnia teraz nową klasę CollectionNavType<T>, podklasę NavType<T> dla argumentów opartych na kolekcjach, takich jak listy, tablice i mapy. Wszystkie domyślne tablice NavType (IntArrayType, LongArrayType, FloatArrayType, BoolArrayTypeStringArrayType) dziedziczą teraz z tej nowej klasy.
  • NavType ma teraz wbudowaną obsługę list liczb całkowitych, ciągów znaków, wartości logicznych, liczb zmiennoprzecinkowych i liczb długich.

Wersja 2.8.0-rc01

21 sierpnia 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-rc01 Wersja 2.8.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Naprawiono awarię nawigacji podczas przekazywania klas Enum najwyższego poziomu jako argumentów bezpiecznych pod względem typu. (I0ba76, b/358137294)
  • Nawigacja 2.8 działa teraz prawidłowo z pakietem SDK 34 i nie przełączy się na pakiet SDK 35 aż do wydania wersji 2.9 wraz z pozostałymi bibliotekami AndroidX. (b/358798728)

Wersja 2.8.0-beta07

7 sierpnia 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-beta07 Wersja 2.8.0-beta07 zawiera te zmiany.

Znane problemy

  • Z powodu b/358137294 od razu obsługiwane są tylko wyliczenia zagnieżdżone w innej klasie. Wyliczenia najwyższego poziomu będą obsługiwane w kolejnej wersji.

Poprawki błędów

  • Podczas nawigowania do zduplikowanych lub udostępnionych miejsc docelowych nawigacja będzie w pierwszej kolejności prowadzić do najbliższego pasującego miejsca docelowego z bieżącej lokalizacji na wykresie. (Ic89a4, b/352006850)
  • Nawigacja w bezpiecznych argumentach ma teraz nowy symbol NavType.EnumType. Oznacza to, że typy Enum nie wymagają już niestandardowych NavType. Pamiętaj, że EnumSerialName musi być domyślną pełną i jednoznaczną nazwą. (I66d22, b/346475493)
  • Nawigacja w bezpiecznych argumentach ma teraz wbudowaną obsługę typów argumentów dopuszczających wartość null,w tym Int?, Long?, Float?, Boolean?Enum<*>?. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237)
  • NavGraph startDestination będzie teraz używać domyślnych wartości argumentów, jeśli trasa startDestination przekazana do NavGraph jest dokładnie równa startDestination.route. (I13762, b/354046047)

Wersja 2.8.0-beta06

24 lipca 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-beta06 Wersja 2.8.0-beta06 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że sprawdzanie kodu WrongStartDestinationType nie sprawdzało obiektów towarzyszących w przekazanym typie klasy, co uniemożliwiało wykrycie błędu. (I92b09)

Wersja 2.8.0-beta05

10 lipca 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-beta05 Wersja 2.8.0-beta05 zawiera te zmiany.

Poprawki błędów

  • Naprawiono błąd nawigacji singleTop, który występował, gdy zagnieżdżone elementy NavGraphs miały tę samą startDestination trasę. (I17b94, b/294408596)

Wersja 2.8.0-beta04

26 czerwca 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-beta04 Wersja 2.8.0-beta04 zawiera te zmiany.

Poprawki błędów

  • Nawigacja obsługuje teraz nawigowanie z pustymi ciągami znaków w argumentach ścieżki. (Ic5dbd, b/339481310)
  • Ulepszyliśmy komunikat o błędzie w przypadku niestandardowych serializatorów zadeklarowanych bezpośrednio w polach klasy za pomocą @Serializable(with =...), aby wyjaśnić, że ta funkcja nie jest obecnie obsługiwana. (I052b0, b/341319151)
  • Interfejs API SavedStateHandleFactory test może być teraz używany w testach innych niż testy na Androida, ale będzie wymagać obsługi analizowania argumentów za pomocą pakietów przez Robolectric. (I76cdc, b/340966212)
  • Rozwiązaliśmy problem z awarią podczas przywracania stanu po wznowieniu aplikacji po zakończeniu procesu, gdy w Compose używano bezpiecznej pod względem typów nawigacji. (Ia8f38, b/341801005)
  • Rozwiązaliśmy problem w Navigation Compose, który powodował, że po anulowaniu gestu przewidywanego powrotu ekran NavBackStackEntry, do którego wraca użytkownik, nigdy nie wraca do stanu cyklu życia RESUMED. Dzięki temu po szybkim przesunięciu miejsce docelowe powraca do animacji, zamiast wskakiwać na swoje miejsce. (I97a0c, b/346608857)
  • Gdy używasz predykcyjnego powrotu z Navigation Compose, wysuwane miejsce docelowe będzie teraz miało odpowiednią kolejność osi Z, dzięki czemu będzie się prawidłowo animować na wierzchu przychodzącego miejsca docelowego. (I2077b, b/345993681)

Wersja 2.8.0-beta03

12 czerwca 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-beta03 Wersja 2.8.0-beta03 zawiera te zmiany.

Zmiany w interfejsie API

  • CollectionNavType ma nową metodę abstrakcyjną emptyCollection(). Zastąp tę metodę, aby obsługiwać pustą kolekcję przekazywaną jako argument. (Ie4d84, b/341723133)

Poprawki błędów

  • Dodaliśmy dokumentację dotyczącą parametrów NavType.serializeAsValueserializeAsValues, aby podkreślić, że końcowe dane wyjściowe powinny być zakodowane w formacie URI. (Ida6bd, b/344943214)
  • Rozwiązaliśmy problem z awarią podczas wywoływania funkcji toRoute<T> z argumentem CollectionNavType o wartości null. Podczas nawigacji z wartością null CollectionNavType argument wyjściowy będzie wartością domyślną zadeklarowaną w klasie Serializable lub wartością zwracaną przez emptyCollection(), jeśli nie ma wartości domyślnej. (I84158, Id630f, b/342672856)

Wersja 2.8.0-beta02

29 maja 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-beta02 Wersja 2.8.0-beta02 zawiera te zmiany.

Poprawki błędów

  • Naprawiliśmy błąd ClassCastException, który występował podczas używania NavBackStackEntry.toRoute z niestandardowym NavType dopuszczającym wartość null. (I1c29b, b/342239473)
  • Rozwiązaliśmy problemy z przywracaniem stanu listy wstecznej nawigacji, które występowały podczas próby przywrócenia wpisu listy wstecznej niedostępnego za pomocą identyfikatora z bieżącego miejsca docelowego. Ponieważ trasy są oparte na identyfikatorach, miało to też wpływ na miejsca docelowe utworzone za pomocą tras. Rozwiązuje to też problem z awarią spowodowaną wywołaniem funkcji clearBackStack(), która miała ten sam problem. (I423c3, b/339908057)

Wersja 2.8.0-beta01

14 maja 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-beta01 Wersja 2.8.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

  • SavedStateHandle.toRoute() przyjmuje teraz parametr typeMap dla niestandardowych typów argumentów. (Ie39fb, b/339026523)
  • Dodano interfejs API testowy do navigation-testing, aby utworzyć SavedStateHandle z obiektu Kotlin Serializable. (Id4867, b/339080702)

Poprawki błędów

  • Dodaliśmy brakujące dokumenty parametrów funkcji Kotlin DSL Navigation. (I26a36)

Wersja 2.8.0-alpha08

1 maja 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-alpha08 Wersja 2.8.0-alpha08 zawiera te zmiany.

Safe Args w Navigation Compose

Ta funkcja korzysta z serializacji w Kotlinie, aby umożliwić Ci definiowanie miejsc docelowych na wykresie nawigacji za pomocą obiektów bezpiecznych pod względem typów i klas danych:

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

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

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

Więcej informacji znajdziesz w poście na blogu o bezpieczeństwie typów w Navigation Compose.

Nowe funkcje

  • Artefakt navigation-fragment-compose udostępnia teraz LocalFragment lokalną kompozycję metod kompozycyjnych w ramach ComposableFragment. (If35e5)
  • NavType ma teraz wbudowaną obsługę list liczb całkowitych, ciągów znaków, wartości logicznych, liczb zmiennoprzecinkowych i liczb długich. (I4b6dd, Ia914c, b/188693139)

Wersja 2.8.0-alpha07

17 kwietnia 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-alpha07 Wersja 2.8.0-alpha07 zawiera te zmiany.

Nowe funkcje

  • Dodaje nowy artefakt navigation-fragment-compose, który zawiera alternatywę ComposableNavHostFragment dla NavHostFragment, umożliwiającą dodawanie miejsc docelowych composable do plików XML nawigacji. Każde composable miejsce docelowe musi być wyrażone jako metoda najwyższego poziomu bez argumentów @Composable, której pełna nazwa jest używana jako atrybut android:name w każdym miejscu docelowym. Podczas przechodzenia do jednego z tych miejsc docelowych tworzony jest fragment zawierający, który wyświetla treści kompozycyjne. (I0ef2e, b/265480755)

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

Zmiany w interfejsie API

Wersja 2.8.0-alpha06

3 kwietnia 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-alpha06 Wersja 2.8.0-alpha06 zawiera te zmiany.

Zmiany w interfejsie API

Poprawki błędów

  • NavHost używa teraz Alignment.TopStart jako domyślnego argumentu contentAlignment. Dzięki temu jest ona zgodna z domyślnym ustawieniem dla AnimatedContent i eliminuje niektóre przypadki nieoczekiwanej zmiany skali od środka. (I09e72, b/330111602)
  • Podczas wykonywania gestu przewidywanego powrotu w trakcie korzystania z Navigation Compose ikona NavHost będzie teraz prawidłowo kończyć niestandardowe przejście, zamiast natychmiast się zamykać. (I99017, b/327292110)

Wersja 2.8.0-alpha05

20 marca 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-alpha05 Wersja 2.8.0-alpha05 zawiera te zmiany.

Nowe funkcje

  • Teraz możesz przekazywać argumenty do NavGraphstartDestination bezpośrednio w startDestination bez korzystania z defaultValue. Dotyczy to również zagnieżdżonych elementów NavGraph startDestinations. (I0e0b5, b/109505019, b/188693139)

Zmiany w interfejsie API

  • Dodaliśmy nową klasę abstrakcyjną CollectionNavType<T>, podklasę klasy NavType<T>, która służy do argumentów opartych na kolekcjach, takich jak listy, tablice i mapy. (Ic6d63, b/188693139)
  • Wszystkie domyślne tablice NavType (IntArrayType, LongArrayType, FloatArrayType, BoolArrayTypeStringArrayType) są teraz typu CollectionNavType (Idcf79, b/188693139).
  • NavType udostępnia teraz nowy otwarty interfejs API valueEquals, który określa, czy 2 wartości tego samego typu są sobie równe. (I6cb97, b/327229511)

Poprawki błędów

  • Parametry zapytania w precyzyjnych linkach umożliwiają teraz używanie wartości w postaci nawiasów klamrowych wokół nazwy argumentu (np. {argName}) jako prawidłowych wartości w przypadku NavTypes opartych na ciągach znaków. Rozwiązaliśmy problem, który powodował, że taka wartość była uznawana za nieprawidłową (lub brak wartości) we wszystkich typach. (I18302, b/327274038)
  • Funkcje NavController obsługujące trasy, takie jak navigate lub popBackStack, mogą teraz prawidłowo dopasowywać trasy wypełnione argumentami tablicy NavTypes. (Iea805, b/327229511)

Wersja 2.8.0-alpha04

6 marca 2024 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-alpha04 Wersja 2.8.0-alpha04 zawiera te zmiany.

Nowe funkcje

  • Możesz teraz określać SizeTranform dla przejść w Navigation Compose, definiując je w ramach inicjowania funkcji composable lub navigation. (I91062, b/296912651)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że NavHost w Compose Navigation nie wyświetlał prawidłowo przejścia podczas korzystania z funkcji Wstecz systemu bez gestu. (Iceeae, b/325998468)

Wersja 2.8.0-alpha03

21 lutego 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-alpha03 Wersja 2.8.0-alpha03 zawiera te zmiany.

Zmiany w interfejsie API

  • NavBackStackEntry.savedStateHandle jest teraz oznaczony jako @MainThread, ponieważ używa kodu, który i tak musi znajdować się w głównym wątku. (Ibb988, b/299523245)

Poprawki błędów

  • Rozwiązaliśmy problem w bibliotece Navigation, który powodował, że NavGraphViewModele były DESTROYED zbyt wcześnie, ponieważ powiązany wpis ViewModel nie był częścią zapisanego stanu. (Ib6bb7, b/317581849)

Aktualizacja zależności

Wersja 2.8.0-alpha02

7 lutego 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-alpha02 Wersja 2.8.0-alpha02 zawiera te zmiany.

Nowe funkcje

  • Biblioteka Navigation Compose obsługuje teraz predykcyjne cofanie w aplikacji za pomocą nowych interfejsów API SeekableTransitionState z biblioteki compose-animation. Dzięki temu możesz użyć gestu przejścia wstecz, aby zobaczyć poprzednie miejsce docelowe z niestandardowym przejściem, zanim zdecydujesz, czy chcesz zatwierdzić transakcję za pomocą ukończonego gestu, czy ją anulować. (I8b8e9)

Wersja 2.8.0-alpha01

24 stycznia 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.8.0-alpha01 Wersja 2.8.0-alpha01 zawiera te zmiany.

Poprawki błędów

  • Usunięto wyciek BackStackState, w którym wiele wywołań saveState w miejscu docelowym powodowało zapisywanie wielu stanów, ale można było przywrócić tylko pierwszy z nich. (I598b0, b/309559751)
  • Rozwiązaliśmy problem polegający na tym, że argumenty inne niż ciągi tekstowe nie były prawidłowo wyświetlane podczas używania funkcji pomocniczych NavigationUI do wypełniania tytułu pasków aplikacji. (#636, b/316676794)

Aktualizacja zależności

  • Biblioteka Navigation Compose zależy teraz od Compose 1.7.0-alpha01, co rozwiązuje problem, który mógł powodować nieoczekiwaną animację skalowania. (b/297258205)

Wkład zewnętrzny

  • Dziękujemy SimonMarquis za rozwiązanie problemu z wyświetlaniem argumentów innych niż ciągi znaków podczas używania funkcji pomocniczych NavigationUI do wypełniania tytułu pasków aplikacji.

Wersja 2.7.7

Wersja 2.7.7

7 lutego 2024 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.7 Wersja 2.7.7 zawiera te zmiany.

Poprawki błędów

  • Przeniesiono z Navigation 2.8.0-alpha01: naprawiono wyciek BackStackState, w którym wiele wywołań saveState() w jednym NavBackStackEntry powodowało zapisywanie wielu stanów, ale można było przywrócić tylko pierwszy zapisany stan. (I598b0, b/309559751)
  • Przeniesiono z Nawigacji2.8.0-alpha01: rozwiązano problem polegający na tym, że argumenty inne niż ciągi tekstowe nie były prawidłowo wyświetlane podczas używania funkcji pomocniczych NavigationUI do wypełniania tytułu pasków aplikacji. (#636, b/316676794)

Wkład zewnętrzny

  • Dziękujemy SimonMarquis za rozwiązanie problemu z wyświetlaniem argumentów innych niż ciągi znaków podczas używania funkcji pomocniczych NavigationUI do wypełniania tytułu pasków aplikacji.

Wersja 2.7.6

Wersja 2.7.6

13 grudnia 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.6 Wersja 2.7.6 zawiera te zmiany.

Poprawki błędów

  • Funkcja NavGraph equals() prawidłowo uwzględnia teraz węzły drugiego wykresu, a nie tylko wykresu wywołującego. Dzięki temu wykresy z węzłami o różnych identyfikatorach nie będą już uznawane za równe (I401cb, b/311414915).

Wersja 2.7.5

Wersja 2.7.5

1 listopada 2023 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.5 Wersja 2.7.5 zawiera te zmiany.

Ulepszenia wydajności

  • Znacznie zwiększyliśmy wydajność (zarówno pod względem czasu, jak i liczby przydziałów) porównywania dwóch wykresów. Oznacza to, że wywołania takie jak setGraph, które wewnętrznie porównują nowy wykres z istniejącym, są znacznie szybsze i powodują mniej pominiętych klatek. Dziękujemy Michałowi Z za dokładną analizę, która doprowadziła do tej zmiany. (I6ad62)
  • NavHost będzie teraz renderować miejsce docelowe na początku pierwszego przejścia kompozycji, zamiast czekać na drugie przejście, aby odczytać zaktualizowany stan. (I439a7, b/304852206)

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że stos wsteczny był usuwany, jeśli funkcja setGraph była wywoływana więcej niż raz z dokładnie tym samym wykresem, ale tylko wtedy, gdy na wykresie znajdowało się miejsce docelowe zawierające działanie łączące 2 miejsca docelowe. (Ieaed7)
  • Okna, które zostały otwarte i zamknięte w szybkim tempie, nie będą już widoczne na liście NavController.visibleEntries. (I67586, b/287969970)
  • Gdy wpis zostanie usunięty, a następnie nastąpi zmiana konfiguracji, jego pole ViewModel zostanie prawidłowo wyczyszczone, jeśli pole saveState ma wartość false. (Idf242, b/298164648)
  • Naprawiono problem, w którym NavController mogło obsługiwać ten sam link bezpośredni więcej niż raz, jeśli stos wsteczny był całkowicie pusty przed zmianą konfiguracji lub wywołaniem setGraph tylko wtedy, gdy przychodzący Intent miał ustawioną flagę FLAG_ACTIVITY_NEW_TASK. (I73c7f)

Aktualizacje zależności

  • Nawigacja za pomocą fragmentów zależy teraz od Fragmentu w wersji 1.6.2. Rozwiązuje to problem, w którym instancje ViewModel zagnieżdżonych fragmentów nie były czyszczone podczas wywoływania clearBackStack.

Wersja 2.7.4

Wersja 2.7.4

4 października 2023 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.4 Wersja 2.7.4 zawiera te zmiany.

Nowe funkcje

  • Dodaliśmy obsługę popUpTo, aby używać tras z argumentami, które umożliwiają powrót do konkretnego wpisu korzystającego z tych argumentów. Jest to zgodne z obsługą w popBackStack. (I731f4, b/299255572)

Poprawki błędów

  • Rozwiązanie problemu z awarią FragmentNavigator spowodowaną przerwaniem nawigacji przez inną nawigację z użyciem popUpTo. (I3c848, b/301887045)
  • Rozwiązanie problemu polegającego na tym, że naciśnięcie przycisku Wstecz w systemie powodowało nieprawidłową aktualizację ikony currentDestination, która nie pasowała do wyświetlanego fragmentu. (Id0d6c, b/289877514)
  • DialogFragment będzie teraz prawidłowo przechodzić do stanu RESUMED po zamknięciu okna dialogowego znajdującego się nad nim. (I88f0d, b/301811387)

Wersja 2.7.3

Wersja 2.7.3

20 września 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.3 Wersja 2.7.3 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem w nawigacji z fragmentami, który powodował, że lista visibleEntries zawierała nieprawidłowe wpisy. (I5caa9, b/288520638)
  • Rozwiązaliśmy problem, który powodował, że miejsce docelowe pływającego okna (np.Dialogs, Bottomsheets itp.) nigdy nie otrzymywało wywołania zwrotnego cyklu życia RESUMED. (I3b866, b/287505132)

Wersja 2.7.2

Wersja 2.7.2

6 września 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.2 Wersja 2.7.2 zawiera te zmiany.

Poprawki błędów

  • Nawigacja zależy teraz od cyklu życia2.6.2, co rozwiązuje problem z interakcją między rememberSaveableNavHost w Nawigacji Compose, która powodowała, że stan rememberSaveable miejsc docelowych i wszystkich instancji ViewModel należących do SavedStateHandle nie był prawidłowo przywracany po zakończeniu i ponownym utworzeniu procesu. (b/298059596, b/289436035)
  • Rozwiązaliśmy problem, który występował podczas jednoczesnego wyświetlania wielu okien w Navigation Compose.Okna częściowo zasłonięte (np. nie te na wierzchu) były w stanie CREATED cyklu życia zamiast w stanie STARTED. (aosp/2728520, b/289257213)
  • Rozwiązaliśmy problem z wyświetlaniem wielu okien w Navigation Compose jednocześnie, w którym zamknięcie okna znajdującego się na wierzchu powodowało, że nowe okno na wierzchu pozostawało w stanie cyklu życia STARTED zamiast prawidłowo przechodzić do stanu RESUMED. (aosp/2629401, b/286371387)
  • Bezpieczne argumenty nawigacji nie tworzą już instancji zadania od razu, jeśli nie jest ono wykonywane. (I0e385, b/260322841)

Aktualizacja zależności

  • Nawigacja Compose zależy teraz od Compose w wersji 1.5.1.

Wersja 2.7.1

Wersja 2.7.1

23 sierpnia 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.1 Wersja 2.7.1 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem w nawigacji z Compose, który powodował, że podczas korzystania z Scaffold mógł pojawić się błąd związany z próbą uzyskania dostępu do Lifecycle.State.DESTROYED ViewModel. (I1dc11, b/268422136)

Wersja 2.7.0

Wersja 2.7.0

9 sierpnia 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.0 Wersja 2.7.0 zawiera te zmiany.

Ważne zmiany od wersji 2.6.0

Animacje z aplikacji Accompanist

Teraz, gdy AnimatedContent jest stabilny, mogliśmy przenieść kod z animacji nawigacji w bibliotece Accompanist z powrotem do Navigation Compose.

Oznacza to, że wszystkie funkcje ustawiania niestandardowych przejść, które były dostępne w AnimatedNavHost, są bezpośrednio obsługiwane w NavHost.

Nie wprowadzimy żadnych dodatkowych zmian w animacji nawigacji Accompanist. Wkrótce oficjalnie wycofamy ją z użycia i udostępnimy wskazówki dotyczące powrotu do samego Navigation Compose. Będzie to odwrotność przewodnika po migracji. Jeśli korzystasz już z najnowszej wersji alfa Accompanist (0.31.2-alpha), nie musisz wprowadzać żadnych innych zmian w interfejsie API. (b/197140101)

Poprawki błędów

  • Komponent NavHost w Navigation Compose prawidłowo przechwytuje wywołania systemowe wstecz, nawet po zatrzymaniu i wznowieniu aktywności. (Icb6de, b/279118447)

Aktualizacje zależności

  • Nawigacja zależy teraz od wersji 1.5.0 biblioteki Compose, a nie od wersji 1.1.0.

Wersja 2.7.0-rc01

26 lipca 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.0-rc01 Wersja 2.7.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że lambdy EnterTransitionExitTransition utworzone w ramach funkcji NavHost mogły pozostać w pamięci nawet po usunięciu funkcji NavHost z kompozycji. (I893d0)

Znane problemy

  • W nawigacji w wersji 2.6.x występuje problem, który może powodować błąd IllegalArgumentException podczas nawigowania za pomocą funkcji popUpTo. Możesz uniknąć tego wyjątku, restrukturyzując wykres, podobnie jak w przypadku porady podanej tutaj. (b/287133013)

Wersja 2.7.0-beta02

28 czerwca 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.0-beta02 Wersja 2.7.0-beta02 zawiera te zmiany.

Poprawki błędów

  • Komponent Navigation Compose ma teraz odpowiednią kolejność osi Z w przypadku niestandardowych przejść, które korzystają z opcji popUpTo.(/Ib1c3a, b/285153947)

Wersja 2.7.0-beta01

7 czerwca 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.0-beta01 Wersja 2.7.0-beta01 zawiera te zmiany.

Poprawki błędów

  • NavHost w Navigation Compose prawidłowo przechwytuje wywołania systemowe, nawet po Activity, STOPPEDRESUMED. (Icb6de, b/279118447)

Wersja 2.7.0-alpha01

24 maja 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.7.0-alpha01 Wersja 2.7.0-alpha01 zawiera te zmiany.

Animacje z aplikacji Accompanist

Teraz, gdy AnimatedContent jest stabilny, mogliśmy przenieść kod z animacji nawigacji w bibliotece Accompanist z powrotem do Navigation Compose.

Oznacza to, że wszystkie funkcje ustawiania niestandardowych przejść, które były dostępne w AnimatedNavHost, są bezpośrednio obsługiwane w NavHost.

Nie wprowadzimy żadnych dodatkowych zmian w animacji nawigacji Accompanist. Wkrótce oficjalnie wycofamy ją z użycia i udostępnimy wskazówki dotyczące powrotu do samego Navigation Compose. Będzie to odwrotność przewodnika po migracji. Jeśli korzystasz już z najnowszej wersji alfa Accompanist (0.31.2-alpha), nie musisz wprowadzać żadnych innych zmian w interfejsie API. (b/197140101)

Poprawki błędów

  • Nawigacja2.6.0-rc02: rozwiązaliśmy problem z nawigacją we fragmentach, w którym nawigowanie za pomocą popUpTo i usuwanie fragmentu ze stosu wstecznego bez ponownego tworzenia jego widoku powodowało, że przycisk Wstecz przestawał działać. (Ieb8d4, b/281726455)

Aktualizacje zależności

  • Nawigacja zależy teraz od Compose 1.5.0-beta01.

Wersja 2.6.0

Wersja 2.6.0

7 czerwca 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0 Wersja 2.6.0 zawiera te zmiany.

Ważne zmiany w nawigacji od wersji 2.5.0

  • NavBackStackEntryargumentsarguments przekazywane do OnDestinationChangedListener są teraz tylko kopią niezmiennych argumentów, które zostały utworzone podczas przechodzenia do miejsca docelowego. Oznacza to, że wszelkie zmiany wprowadzone w tych pakietach nie będą odzwierciedlane w kolejnych dostępach do arguments ani innych instancji OnDestinationChangedListener.
  • NavDeepLink obsługuje teraz wartości domyślne tablic, co umożliwia obsługę powtarzających się parametrów zapytania, które będą mapowane na typ tablicy argumentu. NavType zawiera teraz też metodę domyślną, którą można zastąpić, aby połączyć 2 przeanalizowane wartości.
  • Niestandardowe podklasy NavType mogą teraz zastępować serializeAsValue, aby serializować wartość do ciągu znaków, co umożliwia całkowite zamknięcie serializacji i deserializacji (za pomocą parseValue) w klasie NavType. StringType zastępuje teraz tę metodę, aby wywoływać Uri.encode na podanym String.

Ważne zmiany w Navigation Compose od wersji 2.5.0

  • Podczas wyświetlania podglądu funkcji kompozycyjnej za pomocą NavHost domyślnie będzie teraz wyświetlany element startDestination z elementu NavGraph.
  • NavController.popBackStack(route), NavController.getBackStackEntry(route) i NavController.clearBackStack(route) obsługują teraz trasy z argumentami częściowo lub w pełni wypełnionymi. Pamiętaj, że argumenty muszą być dokładnie takie same jak argumenty wpisu.
  • Próba utworzenia pustego NavDeepLink za pomocą navDeepLink Kotlin DSL spowoduje teraz wyświetlenie ostrzeżenia narzędzia lint wskazującego, że precyzyjny link musi zawierać adres URI, działanie lub typ MIME, aby był prawidłowy.

Ważne zmiany w nawigacji za pomocą fragmentów od wersji 2.5.0

  • NavHostFragment nie przechwytuje już samego systemowego przycisku Wstecz. Dzięki temu podstawowy FragmentManager może obsługiwać przycisk Wstecz. Dzięki temu Fragment 1.7.0-alpha01 i nowsze wersje mogą wyświetlać animację przewidywanego powrotu w aplikacji na urządzeniach z Androidem U.
  • Jeśli używasz nawigacji z fragmentami, próba ręcznego wykonania działania FragmentTransaction, które dodaje fragment do listy wstecznej FragmentManager, spowoduje teraz zgłoszenie błędu IllegalArgumentException. Fragmenty należy zawsze dodawać za pomocą interfejsu navigate() API.
  • Jeśli w atrybutach app:dataapp:dataPattern elementu activity w pliku XML nawigacji użyjesz dokładnego ciągu znaków ${applicationId} jako symbolu zastępczego, zostanie on automatycznie wypełniony wartością packageName kontekstu po rozwinięciu.
  • FragmentNavigator korzysta teraz z interfejsów API przejścia podczas nawigacji i wyświetlania NavBackStackEntries. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać na zakończenie efektów specjalnych związanych z wchodzeniem i wychodzeniem fragmentu, zanim przesunie swój ostatni Lifecycle.State.
  • DialogFragmentNavigator korzysta teraz z interfejsów API przejścia podczas nawigacji i wyświetlania NavBackStackEntries. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać, aż DialogFragment Lifecycle przejdzie do stanu DESTROYED, zanim sam przejdzie do stanu DESTROYED.
  • NavHostFragment umożliwia teraz pobranie NavController od razu po podłączeniu NavHostFragment do FragmentManager, a nie dopiero po onCreate().
  • Obsługa dynamicznych modułów funkcji w nawigacji zależy teraz od szczegółowej biblioteki Play Feature Delivery.
  • Bezpieczne argumenty nawigacyjne zależą teraz od wtyczki Androida do obsługi Gradle w wersji 7.3.0. Oznacza to, że jest ona teraz zgodna tylko z wersjami 7.3.0 i nowszymi.

Ważne zmiany w NavigationUI od wersji 2.5.0

  • Gdy przekazujesz identyfikator wykresu nawigacji do AppBarConfiguration (np. za pomocą Menu), NavigationUI traktuje teraz tylko miejsce docelowe rozpoczęcia tego wykresu nawigacji jako miejsce docelowe najwyższego poziomu, zamiast nieprawidłowo oznaczać każde miejsce docelowe na wykresie jako miejsce docelowe najwyższego poziomu. Sposób przekazywania identyfikatora pojedynczego miejsca docelowego pozostaje bez zmian. Ta sama funkcja jest dostępna w Twoim kodzie za pomocą nowej funkcji isTopLevelDestinationAppBarConfiguration.
  • Integracje setupWithNavControllerNavigationUI do pracy z górnym paskiem aplikacji będą teraz analizować wartości R.string argumentów ReferenceType znalezionych w android:label i zwracać ich wartości typu String zamiast automatycznie generowanej liczby całkowitej zasobu.
  • NavigationUI udostępnia teraz logi, gdy nie uda się nawigować za pomocą wybranego MenuItem.

Wersja 2.6.0-rc02

24 maja 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-rc02 Wersja 2.6.0-rc02 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem z nawigacją we fragmentach, który polegał na tym, że nawigowanie za pomocą przycisku popUpTo i usuwanie fragmentu z listy wstecznej bez ponownego tworzenia jego widoku powodowało, że przycisk Wstecz w systemie przestawał działać. (Ieb8d4, b/281726455)

Wersja 2.6.0-rc01

10 maja 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-rc01 Wersja 2.6.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem w nawigacji z fragmentami, w którym usunięcie fragmentu za pomocą funkcji navigate z popUpTo w wywołaniu zwrotnym cyklu życia onResume() powodowało IllegalStateException. (I21884, b/279644470)

Wersja 2.6.0-beta01

19 kwietnia 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-beta01 Wersja 2.6.0-beta01 zawiera te zmiany.

Nowe funkcje

  • NavBackStackEntry udostępnia teraz niestandardową implementację toString. (Iff00b)

Poprawki błędów

  • Jeśli używasz nawigacji z fragmentami, próba ręcznego wykonania działania FragmentTransaction, które dodaje fragment do listy wstecznej FragmentManager, spowoduje teraz zgłoszenie błędu IllegalArgumentException. Fragmenty należy zawsze dodawać za pomocą interfejsu navigate() API. (I6d38e)
  • Jeśli w tej samej ramce występuje ikona navigate, która dodaje wpis, i ikona popBackStack, która go usuwa, wynikowy wpis u góry stosu wstecznego będzie teraz zawsze wracać do RESUMED Lifecycle.State. (Id8067, b/276495952)

Wersja 2.6.0-alpha09

5 kwietnia 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-alpha09 Wersja 2.6.0-alpha09 zawiera te zmiany.

Poprawki błędów

  • Poprawiono sprawdzanie nieprawidłowej trasy, tak aby w przypadku, gdy NavDestination zawiera pole NavArgument, które nie może mieć wartości null, trasa tego miejsca docelowego musiała zawierać zmienne dla argumentów o nazwach takich samych jak pole NavArgument, które nie może mieć wartości null. (Ic62bf, b/274697949)
  • Nawigacja za pomocą linków bezpośrednich oparta na Action/MimeType zakończy się teraz niepowodzeniem, jeśli w operacji nawigacji brakuje niepustego parametru NavArgument wymaganego przez NavDestination, z którym pasuje Action/MimeType. (Ibfa17, b/271777424)
  • Gdy NavController ustawi wykres z tą samą trasą i miejscami docelowymi co poprzedni wykres, prawidłowo zastąpi bieżące węzły wykresu i miejsca docelowe w stosie wstecznym nowymi instancjami. Rozwiązuje to problem z awarią podczas używania onLaunchSingleTop bez zapisywania stanu w Navigation Compose. Rozwiązuje to też błąd, w wyniku którego przechodzenie do miejsc docelowych powiązanych z wykresem głównym powodowało tworzenie nieprawidłowego stosu wstecznego. (I5bc58, b/275258161, b/275407804)

Wersja 2.6.0-alpha08

22 marca 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-alpha08 Wersja 2.6.0-alpha08 zawiera te zmiany.

Nowe funkcje

  • NavHostFragment umożliwia teraz pobranie NavController od razu po podłączeniu NavHostFragment do FragmentManager, a nie dopiero po onCreate(). (Ic6382, b/220186282)

Poprawki błędów

  • Rozwiązaliśmy problem z NullPointerException podczas wyodrębniania zagnieżdżonego wykresu, który zawiera argument, który nie może mieć wartości null. (6b3581, b/249988437)
  • Jeśli po nawigacji za pomocą popUpTo użyjesz przycisku Wstecz, stan NavController zostanie przywrócony do prawidłowego wpisu. (I3a8ec, b/270447657)
  • FragmentNavigator będzie teraz prawidłowo wysuwać wpisy, gdy stos wsteczny zostanie wysunięty za pomocą przycisku Wstecz lub popBackStack(), a także w zależności od tego, czy transakcja używa efektów dla fragmentu. (I81bdf)
  • Dodawanie fragmentów do FragmentNavigatorFragmentManager bez użycia nawigacji nie będzie już powodować awarii. (b17204, b/274167493)

Aktualizacje zależności

Wersja 2.6.0-alpha07

8 marca 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-alpha07 Wersja 2.6.0-alpha07 zawiera te zmiany.

Poprawki błędów

  • Warianty interfejsu API getBackStackEntry, popBackStackclearBackStack, które przyjmują trasy, teraz przyjmują wzorce tras z argumentami dopuszczającymi wartość null i parametry zapytania dopuszczające wartość null (I22294, b/269302500).
  • Rozwiązaliśmy problem polegający na tym, że wywołanie clearBackStack()NavController nie powodowało wyczyszczenia zapisanego stanu w menedżerze fragmentów powiązanym z wyczyszczonym stosem wstecznym. (Ic1cce, b/271190202)
  • Naprawiliśmy regresję w wersji 2.6.0-alpha06, która powodowała, że podczas przełączania kart za pomocą funkcji Wstecz systemu nieprawidłowy znak MenuItem w elemencie BottomNavigationView był podświetlany. (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 podczas korzystania z Animation. (Ib3589, b/269646882)

Wersja 2.6.0-alpha06

22 lutego 2023 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-alpha06 Wersja 2.6.0-alpha06 zawiera te zmiany.

Nowe funkcje

  • Podczas wyświetlania podglądu funkcji kompozycyjnej za pomocą NavHost domyślnie będzie teraz wyświetlany element startDestination z elementu NavGraph. (I2b89f)

Zmiany w interfejsie API

  • Wszystkie przeciążenia NavController navigate są teraz oznaczone adnotacją @MainThread, aby mieć pewność, że są wywoływane w głównym wątku. (I2c0b0, b/263427111)

Poprawki błędów

  • Rozwiązaliśmy problem z awarią podczas próby nawigacji przy użyciu dynamicznej nawigacji po fragmentach. (I3ee29, b/268360479)
  • Usunęliśmy błąd, który powodował, że po przejściu do innego fragmentu za pomocą systemowego przycisku Wstecz pasek u dołu nie aktualizował się do prawidłowo wybranego elementu (If559f, b/269044426).

Znane problemy

  • Podczas korzystania z nawigacji z fragmentami cykl życia NavBackStackEntrynie osiąga stanu RESUMED, gdy używane są interfejsy API Animation. (b/269646882)
  • Jeśli używasz nawigacji z fragmentami i nawigujesz za pomocą BottomNavigation, a następnie próbujesz przywrócić stos wsteczny z wieloma wpisami, element BottomMenuItem nie jest prawidłowo aktualizowany. (b/270447657)
  • Podczas korzystania z nawigacji z fragmentami po przywróceniu stanu element NavBackStackEntry Lifecycle nie otrzymuje wartości DESTROYED, gdy jego fragment ma wartość DESTROYED . (b/270610768)

Wersja 2.6.0-alpha05

8 lutego 2023 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-alpha05 Wersja 2.6.0-alpha05 zawiera te zmiany.

Nowe funkcje

  • NavController.popBackStack(route), NavController.getBackStackEntry(route) i NavController.clearBackStack(route) obsługują teraz trasy z argumentami częściowo lub w pełni wypełnionymi. Pamiętaj, że argumenty muszą być dokładnie takie same jak argumenty wpisu. (Iebd28, Ic678c, I3b37b, b/257514373)
  • FragmentNavigator korzysta teraz z interfejsów API przejścia podczas nawigacji i wyświetlania NavBackStackEntries. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać na zakończenie efektów specjalnych związanych z wchodzeniem i wychodzeniem fragmentu, zanim przesunie swój ostatni Lifecycle.State. (I3cb19, b/238686802)
  • DialogFragmentNavigator korzysta teraz z interfejsów API przejścia podczas nawigacji i wyświetlania NavBackStackEntries. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać, aż DialogFragment Lifecycle przejdzie do stanu DESTROYED, zanim sam przejdzie do stanu DESTROYED. (I53ee5, b/261213893)

Zmiany w interfejsie API

  • NavigatorState udostępnia teraz interfejs API prepareForTransition, który umożliwia Navigatorom przenoszenie NavBackStackEntries do pośrednich Lifecycle.Stateów. (I42c21, b/238686802)
  • Możesz teraz uzyskać dostęp do listy wstecznej powiązanej z usługą NavGraphNavigator lub ComposeNavigator za pomocą usługi backstack. ComposeNavigator udostępnia teraz wywołanie zwrotne onTransitionComplete(), aby oznaczyć element NavBackStackEntry, który wykonał operację nawigacji lub popBackStack, jako ukończony. (I02062, I718db, b/257519195)

Poprawki błędów

  • Stan nawigatora nie będzie już wykonywać żadnych działań podczas korzystania z interfejsów API push/popWithTransition, jeśli wpis jest już obsługiwany. (Iadbfa, b/261213893)
  • Jeśli używasz elementu launchSingleTop z zagnieżdżonym elementem NavGraph, wszystkie miejsca docelowe, począwszy od pierwotnego miejsca docelowego aż do jego elementu startDestination, zostaną prawidłowo dodane tylko na górę stosu wstecznego. (Id4bea, b/253256629)
  • Nawigacja będzie teraz prawidłowo zastępować instancję DialogFragment podczas przechodzenia do tego samego miejsca docelowego z ustawioną wartością true flagi launchSingleTop. (I45b5a, b/149572817)
  • SafeArgs w nawigacji nie będzie już powodować błędu kompilacji w przypadku używania argumentów o długości dokładnie 19 znaków. (Id60bc, b/257110095)

Wersja 2.6.0-alpha04

9 listopada 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-alpha04 Wersja 2.6.0-alpha04 zawiera te zmiany.

Nowe funkcje

  • Niestandardowe podklasy NavType mogą teraz zastępować serializeAsValue, aby serializować wartość do ciągu znaków, co umożliwia całkowite zamknięcie serializacji i deserializacji (za pomocą parseValue) w klasie NavType. StringType zastępuje teraz tę metodę, aby wywoływać Uri.encode na podanym String. (Ie5213, b/247637434)
  • NavigationUI udostępnia teraz logi, gdy nie uda się nawigować za pomocą wybranego MenuItem. (I2af5a, b/247730357)

Poprawki błędów

  • Precyzyjne linki nawigacyjne są teraz analizowane leniwie, a nie podczas inicjowania wykresu, co może poprawić wydajność aplikacji podczas uruchamiania. (Iab0ab)
  • Naprawiono błąd powodujący awarię podczas nawigacji w górę po precyzyjnym linku do miejsca docelowego z argumentami domyślnymi o wartości null. (I51c24, b/243183636)

Aktualizacja zależności

  • Obsługa dynamicznych modułów funkcji w nawigacji zależy teraz od szczegółowej biblioteki Play Feature Delivery. (Ib4ddc)
  • Bezpieczne argumenty nawigacyjne zależą teraz od wtyczki Androida do obsługi Gradle w wersji 7.3.0. Oznacza to, że jest on teraz zgodny tylko z wersjami 7.3.0 i nowszymi. (I47e49)

Wersja 2.6.0-alpha03

24 października 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-alpha03 Wersja 2.6.0-alpha03 zawiera te zmiany.

Poprawki błędów

  • W sekcji Nawigacja 2.5.3: NavHost nie będzie już powodować NoSuchElementException, gdy nie będzie dostępnego miejsca docelowego, do którego Crossfade może się udać. Teraz będzie po prostu pomijać kompozycję. (Ieb46e, b/253299416)
  • Nawigacja: 2.5.3 rozwiązaliśmy problem polegający na tym, że zapisany stan funkcji Compose (np. użycie rememberSaveable) nie był zapominany ani usuwany, gdy miejsce docelowe było usuwane ze stosu wstecznego. (I64949)

Aktualizacje zależności

Wersja 2.6.0-alpha02

5 października 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-alpha02 Wersja 2.6.0-alpha02 zawiera te zmiany.

Zmiany w zachowaniu

  • Gdy przekazujesz identyfikator wykresu nawigacji do AppBarConfiguration (np. za pomocą Menu), NavigationUI traktuje teraz tylko miejsce docelowe rozpoczęcia tego wykresu nawigacji jako miejsce docelowe najwyższego poziomu, zamiast nieprawidłowo oznaczać każde miejsce docelowe na wykresie jako miejsce docelowe najwyższego poziomu. Sposób przekazywania identyfikatora pojedynczego miejsca docelowego pozostaje bez zmian. Ta sama funkcja jest dostępna w Twoim kodzie za pomocą nowej funkcji isTopLevelDestinationAppBarConfiguration. (Ie936e, b/238496771)

Poprawki błędów

  • Komponent navigation:navigation-fragment zależy teraz od wersji Fragmentu 1.5.2. (I00ba4)
  • Wybrany element menu nie będzie już aktualizowany podczas przechodzenia do FloatingWindow miejsca docelowego, np. okna. (I4cde8, b/240308330)

Wersja 2.6.0-alpha01

7 września 2022 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.6.0-alpha01 Wersja 2.6.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Integracje setupWithNavControllerNavigationUI do pracy z górnym paskiem aplikacji będą teraz analizować wartości R.string argumentów ReferenceType znalezionych w android:label i zwracać ich wartości typu String zamiast automatycznie generowanej liczby całkowitej zasobu. (I5f803, b/167959935)
  • NavDeepLink obsługuje teraz wartości domyślne tablic, co umożliwia obsługę powtarzających się parametrów zapytania, które będą mapowane na typ tablicy argumentu. NavType zawiera teraz też metodę domyślną, którą można zastąpić, aby połączyć 2 przeanalizowane wartości. (Id68c3, b/209977108)
  • Jeśli w atrybutach app:dataapp:dataPattern elementu activity w pliku XML nawigacji użyjesz dokładnego ciągu znaków ${applicationId} jako symbolu zastępczego, zostanie on automatycznie wypełniony wartością packageName kontekstu po rozwinięciu. (Iaabde, b/234223561)
  • Próba utworzenia pustego NavDeepLink za pomocą navDeepLink Kotlin DSL spowoduje teraz wyświetlenie ostrzeżenia narzędzia lint wskazującego, że precyzyjny link musi zawierać adres URI, działanie lub typ MIME, aby był prawidłowy. (I08d2f, b/154038883)

Zmiany w interfejsie API

  • Dodano nową funkcję rozszerzenia NavDestination, która analizuje dynamiczne etykiety z argumentami w formacie android:label="{arg}" i przekształca je w ciąg znaków. Obsługuje argumenty ReferenceType, analizując wartości R.string i przekształcając je w wartości typu String. (I07d89, b/236269380)

Zmiany w zachowaniu

  • arguments NavBackStackEntry i arguments przekazywane do OnDestinationChangedListener są teraz tylko kopią niezmiennych argumentów, które zostały utworzone podczas przechodzenia do miejsca docelowego. Oznacza to, że wszelkie zmiany wprowadzone w tych pakietach nie będą odzwierciedlane w kolejnych dostępach do arguments ani innych instancji OnDestinationChangedListener. (I676f5)

Poprawki błędów

  • Nawigacja2.5.2: dynamiczna nawigacja próbuje teraz prawidłowo zainstalować miejsca docelowe aktywności z innych modułów przed przejściem do nich. (Ia2c16, b/240292838)
  • Navigation 2.5.2: nawigacja będzie teraz prawidłowo zastępować instancję Fragment podczas przechodzenia do tego samego miejsca docelowego i ustawiania flagi launchSingleTop na wartość true. (I5a2f1, b/237374580)
  • W sekcji Nawigacja2.5.2: naprawiono błąd IllegalStateException spowodowany przejściem do zagnieżdżonego dwukrotnie wykresu, który ma element nadrzędny wspólny z nowym wyskakującym miejscem docelowym. (I9f7cb, b/243778589)

Wersja 2.5

Wersja 2.5.3

24 października 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.5.3 Wersja 2.5.3 zawiera te zmiany.

Poprawki błędów

  • NavHost nie będzie już powodować NoSuchElementException, gdy nie będzie dostępnego miejsca docelowego, do którego Crossfade może wysłać wiadomość. Teraz będzie po prostu pomijać kompozycję. (Ieb46e, b/253299416)
  • Rozwiązaliśmy problem polegający na tym, że zapisany stan funkcji Compose (np. użycie rememberSaveable) nie był zapominany ani usuwany, gdy miejsce docelowe było usuwane ze stosu wstecznego. (I64949)

Wersja 2.5.2

7 września 2022 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.5.2 Wersja 2.5.2 zawiera te zmiany.

Poprawki błędów

  • Nawigacja dynamiczna próbuje teraz prawidłowo 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ć instancję Fragmentu podczas przechodzenia do tego samego miejsca docelowego i ustawiania flagi launchSingleTop na wartość true. (I5a2f1, b/237374580)
  • Rozwiązano problem IllegalStateException spowodowany przejściem do podwójnie zagnieżdżonego wykresu, który ma wspólny element nadrzędny z nowym wyskakującym miejscem docelowym. (I9f7cb, b/243778589)

Aktualizacja zależności

Wersja 2.5.1

27 lipca 2022 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.5.1 Wersja 2.5.1 zawiera te zmiany.

Poprawki błędów

  • Navigation Safe Args nie będzie już powodować ostrzeżeń o wycofaniu w wygenerowanych klasach podczas używania niestandardowych typów argumentów zapisanych w Bundle. (Id86ed, b/237725966)

Aktualizacje zależności

Wersja 2.5.0

29 czerwca 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.5.0 Wersja 2.5.0 zawiera te zmiany.

Ważne zmiany od wersji 2.4.0

  • Integracja CreationExtras – Navigation może teraz udostępniać bezstanowy ViewModelProvider.Factory za pomocą cyklu życia 2.5.0 CreationExtras.

Navigation SafeArgs

  • Navigation Safe Args uaktualniło zależność Android Gradle Plugin, aby korzystać z 7.0.4, co spowodowało utratę zgodności z wersjami AGP wcześniejszymi niż 7.0.
  • Dodaliśmy obsługę atrybutu build.gradle przestrzeni nazw, który może być używany zamiast applicationId.

Inne zmiany

  • Interfejs visibleEntries API nie jest już eksperymentalny i udostępnia funkcję pobierania wszystkich wpisów, których miejsce docelowe jest obecnie widoczne zgodnie z ustawieniami NavController.

Wersja 2.5.0-rc02

15 czerwca 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.5.0-rc02 Wersja 2.5.0-rc02 zawiera te zmiany.

Poprawki błędów

  • Naprawiliśmy błąd powodujący awarię przy szybkim przełączaniu między miejscami docelowymi u dołu ekranu podczas korzystania z komponentu Navigation Compose NavHost. (I3979a, b/234054916)
  • Navigation SafeArgs nie będzie już ulegać awarii podczas używania applicationIdSuffix i przestrzeni nazw bez applicationId lub gdy applicationId i przestrzeń nazw różnią się od siebie. (I754b1, b/233119646)
  • NavArgument ma teraz niestandardową funkcję toString(), która wyświetla wewnętrzne wartości argumentu. (I900a8)

Wersja 2.5.0-rc01

11 maja 2022 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.5.0-rc01 Wersja 2.5.0-rc01 zawiera te zmiany.

Nowe funkcje

  • Dodaliśmy nową regułę lint, która ostrzega przed umieszczaniem elementów <deeplink> w elementach <activity> w pliku navigation.xml.(Ic15a5, b/178403185)

Poprawki błędów

  • Zakresy kompozycyjne w NavHostDialogHost są teraz usuwane w oczekiwanej kolejności, tzn. wewnętrzne funkcje kompozycyjne są usuwane przed zewnętrznymi. (I157e6)
  • Navigation SafeArgs używa teraz PathSensitivity.RELATIVEArgumentsGenerationTask, aby umożliwić przenoszenie pamięci podręcznej. Oznacza to, że wpis w pamięci podręcznej można teraz ponownie wykorzystać w kompilacji CI w kompilacji lokalnej. (I5f67c, b/173420454)
  • Reguła lint UnrememberedGetBackStackEntryDetector została zaktualizowana, aby zapewnić, że wywołanie remember otaczające wywołanie getBackStackEntry() również przekazuje obiekt NavBackStackEntry jako klucz.(Ib7081, b/227382831)

Wersja 2.5.0-beta01

20 kwietnia 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.5.0-beta01 Wersja 2.5.0-beta01 zawiera te zmiany.

Poprawki błędów

  • DialogNavigator używa teraz popWithTransition podczas wykonywania połączenia dismiss(). Rozwiązuje to problem z wyścigiem, który występuje podczas używania ViewModel w miejscu docelowym dialog i powoduje błąd IllegalStateException podczas zamykania okna za pomocą przycisku Wstecz lub kliknięcia poza oknem. (Id7376, b/226552301)

Aktualizacje zależności

  • Nawigacja zależy teraz od Cyklu życia2.5.0-beta01, co rozwiązuje problem IllegalStateException podczas zagnieżdżania jednego NavHost w innym NavHost na karcie nawigacji u dołu innej niż główna, gdy używasz wielu stosów wstecznych.

Wersja 2.5.0-alpha04

6 kwietnia 2022 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.5.0-alpha04 Wersja 2.5.0-alpha04 zawiera te zmiany.

Zmiany w interfejsie API

Poprawki błędów

  • Komponent NavHost zależy teraz od visibleEntriesNavController, aby określić, które wpisy mają być tworzone. Oznacza to, że podczas korzystania z zagnieżdżonego elementu NavHost wewnętrzny element NavHost powinien teraz prawidłowo animować wyjście. (I4ba2b, b/225394514)
  • Wartość visibleEntries StateFlow podawana przez NavController jest teraz oparta na maksymalnym stanie cyklu życia wpisu, a nie na bieżącym stanie cyklu życia. Oznacza to, że nawet jeśli stan hosta navController zmieni się na stan wcześniejszy niż STARTED, lista widocznych wpisów pozostanie bez zmian. (I9e2a8, b/225394514)
  • SavedStateViewFactory obsługuje teraz używanie CreationExtras nawet wtedy, gdy zostało zainicjowane za pomocą SavedStateRegistryOwner. Jeśli podasz dodatkowe informacje, zainicjowane argumenty zostaną zignorowane. (I6c43b, b/224844583)
  • NavDeepLink może teraz analizować adresy URI z jednym parametrem zapytania bez wartości. (I0efe8, b/148905489)
  • Puste ciągi znaków są teraz uznawane za prawidłowe argumenty w precyzyjnych linkach. (I70a0d, b/217399862)
  • Navigation Safe Args nie będzie już ulegać awarii podczas używania przestrzeni nazw, gdy nie ma AndroidManifest.xml. (I17ccf, b/227229815)

Wersja 2.5.0-alpha03

23 lutego 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.5.0-alpha03 Wersja 2.5.0-alpha03 zawiera te zmiany.

Zmiany w interfejsie API

  • Możesz teraz przekazywać wartość CreationExtras do funkcji by navGraphViewModels, aby utworzyć ViewModel. (I29217, b/217618359)

Poprawki błędów

  • NavDeepLinks teraz prawidłowo obsługuje zakodowane znaki nowego wiersza osadzone w identyfikatorach URI tras lub precyzyjnych linków. (I513d1, b/217815060)
  • CreationExtras będzie teraz działać prawidłowo w połączeniu z NavBackStackEntries podczas tworzenia obiektów ViewModel. (I69161, b/217617710)
  • Bezpieczne argumenty nawigacji obsługują teraz używanie przestrzeni nazw zdefiniowanej w build.gradle zamiast pakietu w pliku AndroidManifest. (I659ef, b/217414933)

Wersja 2.5.0-alpha02

9 lutego 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.5.0-alpha02 Wersja 2.5.0-alpha02 zawiera te zmiany.

Poprawki błędów

  • Nawigacji 2.4.1: NavHostFragment będzie teraz prawidłowo ustawiać OnBackPressedDispatcher podczas używania powiązania widoku z zagnieżdżonymi wykresami. (Ifbb51, b/214577959)
  • W sekcji Nawigacja2.4.1: w przypadku głębokiego linkowania przez wiele zagnieżdżonych elementów NavGraph stos wsteczny będzie teraz prawidłowo zawierać pośrednie miejsca docelowe. (I504c0, b/214383060)

Wersja 2.5.0-alpha01

26 stycznia 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.5.0-alpha01 Wersja 2.5.0-alpha01 zawiera te zmiany.

Nowe funkcje

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że dostęp do obiektu ViewModel utworzonego za pomocą by navGraphViewModels() z poziomu onCreate() fragmentu kończył się niepowodzeniem i wyświetlany był błąd IllegalStateException. (I8a14d)
  • NavDeepLinknie będą już niepotrzebnie dwukrotnie dekodować argumentów, co oznacza, że do miejsca docelowego będą teraz przekazywane prawidłowe argumenty. (I31b0a, b/210711399)

Safe Args

  • Safe Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 7.0.4. Oznacza to, że Navigation Safe Args nie będzie już zgodny z Androidem Studio w wersji starszej niż 7.0, ale jest teraz zgodny z wtyczką Androida do obsługi Gradle w wersji 7.1.0 lub nowszej. (I41c88, b/213086135, b/207670704)

Wersja 2.4.2

Wersja 2.4.2

6 kwietnia 2022 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.2 Wersja 2.4.2 zawiera te zmiany.

Poprawki błędów

Wersja 2.4.1

Wersja 2.4.1

9 lutego 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.1 Wersja 2.4.1 zawiera te zmiany.

Poprawki błędów

  • NavHostFragment będzie teraz prawidłowo ustawiać OnBackPressedDispatcher podczas używania powiązania widoków z zagnieżdżonymi wykresami. (Ifbb51, b/214577959)
  • W przypadku precyzyjnego linkowania przez wiele zagnieżdżonych elementów NavGraph lista wsteczna będzie teraz prawidłowo zawierać pośrednie miejsca docelowe. (I504c0, b/214383060)
  • Wycofano z Navigation 2.5.0-alpha01: rozwiązano problem, który powodował, że dostęp do obiektu ViewModel utworzonego za pomocą by navGraphViewModels()onCreate() fragmentu kończył się niepowodzeniem i występował błąd IllegalStateException. (I8a14d)
  • Wycofane z Navigation2.5.0-alpha01: NavDeepLinkargumenty nie są już niepotrzebnie dekodowane dwukrotnie, co oznacza, że do miejsca docelowego przekazywane są teraz prawidłowo zdekodowane argumenty. (I31b0a, b/210711399)
  • Przeniesione z Navigation 2.5.0-alpha01: Safe Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 7.0.4. Oznacza to, że Navigation Safe Args nie będzie już zgodny z Androidem Studio w wersji starszej niż 7.0, ale jest teraz zgodny z wtyczką Androida do obsługi Gradle w wersji 7.1.0 lub nowszej. (I41c88, b/213086135, b/207670704)

Wersja 2.4.0

Wersja 2.4.0

26 stycznia 2022 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0 Wersja 2.4.0 zawiera te zmiany.

Ważne zmiany od wersji 2.3.0

  • Wszystkie artefakty Navigation zostały przepisane w języku Kotlin. Poprawiło to możliwość przyjmowania wartości null przez klasy korzystające z typów ogólnych (np. podklasy NavType). Wszystkie funkcje rozszerzające w Kotlinie, które były częścią artefaktów -ktx, zostały przeniesione do odpowiednich artefaktów głównych. Artefakty -ktx będą nadal publikowane, ale będą całkowicie puste.
  • navigation-fragment zawiera teraz gotową implementację układu dwupanelowego za pomocą nowego AbstractListDetailFragment. Ten fragment używa klasy SlidingPaneLayout do zarządzania panelem listy (który zapewnia podklasa) i panelem szczegółów, który korzysta z klasy NavHostFragment jako implementacji, jak widać w naszej przykładowej implementacji.
  • Metoda currentBackStackEntryAsFlow()NavController udostępnia Flow, który emituje sygnał za każdym razem, gdy zmieni się bieżący NavBackStackEntry. Ten proces może być używany jako alternatywa dla ręcznego zarządzania plikiem OnDestinationChangedListener.
  • Kontroler NavController umożliwia teraz pobieranie listy wszystkich widocznych instancji NavBackStackEntry jako StateFlow za pomocą eksperymentalnej właściwości visibleEntries.
  • Możesz teraz rozszerzyć klasę NavType, aby utworzyć niestandardowe typy NavType. Typy niestandardowe są obsługiwane tylko wtedy, gdy tworzysz wykres nawigacji programowo, np. za pomocą języka DSL Kotlin do tworzenia wykresów nawigacji.
  • Nawigacja udostępnia teraz interfejsy API findStartDestination()getHierarchy(), które można wykorzystać do wdrożenia niestandardowego interfejsu NavigationUI. findStartDestination() to funkcja rozszerzająca NavGraph, która lokalizuje rzeczywisty cel początkowy, który będzie wyświetlany podczas nawigacji do wykresu, nawet jeśli startDestination jest zagnieżdżonym NavGraph. getHierarchy() to funkcja na platformie NavDestination, która umożliwia sprawdzenie, czy dane miejsce docelowe znajduje się w hierarchii innego miejsca docelowego.

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • Metody NavigationUI, które przyjmowały BottomNavigationView, zostały zaktualizowane tak, aby zamiast tego przyjmowały jego superklasę wprowadzoną w Materialu 1.4.0, NavigationBarView. Dzięki temu można używać tych metod w przypadku NavigationRailView.

  • Podczas tworzenia elementu <action> za pomocą XML atrybuty animacji mogą używać atrybutów pobranych z motywu za pomocą składni app:enterAnim="?attr/transitionEnter".

  • Safe Args generuje teraz metodę fromSavedStateHandle() dla każdej klasy NavArgs. (#122, b/136967621)

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

Trasy nawigacji i język DSL Kotlin

W poprzednich wersjach nawigacji każde miejsce docelowe miało stały identyfikator w postaci liczby całkowitej, który jednoznacznie odróżniał je od innych miejsc docelowych i umożliwiał navigate() do niego bezpośrednio lub za pomocą działania. Chociaż to rozwiązanie nadal jest ważne i przydatne, zwłaszcza w przypadku definiowania wykresu nawigacji w formacie XML i możliwości używania automatycznie generowanych stałych R.id lub Safe Args (które używają tych stałych do generowania kodu w czasie kompilacji), ten system unikalnych liczb całkowitych nie oddawał znaczenia semantycznego i ekspresywności potrzebnych do obsługi w pełni dynamicznych wykresów tworzonych programowo w czasie działania za pomocą Navigation Kotlin DSL.

W tej wersji wprowadziliśmy nową opcję jednoznacznego identyfikowania miejsca docelowego na wykresie nawigacji za pomocą trasy. Trasa to String, która określa unikalną ścieżkę do miejsca docelowego. Wszystkie metody Kotlin DSL, które przyjmowały identyfikator miejsca docelowego, są teraz wycofane i zastąpione równoważnym interfejsem API, który przyjmuje trasę.

Każda trasa powinna być traktowana jako część „ścieżki” Uri, która określa miejsce docelowe, np. home, profile/{userId}, profile/{userId}/friends itp. Jeśli tożsamość miejsca docelowego jest powiązana z określonymi treściami, te dynamiczne argumenty powinny być częścią trasy i podlegać tym samym regułom co niejawne linki do konkretnych treści.

Wszystkie interfejsy API NavController, które wcześniej przyjmowały tylko identyfikator, mają teraz przeciążenie, które przyjmuje ścieżkę String. Obejmuje to m.in. navigate(), popBackStack(), popUpTo() i getBackStackEntry().

Ma to pewne konsekwencje dla interfejsu API:

  • Właściwość popUpTo Kotlin w języku Kotlin DSL została wycofana na rzecz popUpToId.
  • Interfejs API getStartDestination() został wycofany na rzecz interfejsu getStartDestinationId().

W przeciwieństwie do nawigacji według identyfikatora nawigacja według trasy podlega tym samym regułom co niejawne linki do konkretnych stron. Oznacza to, że możesz bezpośrednio przejść do dowolnego miejsca docelowego w dowolnym zagnieżdżonym grafie, dzięki czemu te trasy są użyteczne w projektach wielomodułowych bez konieczności jawnego dodawania do każdego miejsca docelowego widocznego z zewnątrz linku do konkretnej strony.

Navigation Compose

Artefakt navigation-compose zapewnia integrację między komponentem nawigacjiJetpack Compose. Jako miejsca docelowe w aplikacji używa @Composablefunkcji.

Ta wersja zapewnia:

  • Komponent NavHost, który umożliwia tworzenie wykresu nawigacji za pomocą języka Kotlin DSL, z użyciem miejsc docelowych composabledialog oraz obsługą opcjonalnych nawigatorów, takich jak te z Accompanist Navigation Material.
  • Obowiązkowa obsługa płynnego przechodzenia między miejscami docelowymi. Animacja nawigacji Accompanist umożliwia kontrolowanie przejść wejścia i wyjścia za pomocą eksperymentalnych interfejsów API Compose.
  • Określanie zakresu Lifecycle dla każdego miejsca docelowego, które można komponować. Każdy stan docelowy osiąga stan RESUMED, gdy kończą się wszystkie przejścia wejściowe, i natychmiast przechodzi do stanu STARTED, gdy rozpoczynają się wszystkie przejścia wyjściowe. Dzięki temu możesz uniknąć wszystkich problemów związanych ze stanem IllegalStateException i wielodotykiem, wywołując połączenie navigate tylko wtedy, gdy stan Lifecycle to RESUMED.
  • Określanie zakresu ViewModel (za pomocą interfejsu API viewModel() Lifecycle ViewModel Compose 2.4.0 lub hiltViewModel() Hilt Navigation Compose 1.0.0 na poziomie miejsca docelowego, co zapewnia zakres, który przetrwa zmiany konfiguracji i znajduje się na liście wstecznej (gdy zawartość funkcji kompozycyjnej jest w inny sposób usuwana), oraz sygnał w onCleared() ViewModel, który wskazuje trwałe usunięcie i wyczyszczenie stanu powiązanego z tym NavBackStackEntry.
  • Określanie zakresu stanu rememberSaveable na poziomie miejsca docelowego, co zapewnia automatyczne zapisywanie i przywracanie całego stanu kompozycyjnego po powrocie do miejsca docelowego.
  • Pełna obsługa zapisywania i przywracania stanu elementu NavController oraz stanu miejsca docelowego po zakończeniu i ponownym utworzeniu procesu.
  • Automatyczna integracja z systemowym przyciskiem Wstecz.
  • Obsługa przekazywania argumentów, dołączania precyzyjnych linków do miejsc docelowych i zwracania wyniku do poprzednich miejsc docelowych.

  • Utwórz konkretne funkcje pomocnicze w rememberNavController()currentBackStackEntryAsState(), aby umożliwić przenoszenie stanu i połączenie NavController z funkcjami kompozycyjnymi poza NavHost (np. z dolnym paskiem nawigacyjnym).

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

Więcej informacji znajdziesz w przewodniku po tworzeniu nawigacji w Compose.

Wiele stosów wstecznych

Klasa NavController odpowiada za zarządzanie stosem wstecznym miejsc docelowych, dodawanie do niego miejsc docelowych, gdy navigate(), oraz usuwanie ich, gdy wywołasz popBackStack() lub naciśniesz systemowy przycisk Wstecz. Istniejąca klasa NavOptions i integracja z elementami <action> w pliku XML wykresu nawigacji zostały rozszerzone o możliwość zapisywania i przywracania stosu wstecznego.

W ramach tej zmiany metody NavigationUI klas onNavDestinationSelected(), BottomNavigationView.setupWithNavController()NavigationView.setupWithNavController() automatycznie zapisują i przywracają stan usuniętych miejsc docelowych, co umożliwia obsługę wielu stosów wstecznych bez wprowadzania zmian w kodzie. Jeśli używasz nawigacji z fragmentami, jest to zalecany sposób integracji z wieloma stosami wstecznymi.

Podstawowe interfejsy API do zapisywania i przywracania stanu są udostępniane na różnych platformach:

  • W pliku XML nawigacji element <action> może teraz używać atrybutów logicznych app:popUpToSaveStateapp:restoreState, aby zapisywać stan wszystkich miejsc docelowych wyświetlanych za pomocą elementu app:popUpTo i przywracać stan powiązany z miejscem docelowym przekazanym jako app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • W navOptionsKotlin DSL możesz dodać właściwości logiczne restoreState i saveState do popUpTokonstruktora:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • Podczas ręcznego tworzenia obiektu NavOptions za pomocą metody NavOptions.Builder możesz użyć metody setRestoreState() i nowego przeciążenia do setPopUpTo(), które przyjmuje dodatkowy parametr saveState.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • Wywołania zautomatyzowane do popBackStack() mogą teraz zawierać dodatkowy parametr saveState.

  • Za pomocą metody clearBackStack() możesz wyczyścić każdy stan zapisany za pomocą metod popBackStack() lub popUpToSaveState.

W każdym przypadku NavController zapisze i przywróci stan każdego elementu NavBackStackEntry, w tym wszystkie instancje ViewModel w zakresie miejsca docelowego nawigacji. Interfejsy API Navigator zostały zaktualizowane, aby umożliwić każdemu Navigator zapisywanie i przywracanie własnego stanu.

Zmiany w działaniu

  • NavDeepLinkBuilder dodaje teraz PendingIntent.FLAG_IMMUTABLE do PendingIntent zwracanego przez createPendingIntent(), dzięki czemu ten interfejs API działa zgodnie z oczekiwaniami w przypadku kierowania na Androida 12.
  • Nawigacja zależy teraz od Lifecycle 2.3.1 i oznacza metody setGraph(), popBackStack(), navigateUp()navigate(), które aktualizują NavBackStackEntry Lifecycle, jako @MainThread, co sprawia, że nawigacja jest zgodna z wymaganiami dotyczącymi głównego wątku wprowadzonymi w Lifecycle 2.3.0.
  • Precyzyjne linki sprawdzają teraz, czy wszystkie wymagane argumenty (bez wartości domyślnych) są obecne w Uri.
  • NavDeepLink Przeanalizowane argumenty traktują teraz znaki funta w taki sam sposób jak znaki zapytania, czyli jako separator między segmentami ścieżki. Zapobiega to rozciąganiu się argumentu na znak funta.
  • Podczas generowania działań kod Kotlin wygenerowany na podstawie Safe Args umieszcza teraz argumenty bez wartości domyślnych przed argumentami z wartościami domyślnymi jako parametry.
  • Podczas generowania argumentów Safe Args umieszcza teraz parametry bez wartości domyślnych przed parametrami z wartościami domyślnymi.
  • Safe Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 4.2.0. Oznacza to, że nie powinno już pojawiać się ostrzeżenie o używaniu applicationIdTextResource.

Znane problemy

  • Naprawiono w Nawigacji2.5.0-alpha01: dostęp do ViewModel utworzonego za pomocą by navGraphViewModels()onCreate() fragmentu zakończy się niepowodzeniem i wyświetli się IllegalStateException. (b/213504272)
  • Naprawiono w Navigation2.5.0-alpha01: Safe Args 2.4.0 jest niezgodny z wtyczką Androida do obsługi Gradle w wersji 7.1.0 i nowszej. (b/213086135)
  • Precyzyjne linki z wieloma zagnieżdżonymi wykresami nawigacji nie tworzą prawidłowo pełnej listy wstecznej. (b/214383060)

Wersja 2.4.0-rc01

15 grudnia 2021 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-rc01 Wersja 2.4.0-rc01 zawiera te zmiany.

Zmiany w działaniu

  • NavDeepLink Przeanalizowane argumenty traktują teraz znaki funta w taki sam sposób jak znaki zapytania, czyli jako separator między argumentami. (I21309, b/180042703)

Poprawki błędów

  • Linki bezpośrednie nie będą już ignorować argumentów o wartościach takich samych jak nazwa obiektu zastępczego. (If8017, b/207389470)
  • NavController nie będzie już ulegać awarii podczas wysuwania zagnieżdżonego miejsca docelowego za pomocą przejść po przywróceniu NavController. (I0f7c9, b/205021623)
  • Komunikat o błędzie wyświetlany podczas używania nieprawidłowego elementu startDestination będzie teraz domyślnie zawierać trasę do miejsca docelowego, jeśli jest ona dostępna. (I86b9d, b/208041894)

Poprawki błędów w Nawigacji w Compose

  • Naprawiono potencjalny problem z awarią spowodowaną szybkim przełączaniem się między miejscem docelowym a innym miejscem docelowym za pomocą elementów menu nawigacyjnego u dołu ekranu. (Ic8976, b/208887901)
  • Okna docelowe są teraz prawidłowo przywracane na górze ekranu po zmianach konfiguracji lub zakończeniu procesu. (I4c0dc, b/207386169)
  • Rozwiązaliśmy problem, który powodował, że próba pobrania ViewModelNavBackStackEntry okna kończyła się niepowodzeniem po zamknięciu okna. (I6b96d, b/206465487)
  • Rozwiązaliśmy problem, który występował podczas używania miejsc docelowych activity z funkcją NavHost Navigation Compose i powodował nieskończone ponowne komponowanie. (I8f64c)
  • Usunięto wyciek pamięci w Navigation Compose, który powodował, że po zmianie konfiguracji lub zakończeniu procesu zachowywano odniesienie do starej aktywności. (I4efcb, b/204905432)

Poprawki błędów w Safe Args

  • SafeArgs nie ulega już awarii podczas próby przywrócenia niestandardowych tablic obiektów Parcelable po zakończeniu procesu. (I618e8, b/207315994)
  • Naprawiliśmy błąd w bezpiecznych argumentach, który uniemożliwiał tablicom wartości logicznych przyjmowanie wartości null. (I8c396, b/174787525)

Wersja 2.4.0-beta02

3 listopada 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-beta02 Wersja 2.4.0-beta02 zawiera te zmiany.

Zmiany w interfejsie API

  • Obsługa jawnych i niejawnych linków do konkretnych treści automatycznie dodaje teraz flagę saveState podczas przechodzenia do innego wykresu, co zapewnia, że kod, taki jak NavigationUI.setupWithNavController, oraz kod korzystający z wielu stosów wstecznych działają zgodnie z oczekiwaniami. (Ic8807)

Zmiany w zachowaniu

  • Wzorce precyzyjnych linków są teraz kompilowane w klasie NavDeepLink w sposób odroczony, a nie podczas rozszerzania. Powinno to skrócić czas wczytywania wykresów nawigacji zawierających precyzyjne linki. (b8d257, b/184149935)

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że po przejściu do Lifecycle.State.STARTED wpisy NavBackStackEntries były przenoszone do Lifecycle.State.CREATED, gdy NavHost był dodawany bezpośrednio do setContent() aktywności. (Ia5ac1, b/203536683)
  • Rozwiązaliśmy problem polegający na tym, że usunięcie miejsca docelowego DialogFragment z listy wstecz przed wyświetleniem okna dialogowego nie powodowało jego zamknięcia, co prowadziło do awarii, gdy użytkownik ręcznie zamykał to okno. (I687e5)
  • Rozwiązaliśmy problem, który powodował, że interfejs onNavDestinationSelected API na NavigationUI zwracał true, nawet jeśli nie navigate() do tego wykresu nawigacji. Obecnie korzysta z tej samej logiki, która jest używana wewnętrznie przez setupWithNavController, aby wybierać tylko MenuItem powiązane z bieżącym miejscem docelowym za pomocą hierarchy miejsca docelowego. (I2b053)

Wersja 2.4.0-beta01

27 października 2021 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-beta01 Wersja 2.4.0-beta01 zawiera te zmiany.

Nowe funkcje

  • Możesz teraz używać by navGraphViewModel z trasą jako alternatywy dla identyfikatora, aby lepiej obsługiwać używanie Kotlin DSL Navigation z fragmentami. (I901e3, b/201446416)

Zmiany w interfejsie API

  • Interfejs API visibleEntries jest teraz w wersji eksperymentalnej. (I93f6f)

Poprawki błędów

  • Obiekty ViewModel nie będą już niszczone, gdy przejścia zostaną przerwane przez przechodzenie tam i z powrotem między tymi samymi ekranami (Id52d8, b/200817333).
  • Argumenty z wartością null NavDeepLink nie wymagają już wartości domyślnej podczas dodawania precyzyjnych linków do NavDestination. (I5aad4, b/201320030)
  • Obiekty NavBackStackEntry z różnymi stanami cyklu życia nie są już traktowane jako równe. Oznacza to, że NavHost prawidłowo ponownie skomponuje wszystkie miejsca docelowe podczas nawigacji z użyciem singleTop i ponownego wybierania elementów menu u dołu ekranu. (I1b351, b/196997433)
  • Rozwiązaliśmy problem z AbstractListDetailFragment, który powodował, że atrybuty layout_widthlayout_weight w panelu listy zwracanym przez onCreateListPaneView() były nieprawidłowo obsługiwane lub ignorowane. (f5fbf3)
  • Stan wizualny miejsc docelowych w oknie dialogowym jest teraz prawidłowo synchronizowany ze stanem DialogFragmentNavigator. Oznacza to, że ręczne wywoływanie asynchronicznego interfejsu API dismiss() dla DialogFragment teraz prawidłowo usuwa wszystkie miejsca docelowe okien powyżej zamkniętego okna. Nie ma to wpływu na przypadki, w których zamykasz okno dialogowe, klikając popUpTo lub popBackStack(). (I77ba2)
  • AbstractAppBarOnDestinationChangedListener ma teraz bardziej przejrzyste komunikaty o błędach dotyczące onDestinationChanged(). (Ie742d)

Wersja 2.4.0-alpha10

29 września 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-alpha10 Wersja 2.4.0-alpha10 zawiera te zmiany.

Nowe funkcje

  • Kontroler NavController umożliwia teraz pobieranie listy wszystkich widocznych instancji za pomocą NavBackStackEntry StateFlow (Ia964e).visibleEntries
  • rememberNavController() przyjmuje teraz opcjonalny zestaw instancji Navigator, które zostaną dodane do zwracanego NavController, aby lepiej obsługiwać opcjonalne nawigatory, takie jak te z materiałów nawigacyjnych Accompanist. (I4619e)

Poprawki błędów

  • Nawigacja dynamiczna nie będzie już ulegać awarii po ponownym utworzeniu aktywności. (Ifa6a3, b/197942869)
  • Rozwiązaliśmy problem z systemowym przyciskiem Wstecz, który występuje tylko po powrocie do miejsca docelowego, które zawiera element kompozycyjny NavHost. (3ed148, b/195668143)
  • SafeArgs generuje teraz argumenty dla fromBundle()fromSavedStateHandle() w odpowiedniej kolejności parametrów. (I824a8, b/200059831)

Wersja 2.4.0-alpha09

15 września 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-alpha09 Wersja 2.4.0-alpha09 zawiera te zmiany.

Nowe funkcje

  • Możesz teraz użyć metody clearBackStack(), aby wyczyścić dowolny stan zapisany za pomocą popBackStack() lub popUpToSaveState. (I80a0f)
  • Możesz teraz przekazywać listę argumentów lub linków do aplikacji do konstruktora zagnieżdżonego wykresu nawigacji, a zostaną one automatycznie dodane do wynikowego wykresu. (I8a470, b/182545357)

Zmiany w interfejsie API

  • Funkcja navArgument Kotlin DSL jest teraz częścią navigation-common zamiast navigation-compose. Aby nadal korzystać z tej funkcji, musisz zaktualizować importy. (I1d095)

Zmiany w zachowaniu

  • Podczas generowania argumentów Safe Args umieszcza teraz parametry bez wartości domyślnych przed parametrami z wartościami domyślnymi. (I89709, b/198493585)

Poprawki błędów

  • W przypadku korzystania z Navigation Compose wykresy NavGraph będą DESTROYED dopiero wtedy, gdy wszystkie ich elementy podrzędne będą DESTROYED. (I86552, b/198741720)
  • Argumenty z wartością null NavDeepLink nie wymagają już wartości domyślnej. (Ia14ef, b/198689811)
  • Wywołanie setGraph() z nowym wykresem spowoduje teraz wyczyszczenie wszystkich zapisanych stosów wstecznych, a nie tylko usunięcie stosu wstecznego, jak to miało miejsce wcześniej. (I97f96)
  • Rozwiązaliśmy problem, który powodował, że instancje OnDestinationChangedListenercurrentBackStackEntryFlow nie otrzymywały powiadomień podczas korzystania z launchSingleTop. (Iaaebc)

Aktualizacje zależności

Wersja 2.4.0-alpha08

1 września 2021 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-alpha08 Wersja 2.4.0-alpha08 zawiera te zmiany.

Nowe funkcje

Zmiany w zachowaniu

  • Podczas generowania działań kod Kotlin wygenerowany na podstawie Safe Args umieszcza teraz argumenty bez wartości domyślnych przed argumentami z wartościami domyślnymi jako parametry. (Idb697, b/188855904)
  • Precyzyjne linki sprawdzają teraz, czy wszystkie wymagane argumenty (bez wartości domyślnych) są obecne w Uri. (#204, b/185527157)

Poprawki błędów

  • Używanie adnotacji getBackStackEntrypreviousBackStackEntry w funkcji composable() w połączeniu z adnotacją remember() nie będzie już powodować wyjątku związanego z brakiem miejsca docelowego na liście wstecznej. (I75138, b/194313238)
  • Biblioteka Navigation Compose ponownie komponuje się prawidłowo podczas zmiany argumentów stosu wstecznego i używania launchSingleTop=true. (Iebd69, b/186392337)
  • Podczas wywoływania funkcji ArrayIndexOutOfBoundsException w przypadku wykresu z 13 lub 29 miejscami docelowymi nie będzie już występować błąd setGraph. (I1a9f1, b/195171984)
  • Generator języka Java SafeArgs nie powinien już powodować ostrzeżeń narzędzia lint podczas generowania klas Args. (I1a666, b/185843837)

Wkład zewnętrzny

  • Dziękujemy ospixd za sprawdzenie, czy precyzyjne linki weryfikują, czy wszystkie wymagane argumenty (bez wartości domyślnych) są obecne w Uri. (#204, b/185527157)

Wersja 2.4.0-alpha07

18 sierpnia 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-alpha07 Wersja 2.4.0-alpha07 zawiera te zmiany.

Poprawki błędów

  • Biblioteka Navigation Compose prawidłowo zapisuje stan po zmianach konfiguracji i podczas zmiany wykresów przy użyciu funkcji wielu stosów wstecznych. (If5a3d, b/195141957)
  • Ponowne wybieranie tej samej karty podczas korzystania z kompozycji nawigacji z wieloma stosami wstecznymi nie będzie już powodować wyświetlania pustego ekranu. (I860dc, b/194925622)
  • NavHost obserwuje teraz zmiany w Lifecycle.State NavBackStackEntry, co oznacza, że użycie NavHost we fragmencie spowoduje prawidłowe ponowne skomponowanie w miarę zmian cyklu życia, zamiast wyświetlania pustego ekranu. (I4eb85, b/195864489)
  • Rozwiązaliśmy problem polegający na tym, że zamknięcie DialogFragment nie powodowało prawidłowej aktualizacji stanu NavController po ponownym utworzeniu aktywności (np. po zmianie konfiguracji). (Icd72b)
  • Rozwiązaliśmy problem, który powodował, że po zamknięciu okna dialogowego nie aktualizowano obsługi systemowego przycisku Wstecz w kontrolerze NavController, co mogło powodować przechwytywanie przez kontroler NavController przycisku Wstecz, mimo że nie miał on żadnego stosu wstecznego do zamknięcia. (If3b34)
  • Safe Args automatycznie generuje teraz metodę toSavedStateHandle dla argumentów, których można używać do testowania kodu ViewModel. (If1e2d, b/193353880)

Wersja 2.4.0-alpha06

4 sierpnia 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-alpha06 Wersja 2.4.0-alpha06 zawiera te zmiany.

Zmiany w interfejsie API

  • Metody requireSlidingPaneLayout() i requireDetailPaneNavHostFragment() w AbstractListDetailFragment zostały zmienione na getSlidingPaneLayout() i getDetailPaneNavHostFragment(). (I34a08)

Zmiany w zachowaniu

  • Podczas nawigacji z animacjami (np. Crossfade) nowy element docelowy Lifecycle będzie teraz osiągać RESUMED dopiero po zakończeniu animacji. (If0543, b/172112072, b/194301889)
  • NavHost w Navigation Compose ustawia teraz wykres jako część pierwszej kompozycji. (Ieb7be)

Poprawki błędów

  • Usunięcie ostatniego miejsca docelowego z grafu nawigacji nie powoduje już błędu ClassCastException. (If0543, b/172112072, b/194301889)
  • Rozwiązaliśmy problem NullPointerException, który występował podczas dodawania precyzyjnego linku bez Uri i korzystania z nawigacji po trasie lub precyzyjnym linku. (938a0c, b/193805425)
  • Rozwiązaliśmy problem w Navigation Compose, który powodował, że precyzyjny link NavBackStackEntry nie osiągał stanu RESUMED. (I192c5)
  • Rozwiązaliśmy problem, który powodował, że zamknięcie okna nie aktualizowało obsługi systemowego przycisku Wstecz w kontrolerze NavController, co mogło sprawić, że kontroler NavController przechwytywał przycisk Wstecz, mimo że nie miał żadnego stosu wstecznego do zamknięcia. (aosp/1782668)

Wersja 2.4.0-alpha05

21 lipca 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-alpha05 Wersja 2.4.0-alpha05 zawiera te zmiany.

Zmiany w zachowaniu

  • Biblioteka Navigation Compose NavHost zawsze używa teraz przejść między stronami podczas nawigacji między miejscami docelowymi. (I07049, b/172112072)
  • Możesz teraz wprowadzać zmiany na wykresie NavHost. Wykresy z tym samym elementem startDestination i miejscami docelowymi na wykresie będą uznawane za równe i nie będą czyścić stosu wstecznego NavController. (I0b8db, b/175392262)

Poprawki błędów

  • Naprawiono NoSuchElementException, gdy wywoływanie popBackStack()LifecycleObserver dołączonym do NavBackStackEntry powodowało NoSuchElementException z powodu ponownego wchodzenia w stan NavController. (I64621)
  • AbstractListDetailFragment umożliwia teraz całkowite usunięcie z pliku APK, gdy AbstractListDetailFragment nie jest używane.SlidingPaneLayout (I611ad)
  • NavGraphNavDestination zastępują teraz metodę equals, więc dwa obiekty o tych samych wartościach będą uznawane za równe. (I166eb, b/175392262)

Wersja 2.4.0-alpha04

1 lipca 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-alpha04 Wersja 2.4.0-alpha04 zawiera te zmiany.

Nowe funkcje

  • navigation-fragment zawiera teraz gotową implementację układu dwupanelowego za pomocą nowego AbstractListDetailFragment. Ten fragment używa klasy SlidingPaneLayout do zarządzania panelem listy (który zapewnia podklasa) i panelem szczegółów, który korzysta z klasy NavHostFragment jako implementacji, jak widać w naszej przykładowej implementacji. (Iac4be, b/191276636)
  • NavHost artefaktu navigation-compose obsługuje teraz miejsca docelowe dialog oprócz miejsc docelowych composable. Każde z tych miejsc docelowych okna dialogowego będzie wyświetlane w funkcji Composable Dialog, unosząc się nad bieżącym miejscem docelowym composable. (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 addNavigatorState została zmieniona na push. Wszystkie bieżące wywołania funkcji add() należy zmienić na push(). (Ie89fc, b/172112072)
  • Niestandardowe instancje Navigator mogą teraz używać interfejsów API pushWithTransactionpopWithTransitionNavigatorState do asynchronicznego wysyłania lub pobierania miejsca docelowego. Pamiętaj, że te interfejsy API nie są jeszcze używane przez żadną z dołączonych nawigacji. (Ic4d7c, b/172112072)

Zmiany w zachowaniu

  • NavDeepLinkBuilder dodaje teraz PendingIntent.FLAG_IMMUTABLE do PendingIntent zwracanego przez createPendingIntent(), dzięki czemu ten interfejs API działa zgodnie z oczekiwaniami w przypadku kierowania na Androida 12. (If8c52)

Poprawki błędów

  • Rozwiązaliśmy problem z <include-dynamic>, który powodował, że argumenty przekazywane do wykresu nie były prawidłowo przekazywane do wykresu dołączonego dynamicznie. (I3e115)
  • Rozwiązaliśmy problem z NullPointerException podczas nawigacji do miejsca docelowego za pomocą argumentu string[] o wartości domyślnej @null. (I1fbe8)
  • Dodaj reguły ProGuard dla @Navigator.Name, aby rozwiązać problemy podczas korzystania z trybu pełnego R8 3.1. (I2add9, b/191654433)
  • SafeArgs nie będzie już powodować błędów podczas kompilowania aplikacji w wersjach starszych niż 1.5.0.Kotlin (Icd1ff, b/190739257)

Wersja 2.4.0-alpha03

16 czerwca 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-alpha03 Wersja 2.4.0-alpha03 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że do przejścia do dołączonego wykresu dynamicznego potrzebne były 2 wywołania navigate(). (I7785c, b/188859835)
  • Naprawiliśmy błąd regresji wprowadzony w Nawigacji 2.4.0-alpha01, który powodował, że setupActionBarWithNavController() nie usuwał prawidłowo ikony Wstecz, gdy użytkownik znajdował się w miejscu docelowym najwyższego poziomu. (I5d443, b/189868637)
  • Rozwiązaliśmy problem IllegalStateException, który występował podczas wywoływania popBackStack() po wcześniejszym usunięciu głównego wykresu NavControllera. (I2a330, b/190265699)
  • Reguły ProGuard dla by navArgs() są teraz prawidłowo stosowane podczas korzystania z navigation-common lub innych artefaktów, które od niego zależą. (I68800, b/190082521)
  • OnDestinationChangedListener, która przy pierwszym wywołaniu zwrotnymnavigate() otrzymuje teraz drugie wywołanie zwrotne z miejscem docelowym, do któregonavigate() dotarła. (Ie5f9e, b/190228815)
  • Safe Args nie powoduje już awarii podczas używania z modułami funkcji dynamicznych i AGP 7.0 lub nowszym. (I69518, b/189966576)

Znany problem

  • Safe Args nie będzie działać i wyświetli błąd Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’, jeśli używasz Gradle 6.7.0, ponieważ jest on zależny od starszej wersji Kotlina. Można to obejść, aktualizując Gradle do wersji 7.0. (b/190739257)

Wersja 2.4.0-alpha02

2 czerwca 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-alpha02 Wersja 2.4.0-alpha02 zawiera te zmiany.

Nowe funkcje

  • Trasy są teraz obsługiwane w przypadku miejsc docelowych Activity, Fragment i Dialog, a także w całym dynamicznym interfejsie DSL nawigacji w Kotlinie. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • NavigationUI tymczasowo dodał eksperymentalne interfejsy API, aby umożliwić rezygnację z zapisywania stanu. Zapisywanie stanu jest prawidłowym działaniem, ale nadal istnieją przypadki użycia wycofanych bibliotek (np.zachowywanych fragmentów), które nie mogą być obsługiwane podczas zapisywania stanu. Daje to aplikacjom możliwość stopniowego przechodzenia na inne interfejsy API. (Idf93c)
  • Nawigacja udostępnia teraz interfejsy API findDestination()getHierarchy(), które można wykorzystać do wdrożenia niestandardowego interfejsu NavigationUI. findDestination() to funkcja rozszerzająca NavGraph, która znajduje miejsce docelowe w grafie. getHierarchy() to funkcja na NavDestination, której można użyć do sprawdzenia, czy dane miejsce docelowe znajduje się w hierarchii innego miejsca docelowego.(I2932f, b/188183365)

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • Metody NavigationUI, które przyjmowały BottomNavigationView, zostały zaktualizowane tak, aby zamiast tego przyjmowały jego klasę nadrzędną wprowadzoną w Material 1.4.0, NavigationBarView. Dzięki temu można używać tych metod w przypadku NavigationRailView. (Ib0b36, b/182938895)

  • Podczas rozwijania elementu <action> za pomocą XML atrybuty animacji mogą używać atrybutów pobranych z motywu za pomocą składni app:enterAnim="?attr/transitionEnter". (I07bc1, b/178291654)

Zmiany w interfejsie API

  • Konstruktory Kotlin DSL, które używają identyfikatora, zostały wycofane i należy je zastąpić konstruktorami, które używają tras (I85b42, b/188816479). (I9f58f, b/188816479)

Poprawki błędów

  • DialogFragmentNavigator korzysta teraz z interfejsu NavigatorState.pop() API, aby informować NavController, kiedy okno zamyka się po naciśnięciu systemowego przycisku Wstecz lub kliknięciu poza nim. Dzięki temu stan NavController jest zawsze zsynchronizowany ze stanem nawigatora. (I2ead9)
  • Nawigacja nie zwraca już wartości ConcurrentModificationException, gdy używasz manipulowania listą OnDestinationChangedListeners za pomocą wywołania zwrotnego onDestinationChanged. (Ib1707, b/188860458)

  • Safe Args nie powoduje już awarii podczas próby wygenerowania właściwości kierunku w Kotlinie. (Id2416, b/188564435)

  • Metoda setId w klasie NavDestination ma teraz prawidłową adnotację @IdRes, więc akceptuje tylko identyfikatory zasobów. (I69b80)

  • Parametr int funkcji findNode ma teraz wartość resId zamiast resid. (I7711d)

Aktualizacja zależności

  • Safe Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 4.2.0. Oznacza to, że nie powinno już pojawiać się ostrzeżenie o używaniu applicationIdTextResource. (I6d67b, b/172824579)

Wersja 2.4.0-alpha01

18 maja 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.4.0-alpha01 Wersja 2.4.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Metoda currentBackStackEntryAsFlow()NavController udostępnia Flow, który emituje sygnał za każdym razem, gdy zmieni się bieżący NavBackStackEntry. Ten proces może być używany jako alternatywa dla ręcznego zarządzania plikiem OnDestinationChangedListener. (I19c4a, #89, b/163947280)

Wiele stosów wstecznych

Klasa NavController odpowiada za zarządzanie stosem wstecznym miejsc docelowych, dodawanie do niego miejsc docelowych, gdy navigate(), oraz usuwanie ich, gdy wywołasz popBackStack() lub naciśniesz systemowy przycisk Wstecz. Istniejąca klasa NavOptions i integracja z wpisami <action> w pliku XML wykresu nawigacji zostały rozszerzone, aby obsługiwać zapisywanie i przywracanie stosu wstecznego. (b/80029773)

W ramach tej zmiany metody NavigationUI klas onNavDestinationSelected(), BottomNavigationView.setupWithNavController()NavigationView.setupWithNavController() automatycznie zapisują i przywracają stan usuniętych miejsc docelowych, co umożliwia obsługę wielu stosów wstecznych bez wprowadzania zmian w kodzie. Jeśli używasz nawigacji z fragmentami, jest to zalecany sposób integracji z wieloma stosami wstecznymi. (Ie07ca)

Podstawowe interfejsy API do zapisywania i przywracania stanu są udostępniane na różnych platformach:

  • W pliku XML nawigacji element <action> może teraz używać atrybutów logicznych app:popUpToSaveStateapp:restoreState, aby zapisywać stan wszystkich miejsc docelowych wyświetlanych za pomocą elementu app:popUpTo i przywracać stan powiązany z miejscem docelowym przekazanym jako app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • W navOptionsKotlin DSL możesz dodać właściwości logiczne restoreState i saveState do popUpTokonstruktora:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • Podczas ręcznego tworzenia obiektu NavOptions za pomocą metody NavOptions.Builder możesz użyć metody setRestoreState() i nowego przeciążenia do setPopUpTo(), które przyjmuje dodatkowy parametr saveState.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(navController.getGraph().getStartDestinationId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • Wywołania zautomatyzowane do popBackStack() mogą teraz zawierać dodatkowy parametr saveState.

W każdym przypadku NavController zapisze i przywróci stan każdego elementu NavBackStackEntry, w tym wszystkie instancje ViewModel w zakresie miejsca docelowego nawigacji. Interfejsy API Navigator zostały zaktualizowane, aby umożliwić każdemu Navigator zapisywanie i przywracanie własnego stanu.

Interfejs ComposeNavigator używany w przypadku miejsc docelowych composable w Navigation Compose oraz interfejsy FragmentNavigatorDynamicFragmentNavigator używane w przypadku miejsc docelowych <fragment> w Navigation with Fragments zostały zaktualizowane, aby korzystać z nowych interfejsów Navigator API i obsługiwać zapisywanie oraz przywracanie stanu.

Trasy nawigacyjne

Trasa to String, która jednoznacznie identyfikuje miejsce docelowe. Wcześniej to pojęcie było używane tylko w Navigation Compose, ale teraz stało się częścią podstawowych interfejsów API Navigation. Jest to alternatywa dla używania identyfikatorów całkowitych podczas tworzenia grafu za pomocą Navigation Kotlin DSL. (b/172823546)

Wszystkie interfejsy API, które wcześniej przyjmowały tylko identyfikator, mają teraz przeciążenie, które przyjmuje ścieżkę String. Obejmuje to m.in. navigate(), popBackStack(), popUpTo() i getBackStackEntry().

Ma to pewne konsekwencje dla interfejsu API:

  • Właściwość popUpTo w języku Kotlin DSL została wycofana na rzecz popUpToId. (I59c73, b/172823546)
  • Interfejs API getStartDestination() został wycofany na rzecz interfejsu getStartDestinationId(). (I0887f, b/172823546)

W przypadku deweloperów, którzy przechodzą z poprzednich wersji Navigation Compose na Navigation Compose 2.4.0-alpha01, oznacza to, że te importy w metodach rozszerzeń nie są już potrzebne i należy je usunąć:

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

Argument KEY_ROUTE został zastąpiony właściwością route w obiekcie NavDestination, co umożliwia bezpośrednie wywoływanie funkcji navBackStackEntry.destination.route.

Zmiany w interfejsie API

  • Wszystkie artefakty Navigation zostały przepisane w języku Kotlin. Poprawiło to możliwość przyjmowania wartości null przez klasy korzystające z typów ogólnych (np. podklasy NavType). Wszystkie funkcje rozszerzające w Kotlinie, które były częścią artefaktów -ktx, zostały przeniesione do odpowiednich artefaktów głównych. Artefakty -ktx będą nadal publikowane, ale będą całkowicie puste. (b/184292145)
  • NavDeepLinkBuilder obsługuje teraz dodawanie wielu różnych miejsc docelowych do wygenerowanego stosu wstecznego. (I3ee0d, b/147913689)
  • Dodaj funkcje fabryczne dla DynamicNavHostFragment (Icd515, b/175222619)
  • Unikalny identyfikator NavBackStackEntry jest teraz udostępniany w ramach publicznego interfejsu API. (Ie033a)
  • Pola nameargument oraz funkcje destrukcji NamedNavArgument są teraz publiczne. (#174, b/181320559)
  • Wprowadziliśmy nowe rozszerzenie NavBackStackEntry#provideToCompositionLocals, które udostępnia NavBackStackEntry odpowiednim lokalizacjom kompozycji. (#175, b/187229439)

Safe Args

  • Safe Args generuje teraz metodę fromSavedStateHandle() dla każdej klasy NavArgs. (#122, b/136967621)

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • Zaktualizowano Safe Args, aby zależał od KotlinPoet w wersji 1.8.0. (#172, b/183990444)

Zmiany w zachowaniu

  • Nawigacja zależy teraz od Lifecycle 2.3.1 i oznacza metody setGraph(), popBackStack(), navigateUp()navigate(), które aktualizują NavBackStackEntry Lifecycle, jako @MainThread, co sprawia, że nawigacja jest zgodna z wymaganiami dotyczącymi głównego wątku wprowadzonymi w Lifecycle 2.3.0. (b/171125856)
  • Analizowanie argumentów wyliczeniowych z precyzyjnych linków nie uwzględnia już wielkości liter, co pozwala dopasować precyzyjny link http://www.example.com/red do precyzyjnego linku www.example.com/{color}, nawet jeśli wyliczenie ma wartość RED. (#152, b/135857840)

Zgodność z Compose

  • androidx.navigation:navigation-compose:2.4.0-alpha01 jest zgodny tylko z Compose w wersji 1.0.0-beta07 lub nowszej.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że symbole zastępcze argumentów końcowych miały pierwszeństwo przed precyzyjnymi linkami z dokładnie takim samym sufiksem. (#153, b/184072811)
  • NavHostFragment obsługuje teraz niestandardowe nawigatory, które używają tego samego @Navigator.Name("dialog") co domyślny DialogFragmentNavigator. (Ib1c2c, b/175979140)
  • Ulepszyliśmy działanie funkcji NavigatorProvider#addNavigator, aby wielokrotne wywoływanie jej z tą samą instancją nie powodowało problemów. (#176, b/187443146)

Wkład zewnętrzny

  • Dziękujemy simonschiller za dodanie obsługi Safe Args, która generuje metodę fromSavedStateHandle() dla każdej klasy NavArgs. (#122, b/136967621)
  • Dziękujemy Bradleycorn za to, że argumenty wyliczeniowe z precyzyjnych linków są analizowane bez uwzględniania wielkości liter. (#152, b/135857840)
  • Dziękujemy osipxd za rozwiązanie problemu, w którym zmienne argumentów na końcu miały pierwszeństwo przed precyzyjnymi linkami z pasującym dokładnym sufiksem. (#153, b/184072811)
  • Dziękujemy tatocaster za zaktualizowanie Safe Args, aby zależało od KotlinPoet 1.8.0. (#172, b/183990444)
  • Dziękujemy jossiwolf za udostępnienie pól nameargument oraz funkcji dekonstrukcji NamedNavArgument. (#174, b/181320559)
  • Dziękujemy jossiwolf za wprowadzenie nowego rozszerzenia NavBackStackEntry#provideToCompositionLocals, które zapewnia NavBackStackEntry w odpowiednich lokalizacjach kompozycji. (#175, b/187229439)
  • Dziękujemy jossiwolf za ulepszenie działania funkcji NavigatorProvider#addNavigator, dzięki czemu wielokrotne wywoływanie jej z tą samą instancją nie powoduje problemów. (#176, b/187443146)

Wersja 1.0.0-alpha10

7 kwietnia 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-compose:1.0.0-alpha10 Wersja 1.0.0-alpha10 zawiera te zmiany.

Zmiany w interfejsie API

  • NavHost akceptuje teraz Modifier, który jest przekazywany do kontenera kompozycyjnego opakowującego kompozycje docelowe. (I85aca, b/175125483)

Poprawki błędów

  • NavHost działa teraz nawet wtedy, gdy nie można znaleźć OnBackPressedDispatcherOwner, np. podczas wyświetlania podglądu NavHost. (I7d8b4)
  • Biblioteka Navigation Compose zależy teraz od Navigation 2.3.5, co rozwiązuje problem podczas używania BackHandler w miejscu docelowym NavHost. (I7e63b, b/182284739)

Wersja 1.0.0-alpha09

10 marca 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-compose:1.0.0-alpha09 Wersja 1.0.0-alpha09 zawiera te zmiany.

Zmiany w interfejsie API

  • LocalViewModelStoreOwner.current zwraca teraz wartość dopuszczającą wartość null ViewModelStoreOwner, aby lepiej określać, czy w bieżącej kompozycji jest dostępny element ViewModelStoreOwner. Interfejsy API, które wymagają ViewModelStoreOwner, np. viewModel()NavHost, nadal zgłaszają wyjątek, jeśli nie ustawiono ViewModelStoreOwner. (Idf39a)

Poprawki błędów

  • Biblioteka Navigation Compose zależy teraz od Navigation 2.3.4, która zawiera poprawkę błędu polegającego na próbie ustawienia tego samego obiektu ViewModelStore po ustawieniu wykresu. (I65c24, b/177825470)

Wersja 1.0.0-alpha08

24 lutego 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-compose:1.0.0-alpha08 Wersja 1.0.0-alpha08 zawiera te zmiany.

Nowe funkcje

  • NavHost wypełnia teraz LocalSavedStateRegistryOwner CompositionLocal wartością NavBackStackEntry miejsca docelowego, dzięki czemu każdy stan zapisany bezpośrednio w SavedStateRegistry będzie zapisywany i przywracany wraz z miejscem docelowym. (I435d7, b/179469431)

Wersja 1.0.0-alpha07

10 lutego 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-compose:1.0.0-alpha07 Wersja 1.0.0-alpha07 zawiera te zmiany.

Aktualizacje zależności

Wersja 1.0.0-alpha06

28 stycznia 2021 roku

Zostanie wycofaneandroidx.navigation:navigation-compose:1.0.0-alpha06 Wersja 1.0.0-alpha06 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano metodę rozszerzenia getBackStackEntry(route: String)NavController, która zwraca powiązany element NavBackStackEntry. (If8931)

Wersja 1.0.0-alpha05

13 stycznia 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-compose:1.0.0-alpha05 Wersja 1.0.0-alpha05 zawiera te zmiany.

Zaktualizowano, aby zależał od Compose w wersji 1.0.0-alpha10.

Wersja 1.0.0-alpha04

16 grudnia 2020 roku

Zostanie wycofaneandroidx.navigation:navigation-compose:1.0.0-alpha04 Wersja 1.0.0-alpha04 zawiera te zmiany.

  • Zaktualizowano pod kątem zgodności z Compose 1.0.0-alpha09.

Wersja 1.0.0-alpha03

2 grudnia 2020 r.

Zostanie wycofaneandroidx.navigation:navigation-compose:1.0.0-alpha03 Wersja 1.0.0-alpha03 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że po zmianie konfiguracji lub zakończeniu i ponownym utworzeniu procesu funkcje popBackStack()navigateUp() nie działały. (Icea47, b/173281473)
  • Przechodzenie do zagnieżdżonego wykresu w obiekcie NavHost działa teraz prawidłowo. (I0948d, b/173647694)

Wersja 1.0.0-alpha02

11 listopada 2020 roku

Zostanie wycofaneandroidx.navigation:navigation-compose:1.0.0-alpha02 Wersja 1.0.0-alpha02 zawiera te zmiany.

Zmiany w interfejsie API

  • Nawigacja w Compose obsługuje teraz NavOptions do używania operacji popUpTo i launchSingleTop (If96c3, b/171468994).
  • Dodano funkcję nawigacji, która przyjmuje trasę zamiast identyfikatora, co umożliwia tworzenie zagnieżdżonych wykresów w języku DSL Navigation Compose. (I1661d)
  • Parametr startDestination znajduje się teraz przed parametrem route na liście parametrów elementu NavHost (Ie620e).
  • Możesz teraz utworzyć wykres, używając trasy jako miejsca docelowego poza komponentem kompozycyjnym NavHost. (Iceb75)

Wersja 1.0.0-alpha01

28 października 2020 r.

Zostanie wycofaneandroid.navigation:navigation-compose:1.0.0-alpha01 Wersja 1.0.0-alpha01 zawiera te zmiany.

Nowe funkcje

Artefakt navigation-compose zapewnia integrację między komponentem nawigacjiJetpack Compose. Jako miejsca docelowe w aplikacji używa @Composablefunkcji.

Ta pierwsza wersja zapewnia:

  • NavHost funkcja kompozycyjna, która umożliwia tworzenie wykresu nawigacji za pomocą języka Kotlin DSL.
  • Określanie zakresu 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 konkretne funkcje pomocnicze w rememberNavController()currentBackStackEntryAsState(), aby umożliwić przenoszenie stanu i połączenie NavController z funkcjami kompozycyjnymi poza NavHost (np. z dolnym paskiem nawigacyjnym).

Więcej informacji znajdziesz w przewodniku po tworzeniu nawigacji w Compose.

Wersja 2.3.5

Wersja 2.3.5

7 kwietnia 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.5 Wersja 2.3.5 zawiera te zmiany.

Nowe funkcje

  • Podczas nawigacji za pomocą NavDeepLinkRequest lub Uri możesz teraz uzyskać dostęp do Uri, działania i typu MIME w miejscu docelowym, pobierając intencję z argumentów za pomocą KEY_DEEP_LINK_INTENT. Odzwierciedla to funkcję, która jest już dostępna w przypadku zewnętrznego linkowania bezpośredniego. (I975c3, b/181521877)

Poprawki błędów

  • OnBackPressedCallbacks dodany do dyspozytora z NavBackStackEntry jako LifecycleOwner prawidłowo przechwytuje naciśnięcie przycisku Wstecz po tym, jak cykl życia działania przejdzie w stan STOPPED, a potem STARTED (Iff94f, b/182284739).
  • Analizowanie domeny precyzyjnego linku nie uwzględnia już wielkości liter, dzięki czemu www.example.com pasuje zarówno do www.example.com, jak i do www.Example.com. Pamiętaj, że w nazwach parametrów zapytania nadal jest rozróżniana wielkość liter. (#144, b/153829033)
  • Naprawiono NullPointerException, który mógł występować, gdy miejsce docelowe ma wiele argumentów domyślnych, które nie mogą mieć wartości null, a użytkownik przechodzi do tego miejsca docelowego, zastępując tylko podzbiór tych argumentów. (aosp/1644827)

Aktualizacje zależności

  • Wtyczka Gradle Safe Args do nawigacji zależy teraz od wtyczki Kotlin Gradle w wersji 1.4.31. (aosp/1661058, b/181156413)

Wkład zewnętrzny

  • Dziękujemy bentrengrove za przesłanie prośby o zmianę, która sprawia, że analiza domeny precyzyjnego linku nie uwzględnia wielkości liter. (#144, b/153829033)

Wersja 2.3.4

Wersja 2.3.4

10 marca 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.4 Wersja 2.3.4 zawiera te zmiany.

Nowe funkcje

  • Argumenty ReferenceType mogą być teraz prawidłowo analizowane, gdy są wysyłane jako część identyfikatora URI precyzyjnego linku. Obsługuje zarówno surową wartość całkowitą, jak i wartości szesnastkowe poprzedzone znakiem 0x. (#127, b/179166693)
  • Tag android:defaultValue w przypadku argumentu z tagiem app:argType="float" obsługuje teraz domyślne wartości całkowite, co pozwala używać tagu android:defaultValue="0" zamiast tagu 0.0. (#117, b/173766247)

Poprawki błędów

  • Naprawiono problem z zablokowanym postępem instalacji podczas korzystania z obsługi funkcji dynamicznych w Nawigacji. (Ib27a7, b/169636207)
  • Wywoływanie funkcji setViewModelStore lub setLifecycleOwner z tym samym obiektem, który został już ustawiony, nie będzie już powodować żadnych działań (Idf491, b/177825470).
  • Safe Args dodaje teraz adnotacje suppress do odpowiednich metod podczas korzystania z języka Java. (I8fbc5, b/179463137)

Wkład zewnętrzny

  • Dziękujemy JvmName za żądanie pull, które zapewnia, że argumenty ReferenceType mogą być teraz prawidłowo analizowane, gdy są wysyłane jako część identyfikatora URI linku bezpośredniego. (#127, b/179166693)
  • Dziękujemy tatocaster za prośbę o scalenie, która umożliwia używanie defaultValue jako argumentu z app:argType=”float”. Obsługuje ona teraz domyślne wartości całkowite. (#117, b/173766247)

Wersja 2.3.3

Wersja 2.3.3

27 stycznia 2021 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.3 Wersja 2.3.3 zawiera te zmiany.

Poprawki błędów

  • Nie występuje już awaria podczas wysuwania elementu NavBackStackEntry, zanim jego element Lifecycle zostanie przeniesiony do elementu CREATED. (Ie3ba3)
  • Naprawiono regresję spowodowaną przez b/171364502, w której przejście do aktywności z wartością zasobu animacji 0 powodowało ResourceNotFoundException. (I7aedb, b/176819931)

Wersja 2.3.2

Wersja 2.3.2

2 grudnia 2020 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.2 Wersja 2.3.2 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem w NavigationUI, który powodował, że użycie miejsca docelowego <activity>onNavDestinationSelected nie powodowało przejścia do aktywności. (I22e34, b/171364502)
  • Rozwiązaliśmy problem, który powodował, że naciśnięcie navigation-dynamic-features-fragment skutkowało wielokrotnym przejściem do nowo zainstalowanego miejsca docelowego. (aosp/1486056, b/169636207)
  • Rozwiązaliśmy problem, który powodował, że argumenty domyślne nie były wysyłane do instancji OnDestinationChangedListener podczas używania launchSingleTop. (I2c5cb)
  • Rozwiązaliśmy problem, który powodował, że przejście do zagnieżdżonego wykresu nawigacji nie powodowało utworzenia nowej instancji wykresu na stosie wstecznym. (Ifc831)
  • Rozwiązaliśmy problem polegający na tym, że użycie navigate()popUpTo, które usuwało ostatnie miejsce docelowe na wykresie nawigacji, nie powodowało natychmiastowego zniszczenia i usunięcia samego wykresu nawigacji ze stosu wstecznego. (I910a3)
  • SafeArgs w Nawigacji korzysta teraz z KotlinPoet w wersji 1.7.2, która obsługuje tryb jawnego interfejsu API w Kotlinie. (I918b5)
  • NavHostFragment.findNavController(Fragment) sprawdza teraz również widok dekoracji głównej elementu DialogFragment, oprócz dotychczasowych sprawdzeń hierarchii fragmentów i hierarchii widoków fragmentu. Umożliwia to testowanie fragmentów okien dialogowych, które korzystają z Navigation z użyciem FragmentScenarioNavigation.setViewNavController(). (I69e0d)

Wersja 2.3.1

Wersja 2.3.1

14 października 2020 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.1 Wersja 2.3.1 zawiera te zmiany.

Nowe funkcje

  • Do interfejsu nawigacji dodano domyślne zasoby Animator, które są zalecane zamiast domyślnych zasobów animacji. (b/167430145)
  • Klasa NavOptions zastępuje teraz metody hashCode i equals (b/161586466).
  • Nawigacja zawiera teraz bieżące miejsce docelowe w wyjątku IllegalArgumentException „No destination with ID”, co powinno ułatwić programistom debugowanie. (b/168311416)

Poprawki błędów

  • Safe Args nie będzie już zawijać wiersza zwrotu, nawet jeśli wygenerowana nazwa klasy argumentu będzie dłuższa niż 100 znaków. (b/168584987)

Zmiany zależności

  • navigation-ui zależy teraz od DrawerLayout 1.1.1, co zapewnia możliwość otwierania panelu przez NavigationUI nawet w przypadku korzystania z LOCK_MODE_LOCKED_CLOSED lub LOCK_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.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.0 Wersja 2.3.0 zawiera te zmiany.

Główne zmiany od wersji 2.2.0

  • Integracja modułu funkcji: artefakty navigation-dynamic-features-runtimenavigation-dynamic-features-fragment umożliwiają przechodzenie do miejsc docelowych zdefiniowanych w modułach funkcji, automatycznie obsługując instalację modułów funkcji w razie potrzeby. Więcej informacji znajdziesz w artykule Nawigacja za pomocą modułów funkcji.
  • Testowanie nawigacji: artefakt navigation-testing udostępnia TestNavHostController, który umożliwia ustawienie bieżącego miejsca docelowego i sprawdzenie stosu wstecznego po operacjach nawigacji. Więcej informacji znajdziesz w artykule Testowanie nawigacji.
  • Zwracanie wyniku: element NavBackStackEntry powiązany z każdym miejscem docelowym na liście wstecznej nawigacji umożliwia teraz dostęp do elementu SavedStateHandle odpowiedniego do przechowywania niewielkich ilości zapisanego stanu, który powinien być powiązany z określonym wpisem na liście wstecznej. Więcej informacji znajdziesz w sekcji Przywracanie wyniku do poprzedniego miejsca docelowego.
  • NavigationUI obsługa Openable: wszystkie użycia DrawerLayoutNavigationUI zostały zastąpione bardziej ogólnym interfejsem Openable dodanym w CustomView 1.1.0 i wdrożonym przez DrawerLayoutDrawerLayout 1.1.0.
  • Obsługa działań i typów MIME w precyzyjnych linkach: precyzyjne linki zostały rozszerzone o obsługę app:actionapp:mimeType oprócz wcześniej dostępnego app:uri. NavController obsługuje teraz nawigację według dowolnej kombinacji tych pól za pomocą nowej klasy NavDeepLinkRequest. Więcej informacji znajdziesz w artykule Nawigacja za pomocą NavDeepLinkRequest.

Znane problemy

  • Obsługa działań precyzyjnych linków i typów MIME nie jest jeszcze dostępna w narzędziu do scalania plików manifestu. Do tego czasu wszystkie wygenerowane elementy <intent-filter> z elementu <nav-graph> w pliku manifestu nie będą zawierać typu MIME w elemencie <data> ani niestandardowego elementu <action>. Musisz ręcznie dodać odpowiedni element <intent-filter> do pliku manifestu.

Wersja 2.3.0-rc01

10 czerwca 2020 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.0-rc01 Wersja 2.3.0-rc01 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem NullPointerException, który występował podczas zastępowania wystąpienia miejsca docelowego bez argumentów innym wystąpieniem z argumentami za pomocą singleTop. (b/158006669)
  • Wszystkie wyjątki destination is unknown zgłaszane przez NavController zawierają teraz dodatkowe informacje do debugowania, które pomagają określić stan NavController. (b/157764916)

Wersja 2.3.0-beta01

20 maja 2020 r.

androidx.navigation:navigation-*:2.3.0-beta01. Wersja 2.3.0-beta01 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że LifecycleNavBackStackEntry nie było prawidłowo aktualizowane po zakończeniu procesu. (b/155218371)
  • Instancje OnDestinationChangedListener zarejestrowane przed wywołaniem setGraph() są teraz prawidłowo wysyłane do przywróconego miejsca docelowego po zakończeniu procesu. (b/155218371)
  • Gdy używasz funkcji singleTop, argumenty funkcji NavBackStackEntry są teraz prawidłowo aktualizowane, a zaktualizowane argumenty są wysyłane do wszystkich instancji OnDestinationChangeListener. (b/156545508)

Aktualizacje zależności

Wersja 2.3.0-alpha06

29 kwietnia 2020 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.0-alpha06 (Wersja 2.3.0-alpha06 zawiera te zmiany.)

Nowe funkcje

  • Precyzyjne linki zostały rozszerzone o obsługę app:actionapp:mimeType oprócz wcześniej dostępnego app:uri. Klasa NavController obsługuje teraz nawigację za pomocą dowolnej kombinacji tych pól za pomocą nowej klasy NavDeepLinkRequest. (b/136573074, b/135334841)

Zmiany w interfejsie API

  • Znacznie rozszerzyliśmy obsługę języka Kotlin DSL w przypadku miejsc docelowych nawigacji dynamicznej. (b/148969800)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że intencje precyzyjnych linków były ignorowane podczas korzystania z zagnieżdżonego miejsca docelowego rozpoczęcia. (b/154532067)

Wersja 2.3.0-alpha05

15 kwietnia 2020 roku

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.0-alpha05 Wersja 2.3.0-alpha05 zawiera te zmiany.

Nowe funkcje

  • W przypadku dynamicznych wykresów obejmujących używających <include-dynamic> nie musisz już określać app:graphPackage. Domyślna wartość zostanie użyta przez dodanie sufiksu moduleName do applicationId po kropce. Jeśli musisz dostosować graphPackage, możesz teraz użyć symbolu zastępczego ${applicationId}. (b/152696768)
  • DSL Kotlin wykresu nawigacji udostępnia teraz defaultArguments Map dla działań, co odzwierciedla możliwość ustawiania wartości domyślnych w elementach <action> w plikach XML nawigacji. (b/150345605)

Poprawki błędów

  • Navigation 2.2.2: naprawiono IllegalStateException podczas precyzyjnego linkowania do miejsca docelowego na początku wykresu, gdy w aktywności jest wiele instancji NavHostFragment. (b/147378752)

Aktualizacje zależności

Wersja 2.3.0-alpha04

18 marca 2020 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.0-alpha04 Wersja 2.3.0-alpha04 zawiera te zmiany.

Nowe funkcje

  • Dodano obsługę aktywności modułu funkcji i miejsc docelowych fragmentów w języku Kotlin DSL Navigation. (b/148969800)

Zmiany w interfejsie API

  • Klasa DynamicExtras nie używa już wzorca konstruktora i można ją teraz tworzyć bezpośrednio. (aosp/1253671)
  • Metoda DynamicActivityNavigator przyjmuje teraz w konstruktorze obiekt Context zamiast obiektu Activity. (aosp/1250252)

Poprawki błędów

  • NavigationUI nie ignoruje już pustych etykiet (np. miejsca docelowego z wartością android:label=””) i prawidłowo ustawia tytuł na pusty ciąg tekstowy. (b/148679860)

Aktualizacje zależności

  • Artefakty dynamicznych funkcji nawigacji zależą teraz od biblioteki Play Core 1.6.5. (b/149556401)

Wersja 2.3.0-alpha03

4 marca 2020 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.0-alpha03 Wersja 2.3.0-alpha03 zawiera te zmiany.

Zmiany w interfejsie API

  • Zamiast korzystać z konkretnej klasy DrawerLayout,AppBarConfiguration używa teraz interfejsu Openable wprowadzonego w CustomView 1.1.0-alpha02 (któryDrawerLayout jest implementowany od DrawerLayout 1.1.0-alpha04), co umożliwia używanie niestandardowych implementacji OpenableNavigationUI. (b/129030452)

Poprawki błędów

  • Reguły ProGuard zachowują teraz tylko klasy NavArgs, które są używane, a nie wszystkie instancje NavArgs.navigation-common-ktx (b/150213558)

Zmiany zależności

  • Nawigacja nie zależy już od biblioteki Core 1.2.0, ale od biblioteki Core 1.1.0. Dzięki temu deweloperzy nie muszą przechodzić na nowszą wersję zależności, gdy Nawigacja nie korzysta z żadnych nowych interfejsów API w bibliotece Core 1.2.0.

Wersja 2.3.0-alpha02

19 lutego 2020 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.0-alpha02 Wersja 2.3.0-alpha02 zawiera te zmiany.

Nowe funkcje

  • NavBackStackEntry umożliwia teraz dostęp do SavedStateHandle, który nadaje się do przechowywania niewielkich ilości zapisanego stanu, który powinien być powiązany z określonym wpisem na liście wstecznej. Przykład zastosowania znajdziesz w sekcji Zwracanie wyniku. (b/79672220)

Zmiany w interfejsie API

  • Dodaliśmy wygodne metody getCurrentBackStackEntry()getPreviousBackStackEntry(), aby ułatwić pobieranie NavBackStackEntry dla bieżącego i poprzednich miejsc docelowych. (b/79672220)

Poprawki błędów

  • navigateUp() przekazuje teraz argumenty bieżącego miejsca docelowego i KEY_DEEP_LINK_INTENT do poprzedniego miejsca docelowego podczas uruchamiania aplikacji we własnym stosie zadań. (b/147456890)

Zmiany zależności

Wersja 2.3.0-alpha01

5 lutego 2020 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.3.0-alpha01 Wersja 2.3.0-alpha01 zawiera te zmiany.

Nowe funkcje

  • Nowy artefakt navigation-testing udostępnia klasę TestNavHostController. Ta klasa stanowi alternatywę dla używania obiektu mock NavController podczas testowania nawigacji. Umożliwia ustawienie bieżącego miejsca docelowego i zweryfikowanie listy wstecznej po operacjach nawigacji. (b/140884273)
  • Nowy element navigation-dynamic-features-fragment (i jego zależność przechodnia navigation-dynamic-features-runtime) umożliwia uwzględnianie miejsc docelowych lub całych wykresów nawigacji (za pomocą <include-dynamic>) z modułów funkcji, co zapewnia bezproblemową instalację modułów funkcji na żądanie podczas przechodzenia do tych miejsc docelowych. Więcej informacji znajdziesz w artykule Nawigacja za pomocą modułów funkcji. (b/132170186)

Poprawki błędów

Aktualizacje zależności

Wersja 2.2.2

Wersja 2.2.2

15 kwietnia 2020 roku

androidx.navigation:navigation-*:2.2.2. Wersja 2.2.2 zawiera te zmiany.

Poprawki błędów

  • Naprawiono IllegalStateException podczas precyzyjnego linkowania do miejsca docelowego na początku wykresu, gdy w aktywności występuje wiele instancji NavHostFragment. (b/147378752)
  • NavigationUI nie ignoruje już pustych etykiet (np. miejsca docelowego z wartością android:label=””) i prawidłowo ustawia tytuł na pusty ciąg tekstowy. Ta funkcja została wcześniej udostępniona w Navigation 2.3.0-alpha04. (b/148679860)
  • Reguły ProGuard zachowują teraz tylko klasy NavArgs, które są używane, a nie wszystkie instancje NavArgs.navigation-common-ktx Ta funkcja została wcześniej udostępniona w Navigation 2.3.0-alpha03. (b/150213558

Aktualizacje zależności

Wersja 2.2.1

Wersja 2.2.1

5 lutego 2020 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.2.1 Wersja 2.2.1 zawiera te zmiany.

Poprawki błędów

  • Precyzyjne linki bez parametrów zapytania prawidłowo ignorują teraz wszystkie parametry zapytania, zamiast dołączać je do elementów {argument} lub nie pasować do precyzyjnego linku. (b/147447512)
  • navigation-ui Reguły ProGuard dla DrawerArrowDrawable zostały zaktualizowane, aby zapewnić, że android.enableJetifier=true nie jest wymagane. (b/147610424)
  • Moduł navigation-common-ktx ma teraz unikalną nazwę pakietu manifestu zamiast współdzielić tę samą nazwę pakietu manifestu co navigation-runtime-ktx. (aosp/1141947)

Aktualizacje zależności

Wersja 2.2.0

Wersja 2.2.0

22 stycznia 2020 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.2.0 Wersja 2.2.0 zawiera te zmiany.

Ważne zmiany od wersji 2.1.0

  • NavBackStackEntry: możesz teraz wywołać NavController.getBackStackEntry(), przekazując identyfikator miejsca docelowego lub wykresu nawigacji na stosie wstecznym. Zwrócony element NavBackStackEntry zawiera element LifecycleOwner, ViewModelStoreOwner (taki sam jak zwracany przez NavController.getViewModelStoreOwner()) i SavedStateRegistryOwner, a także argumenty użyte do uruchomienia tego miejsca docelowego.
  • Integracja Lifecycle ViewModel SavedState: SavedStateViewModelFactory jest teraz domyślną fabryką używaną podczas korzystania z by navGraphViewModels() lub konstruktora ViewModelProvider z obiektem ViewModelStoreOwner zwracanym przez NavController.getBackStackEntry() lub NavController.getViewModelStoreOwner().
  • Obsługa parametrów zapytania w precyzyjnych linkach: precyzyjne linki z parametrami zapytania obsługują teraz zmienioną kolejność parametrów zapytania. Argumenty, które mają wartość domyślną lub mogą mieć wartość null, są teraz opcjonalne podczas dopasowywania precyzyjnych linków.
  • Ulepszona obsługa animacji: NavHostFragment korzysta teraz z FragmentContainerViewFragmentu 1.2.0, co rozwiązuje problemy z kolejnością animacji i przekazywaniem wstawień okien do fragmentów.

Wersja 2.2.0-rc04

18 grudnia 2019 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.2.0-rc04 Wersja 2.2.0-rc04 zawiera te zmiany.

Poprawki błędów

  • Dostosowaliśmy domyślne animacje zanikania używane przez navigation-ui, aby pasowały do dostosowanych animacji zanikania w fragmencie 1.2.0-rc04. (b/145769814)

Wersja 2.2.0-rc03

4 grudnia 2019

Zostanie wycofaneandroidx.navigation:navigation-*:2.2.0-rc03 Wersja 2.2.0-rc03 zawiera te zmiany.

Poprawki błędów

  • Rozwiązaliśmy problem z parsowaniem linków bezpośrednich podczas używania parametrów zapytania i argumentu jako ostatniej części ścieżki, który uniemożliwiał parsowanie więcej niż 1 znaku argumentu ścieżki końcowej. (b/144554689)
  • Rozwiązaliśmy problem z analizowaniem precyzyjnych linków, który powodował, że parametry opcjonalne otrzymywały wartość "@null" zamiast null. (b/141613546)
  • NavHostFragment teraz prawidłowo przywraca wykres po zmianie konfiguracji, gdy jest używany z FragmentContainerView. (b/143752103)

Zmiany zależności

  • Nawigacja zależy teraz od komponentów Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03, Activity 1.1.0-rc03 i Fragment 1.2.0-rc03 w odpowiednich przypadkach.

Wersja 2.2.0-rc02

7 listopada 2019 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.2.0-rc02 Wersja 2.2.0-rc02 zawiera te zmiany.

Zmiany zależności

  • Nawigacja zależy teraz od androidx.lifecycle2.2.0-rc02.

Wersja 2.2.0-rc01

23 października 2019 r.

androidx.navigation:navigation-*:2.2.0-rc01 zostaje opublikowany bez zmian od 2.2.0-beta01. Wersja 2.2.0-rc01 zawiera te zmiany.

Wersja 2.2.0-beta01

9 października 2019 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.2.0-beta01 Wersja 2.2.0-beta01 zawiera te zmiany.

Nowe funkcje

  • NavDestination i jego podklasy zastępują teraz toString(), aby podczas debugowania udostępniać bardziej przydatne informacje. (b/141264986)

Zmiany w działaniu

  • Dodatkowe parametry zapytania są teraz ignorowane podczas dopasowywania precyzyjnych linków, zamiast powodować niepowodzenie dopasowania. (b/141482822)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że argumenty w ścieżce precyzyjnego linku były ignorowane, jeśli określono też parametry zapytania. (b/141505755)
  • navArgs()Rozszerzenie Kotlin w Activity wyświetla teraz lepszy komunikat o błędzie, gdy nie ma dodatków. (b/141408999)
  • Wygenerowane przez Safe Args klasy Java Directions zawierają teraz wartości domyślne. (b/141099045)
  • Wygenerowane 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 dwoma miejscami docelowymi najwyższego poziomu. (b/140848160)

Wersja 2.2.0-alpha03

18 września 2019 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.2.0-alpha03 Wersja 2.2.0-alpha03 zawiera te zmiany.

Zmiany w działaniu

  • Dzwonienie pod numer setViewModelStore() po zadzwonieniu pod numer setGraph powoduje teraz IllegalStateException. To ustawienie powinno być zawsze konfigurowane przez NavHost w ramach wstępnej konfiguracji, aby zapewnić wszystkim instancjom NavBackStackEntry spójne miejsce na dane instancji ViewModel. (aosp/1111821)

Poprawki błędów

  • Naprawiono ConcurrentModificationException podczas korzystania z instancji ViewModel dołączonych do wielu różnych instancji ViewModelStore w zakresie wykresu nawigacji. (aosp/1112257)

Wersja 2.2.0-alpha02

5 września 2019 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.2.0-alpha02 Listę zmian w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Precyzyjne linki z parametrami zapytania obsługują teraz zmienioną kolejność parametrów zapytania. Argumenty, które mają wartość domyślną lub mogą mieć wartość null, są teraz opcjonalne podczas dopasowywania precyzyjnych linków. (b/133273839)
  • Możesz teraz wywołać funkcję NavController.getBackStackEntry(), przekazując identyfikator miejsca docelowego lub wykresu nawigacji na stosie wstecznym. Zwrócony element NavBackStackEntry zawiera element LifecycleOwner, ViewModelStoreOwner (taki sam jak zwracany przez NavController.getViewModelStoreOwner()) i SavedStateRegistryOwner, a także argumenty użyte do uruchomienia tego miejsca docelowego. (aosp/1101691, aosp/1101710)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że dodawanie NavHostFragment do ViewPager2 kończyło się niepowodzeniem i wyświetlaniem błędu IllegalArgumentException. (b/133640271)
  • NavInflater nie wywołuje już niepotrzebnie funkcji getResourceName(), co przyspiesza czas rozszerzania nawet o 40%. (b/139213740)

Wersja 2.2.0-alpha01

7 sierpnia 2019 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.2.0-alpha01 Listę zmian w tej wersji znajdziesz tutaj.

Nowe funkcje

  • SavedStateViewModelFactory jest teraz domyślną fabryką używaną podczas korzystania z konstruktora by navGraphViewModels() lub ViewModelProvider z elementem ViewModelStoreOwner zwróconym przez NavController.getViewModelStoreOwner(). (b/135716331)

Zmiany w interfejsie API

Poprawki błędów

  • NavHostFragment korzysta teraz z FragmentContainerView, co rozwiązuje problemy z kolejnością animacji w osi Z i przekazywaniem wstawek okna do fragmentów. (b/137310379)

Wersja 2.1.0

Wersja 2.1.0

5 września 2019 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.1.0 Listę zmian w tej wersji znajdziesz tutaj.

Ważne zmiany od wersji 2.0.0

  • Określanie zakresu ViewModels w grafie nawigacji: możesz teraz tworzyć ViewModels, których zakres jest określony na poziomie grafu nawigacji, używając delegata właściwości by navGraphViewModels() w przypadku użytkowników Kotlin korzystających z bibliotek -ktx lub interfejsu API getViewModelStoreOwner() dodanego do NavController. Więcej informacji znajdziesz w artykule Udostępnianie danych związanych z interfejsem między usługami docelowymi.
  • Miejsca docelowe w oknie dialogowym: możesz teraz tworzyć <dialog> miejsca docelowe, które będą wyświetlać DialogFragment, gdy navigate do nich. NavHostFragment domyślnie obsługuje miejsca docelowe w oknie dialogowym. Więcej informacji znajdziesz w artykule Tworzenie miejsca docelowego na podstawie elementu DialogFragment.
  • Nawigacja za pomocą identyfikatora URI: możesz teraz navigate za pomocą Uri, który wykorzystuje <deepLink> dodany do miejsca docelowego, aby do niego nawigować. Więcej informacji znajdziesz w artykule Nawigacja za pomocą URI.
  • NavHostController: interfejsy API używane specjalnie do tworzenia niestandardowego komponentu NavHost zostały przeniesione do komponentu NavHostController, co umożliwia implementacjom łączenie komponentu NavController z komponentami hosta LifecycleOwner, OnBackPressedDispatcherViewModelStore.

Wersja 2.1.0-rc01

7 sierpnia 2019 r.

Zostanie wycofaneandroidx.navigation:navigation-*:2.1.0-rc01 Listę zmian w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Wycofany interfejs API getViewModelStore() na platformie NavController wprowadzony w 2.1.0-alpha02 został usunięty. (aosp/1091021)

Wersja 2.1.0-beta02

19 lipca 2019 r.

Zostanie wycofaneandroidx.navigation:*:2.1.0-beta02 Listę zmian w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Usunięto niezamierzoną zależność od biblioteki Jacoco, która została wprowadzona w wersji 2.1.0-beta01. (b/137782950)

Wersja 2.1.0-beta01

17 lipca 2019 r.

Zostanie wycofaneandroidx.navigation:*:2.1.0-beta01 Listę zmian w tej wersji znajdziesz tutaj.

Nowe funkcje

  • NavigationUI animuje teraz usuwanie przycisku Wstecz podczas korzystania z setupWithNavController()Toolbar lub CollapsingToolbarLayout. (b/131403621)

Poprawki błędów

  • Rozwiązaliśmy problem z synchronizacją podczas używania wielu elementów NavHostFragment w tym samym kontenerze z findNavController(). (b/136021571)

Wersja 2.1.0-alpha06

2 lipca 2019 r.

Zostanie wycofaneandroidx.navigation:*:2.1.0-alpha06 Listę zmian w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Atrybut app:navGraph używany przez NavHostFragment został przeniesiony do artefaktu navigation-runtime. Niestandardowe nawigatory, które można dodać za pomocą kodu XML, powinny używać tego atrybutu, aby zintegrować się z panelem hosta w edytorze nawigacji. (b/133880955)

Zmiany w interfejsie API

  • Interfejs API getViewModelStore() na platformie NavController został wycofany na rzecz nowej metody getViewModelStoreOwner(), która zwraca ViewModelStoreOwner. (aosp/987010)
  • Implementacja miejsc docelowych w pływającym okienku, takich jak miejsca docelowe <dialog>, została uogólniona w interfejsie znacznika FloatingWindow, który jest teraz implementowany przez wszystkie miejsca docelowe <dialog>. Metody NavigationUI do interakcji z górnym paskiem aplikacji ignorują teraz miejsca docelowe FloatingWindow. (b/133600763)

Zmiany w działaniu

  • Nawigacja prawidłowo synchronizuje swój stan z tym, co jest widoczne na ekranie, gdy używasz miejsca docelowego <dialog>. W rezultacie podczas nawigacji do miejsca docelowego, które nie jest oknem ani aktywnością, np. do <fragment>, nawigacja automatycznie wyświetla <dialog> miejsca docelowe. (b/134089818)

Poprawki błędów

  • Nawigacja pomija teraz animację, która występuje podczas ponownego tworzenia aktywności podczas obsługi precyzyjnego linku, co eliminuje migotanie obrazu. (b/130362979)
  • Naprawiliśmy błąd, który powodował, że stos wsteczny nawigacji był niespójny podczas usuwania fragmentu, gdy dodawany był fragment początkowy. (b/133832218)

Wersja 2.1.0-alpha05

5 czerwca 2019 r.

Zostanie wycofaneandroidx.navigation:*:2.1.0-alpha05 Listę zmian w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

  • Interfejsy API związane z hostem w NavController zostały zmienione i przeniesione do nowej podklasy NavController, czyli NavHostController. (aosp/966091)
  • Metoda NavController setHostOnBackPressedDispatcherOwner() została zastąpiona metodą setOnBackPressedDispatcher() NavHostController i wymaga teraz wywołania metody setLifecycleOwner() przed jej wywołaniem. (aosp/965409)
  • NavHostController zawiera teraz metodę enableOnBackPressed(boolean), która zastępuje klasę NavHostOnBackPressedManager zwracaną wcześniej przez setHostOnBackPressedDispatcherOwner(). (aosp/966091)

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że po przejściu do strony za pomocą URI stos wsteczny był nieprawidłowy. (b/132509387)
  • Precyzyjne linki obsługiwane automatycznie przez NavController są teraz wywoływane tylko raz. (b/132754763)

Wersja 2.1.0-alpha04

16 maja 2019 r.

Zostanie wycofaneandroidx.navigation:*:2.1.0-alpha04 Listę zmian w tej wersji znajdziesz tutaj.

Poprawki błędów

  • NavHostFragment prawidłowo uwzględnia app:defaultNavHost podczas przechwytywania zdarzeń przycisku Wstecz systemu, co naprawia regresję w Navigation 2.1.0-alpha03. b/132077777
  • DialogFragmentNavigator prawidłowo obsługuje teraz operacje popBackStack()navigateUp(). b/132576764
  • Rozwiązaliśmy problem z IllegalStateException: unknown destination during restore, który występował podczas wielokrotnego przechodzenia między zagnieżdżonymi wykresami. b/131733658

Wersja 2.1.0-alpha03

7 maja 2019 r.

Zostanie wycofaneandroidx.navigation:*:2.1.0-alpha03 Listę zmian w tej wersji znajdziesz tutaj.

Znane problemy

  • NavHostFragment nadal przechwytuje systemowy przycisk Wstecz, mimo że używa app:defaultNavHost="false" b/132077777

Nowe funkcje

  • Możesz teraz tworzyć <dialog> miejsca docelowe, w których po navigate pojawi się DialogFragment. NavHostFragment domyślnie obsługuje miejsca docelowe w oknie dialogowym. b/80267254
  • Oprócz wywoływania funkcji navigate z identyfikatorem zasobu lub instancją NavDirections możesz teraz poruszać się za pomocą funkcji Uri, która używa dodanego do miejsca docelowego parametru <deepLink>, aby przejść do właściwego miejsca docelowego. b/110412864

Zmiany w działaniu

  • Domyślne animacje udostępniane przez NavigationUI zostały przyspieszone z 400 ms do 220 ms, aby pasowały do domyślnej prędkości animacji aktywności i fragmentów. b/130055522

Zmiany w interfejsie API

  • Metoda createFragmentNavigator() klasy NavHostFragment została wycofana, a jej funkcje przeniesiono do nowej metody onCreateNavController(), aby wyraźniej wskazać, że jest to prawidłowy punkt wejścia do dodawania niestandardowych nawigatorów podczas tworzenia podklasy NavHostFragment. b/122802849
  • Do klasy NavDestination dodano metodę hasDeepLink(), która umożliwia sprawdzenie, czy dany element Uri może być obsługiwany przez to miejsce docelowe lub, w przypadku elementu NavGraph, przez dowolne miejsce docelowe w grafie nawigacji. b/117437718

Poprawki błędów

  • Argumenty domyślne są teraz prawidłowo przekazywane do instancji OnDestinationChangedListener. b/130630686
  • NavHostFragment przechwytuje teraz zdarzenia systemowe Wstecz za pomocą OnBackPressedDispatcher, co rozwiązuje problem z nawigacją warunkową w metodach cyklu życia fragmentu po powrocie do fragmentu. b/111598096
  • W przypadku Safe Args argument android:defaultValue=”@null” z nieokreślonym app:argType jest teraz prawidłowo interpretowany jako argument string. b/129629192

Wersja 2.1.0-alpha02

3 kwietnia 2019 r.

Zostanie wycofaneandroidx.navigation:*:2.1.0-alpha02 Listę zmian w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Użytkownicy języka Kotlin mogą teraz tworzyć obiekty ViewModel, które są ograniczone do poziomu wykresu nawigacji, za pomocą delegata właściwości by navGraphViewModels() lub interfejsu API getViewModelStore() dodanego do NavController. b/111614463

Zmiany w interfejsie API

  • Możesz teraz dodać app:targetPackage do miejsca docelowego <activity>, aby ograniczyć dopasowywanie nazwy pakietu. Obsługuje app:targetPackage="${applicationId}", aby ograniczyć pakiet do identyfikatora Twojej aplikacji. b/110975456

Poprawki błędów

  • Wartość android:name w przypadku miejsc docelowych <activity> nie jest już analizowana w klasie w momencie inflacji, co zapobiega występowaniu wyjątków ClassNotFoundException podczas korzystania z funkcji dynamicznych. b/124538597

Wersja 2.1.0-alpha01

19 marca 2019 r.

To pierwsza wersja alfa nawigacji 2.1.0.

Zmiany zależności

  • Nawigacja zależy teraz od androidx.core:core:1.0.1androidx.fragment:fragment:1.1.0-alpha05. Ta wersja usuwa też zależność od androidx.legacy:legacy-support-core-utils:1.0.0. b/128632612

Zmiany w interfejsie API

  • Dodano nową Navigation.createNavigateOnClickListener(NavDirections) metodę, która jest alternatywą dla tworzenia odbiornika kliknięć za pomocą identyfikatora zasobu i obiektu Bundle. b/127631752
  • FragmentNavigator.instantiateFragment zostało wycofane. Domyślna implementacja używa teraz FragmentFactory do tworzenia instancji fragmentów.b/119054429

Poprawki błędów

  • Nawigacja nie wysyła już wartości null Bundle, gdy do miejsca docelowego są dołączone argumenty. Rozwiązuje to problem podczas korzystania z android:defaultValue="@null". b/128531879
  • Safe Args zależy teraz od KotlinPoet 1.1.0, co rozwiązuje problem z bardzo długimi nazwami pakietów. b/123654948

Wersja 2.0.0

Wersja 2.0.0

14 marca 2019 r.

Nawigacja 2.0.0 jest udostępniana bez zmian w stosunku do wersji 2.0.0-rc02.

Wersja 2.0.0-rc02

6 marca 2019 r.

Biblioteka Navigation w wersji 2.0.0-rc02 udostępnia nowe artefakty z identyfikatorem grupy androidx.navigation i zmienia zależności na odpowiedniki AndroidX.

Działanie wersji 2.0.0-rc02 jest identyczne z działaniem wersji 1.0.0-rc02 biblioteki Navigation. Aby zaktualizować wersję 1.0.0-rc02, nie musisz wprowadzać żadnych zmian w kodzie. Wystarczy, że zaktualizujesz zależności, aby były zgodne z nowymi zależnościami.

Aby używać wersji 2.X biblioteki Navigation, projekt musi być zmigrowany do AndroidaX. Stabilna wersja Navigation 1.0 będzie ostatnią, która korzysta z zależności Support Library. Wszystkie przyszłe wersje po 1.0 będą oparte na AndroidX i będą rozwijać stabilną wersję 2.0.

Zależności sprzed AndroidaX

W przypadku wersji biblioteki Navigation sprzed Androida X uwzględnij te zależności:

dependencies {
    def nav_version = "1.0.0"

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

W sekcji Safe args dodaj ten classpathpliku najwyższego poziomu build.gradle.

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

Wersja 1.0.0

Wersja 1.0.0

14 marca 2019 r.

Nawigacja 1.0.0 jest udostępniana bez zmian w stosunku do wersji 1.0.0-rc02.

Wersja 1.0.0-rc02

26 lutego 2019 r.

To druga wersja kandydująca do publikacji stabilnej wersji 1.0.0 biblioteki Navigation. Ta wersja zawiera kilka poprawek błędów.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował ignorowanie popBackStack(), jeśli wykres główny nie miał identyfikatora. b/126251695
  • navigateUp() prawidłowo obsługuje teraz powrót do zadania aplikacji po wywołaniu po obsłudze precyzyjnego linku bez FLAG_ACTIVITY_NEW_TASK b/126082008
  • Rozwiązanie problemu polegającego na tym, że element ActivityNavigator.applyPopAnimationsToPendingTransition nie stosował prawidłowej animacji zakończenia wyskakującego okienka.b/126237567
  • Kod w języku Kotlin wygenerowany przez Safe Args prawidłowo zmienia znaczenie słów kluczowych w języku Kotlin, takich jak infun, w nazwie pakietu powiązanej z klasą R. b/126020455

Wersja 1.0.0-rc01

21 lutego 2019 r.

Jest to wersja kandydująca do publikacji stabilnej wersji 1.0.0 biblioteki Navigation. Ta wersja zawiera jedną poprawkę błędu.

Poprawki błędów

  • Rozwiązaliśmy problem podczas korzystania z fragmentów i operacji nawigacji 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ć 0 jako android:defaultValue w przypadku argumentów reference. b/124248602

Zmiany w działaniu

  • Precyzyjne linki są teraz traktowane priorytetowo w stosunku do precyzyjnych linków z argumentami .* lub argumentami pasującymi do wzorca. b/123969518

Poprawki błędów

  • popBackStack()navigateUp prawidłowo zwracają teraz false podczas usuwania ostatniego miejsca docelowego ze stosu wstecznego. Naprawia to regresję wprowadzoną w 1.0.0-beta01. b/123933201
  • Nawigacja prawidłowo ustawia ClassLoader podczas przywracania zapisanego stanu instancji, co pozwala uniknąć problemów podczas używania klas niestandardowych w Navigator zapisanym stanie lub w argumentach wysyłanych do NavDestination. b/123893858
  • Wygenerowane przez Safe Args klasy NavArgs nie powodują już awarii podczas przywracania argumentu Parcelable[] z zapisanego stanu instancji. b/123963545
  • Safe Args teraz prawidłowo usuwa niepotrzebne wygenerowane klasy Kotlin. b/124120883

Wersja 1.0.0-beta01

4 lutego 2019 r.

To pierwsza wersja beta interfejsu Navigation API. W przyszłości interfejs Navigation API powinien pozostać stabilny do czasu wydania kolejnej wersji, chyba że wystąpi poważny problem. Ta wersja zawiera poprawki błędów i zmiany w działaniu.

Zmiany w działaniu

  • Nawigacja zapewnia teraz, że wartości domyślne argumentów są traktowane identycznie w czasie działania i w przypadku Safe Args. W związku z tym tylko argumenty z atrybutem app:argType="reference" mogą mieć wartość domyślną wskazującą inny zasób (np. @color/colorPrimary). Próba użycia domyślnej wartości odniesienia z innym atrybutem app:argType spowoduje wyjątek podczas analizowania kodu XML nawigacji. b/123551990
  • Safe Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 3.3.0 aosp/888413
  • Safe Args zależy teraz od Kotlin 1.3.20 aosp/888414

Poprawki błędów

  • Safe Args można teraz używać w modułach biblioteki i funkcji we wszystkich wersjach wtyczki Androida do obsługi Gradle. b/121304903
  • Naprawiono regresję, która powodowała, że pojedyncza operacja popBackStack() usuwała z góry stosu wstecznego wszystkie kopie miejsca docelowego, a nie tylko pojedyncze miejsce docelowe. b/123552990
  • Rozwiązaliśmy problem, który powodował, że stan FragmentNavigator ulegał desynchronizacji ze stanem NavController, co powodowało IllegalStateException podczas próby przywrócenia stosu wstecznego. b/123803044
  • Rozwiązaliśmy problem polegający na tym, że strzałka wstecz obsługiwana przez NavigationUI nie pojawiała się podczas używania ProGuard z zaciemnianiem. b/123449431
  • Kod wygenerowany przez Safe Args prawidłowo obsługuje teraz używanie elementu app:argType wskazującego statyczną klasę wewnętrzną w formacie .OuterClass$InnerClass. b/123736741
  • Kod Java wygenerowany przez Safe Args prawidłowo obsługuje teraz działania globalne i głęboko zagnieżdżone miejsca docelowe. b/123347762

Wersja 1.0.0-alpha11

23 stycznia 2019 r.

Jest to wersja poprawki 1.0.0-alpha10, która rozwiązuje problem z Safe Args.

Poprawki błędów

  • Rozwiązuje problem, który powodował, że Safe Args nie importował klasy Directions powiązanej z działaniami globalnymi. b/123307342

Wersja 1.0.0-alpha10

23 stycznia 2019 r.

Znane problemy

  • Safe Args nie importuje klasy Directions powiązanej z działaniami globalnymi. b/123307342

Ta wersja zawiera zmiany w interfejsie API powodujące niezgodność. Więcej informacji znajdziesz w sekcji Zmiany powodujące niezgodność poniżej.

Nowe funkcje

  • Użytkownicy języka Kotlin mogą teraz używać delegata właściwości by navArgs(), aby leniwie pobierać odwołanie do wygenerowanej przez Safe Args klasy NavArgsActivity lub Fragment. b/122603367
  • Safe Args umożliwia teraz generowanie kodu w języku Kotlin przez zastosowanie wtyczki androidx.navigation.safeargs.kotlin. Kod w języku Kotlin jest tworzony specjalnie dla modułów tylko w języku Kotlin. Używa argumentów domyślnych i klas niemutowalnych zamiast wzorca konstruktora, który jest nadal dostępny za pomocą poprzedniej wtyczki androidx.navigation.safeargs. b/110263087

Zmiany w zachowaniu

  • Dopasowane precyzyjne linki są teraz bardziej nastawione na precyzyjny link, który ma najwięcej pasujących argumentów. b/118393029
  • Dzwonienie pod numer setGraph() na urządzeniu NavController spowoduje teraz zresetowanie listy wstecznej. b/111450672
  • Nieznane precyzyjne linki nie powodują już błędu IllegalStateException, ale są ignorowane, co rozwiązuje problemy z zagnieżdżonymi lub wieloma elementami NavHostFragment. b/121340440

Zmiany powodujące niezgodność

  • Metoda NavOptions.applyPopAnimationsToPendingTransition() stosowania animacji wyskakujących do aktywności została przeniesiona do ActivityNavigator. b/122413117
  • Safe Args nie duplikuje już identycznych klas w przypadku działań bez argumentów. Typ zwracany w przypadku metod bez argumentów w wygenerowanych klasach NavDirections to teraz NavDirections. b/123233147
  • Wygenerowane przez Safe Args klasy Directions nie mają już publicznego konstruktora – należy korzystać tylko z wygenerowanych metod statycznych. b/123031660
  • Wygenerowane klasy Safe Args NavDirections nie mają już publicznego konstruktora – powinny być generowane tylko za pomocą metod statycznych w wygenerowanych klasach Directions.b/122963206
  • Zwrócony BundleNavDirections getArguments() jest teraz oznaczony jako @NonNull, a nie @Nullable. b/123243957

Poprawki błędów

  • NavDeepLinkBuilder teraz prawidłowo obsługuje wiele jednoczesnych PendingIntent do tego samego miejsca docelowego, używając argumentów przekazywanych przez Ciebie w celu określenia niepowtarzalności. b/120042732
  • NavController prawidłowo obsługuje teraz operacje popBackStack() podczas korzystania z zagnieżdżonego elementu NavHostFragment lub innych fragmentów podrzędnych z listą wsteczną.b/122770335
  • NavigationUI teraz prawidłowo ustawia opis treści przycisku Wstecz. b/120395362
  • Wygenerowane przez Safe Args klasy Directions prawidłowo obsługują teraz działania globalne, które mają ten sam identyfikator co działanie w miejscu docelowym. b/122962504
  • Wygenerowane klasy Safe Args NavDirections mają teraz prawidłowe równe wartości hashCode(), gdy equals() zwraca wartość „true”. b/123043662
  • FragmentNavigator teraz wyświetla lepszy komunikat o błędzie, jeśli spróbujesz wykonać niestandardową operację FragmentTransactions na NavHostFragmentFragmentManager. Zawsze używaj getChildFragmentManager(). b/112927148

Wersja 1.0.0-alpha09

18 grudnia 2018 r.

Ta wersja zawiera zmiany w interfejsie API powodujące niezgodność. Więcej informacji znajdziesz w sekcji Zmiany powodujące niezgodność poniżej.

Zdecydowaliśmy się nie kontynuować rozwoju artefaktu android.arch.navigation:navigation-testing. Usługa ta okazała się przydatna w testach wewnętrznych NavController, ale zdecydowanie zalecamy stosowanie alternatywnych strategii testowania, takich jak symulowanie instancji NavController, aby sprawdzić, czy wykonywane są prawidłowe wywołania navigate(). To podejście zostało szczegółowo omówione w prezentacji na temat pojedynczego działania na konferencji AndroidDevSummit 2018. Będziemy pracować nad dodatkową dokumentacją dotyczącą testowania za pomocą Navigation.

Nowe funkcje

  • MenuItemmenuCategory="secondary" nie będą już wyskakiwać z powrotem, gdy są używane z metodami NavigationUI. b/120104424
  • AppBarConfiguration umożliwia teraz ustawienie instancji rezerwowejOnNavigateUpListener , która będzie wywoływana, gdy navController.navigateUp() zwróci wartość false. b/79993862 b/120690961

Zmiany powodujące niezgodność

  • Gdy używasz <argument>argType="reference", Navigation nie analizuje już odwołania, tylko podaje sam identyfikator zasobu. b/111736515
  • onNavDestinationSelected() domyślnie wraca teraz do miejsca docelowego na początku wykresu nawigacji, co sprawia, że jest zgodny z metodami setup. Dodaj menuCategory="secondary" do MenuItem, aby uniknąć wycofywania z listy wstecznej.aosp/852869
  • Metody fromBundle() wygenerowanych klas Args przyjmują teraz wartość niezerową Bundle zamiast wartości dopuszczającej wartość null Bundle.aosp/845616

Poprawki błędów

  • Argumenty są teraz prawidłowo analizowane z precyzyjnych linków jako prawidłowe argType zamiast zawsze jako ciągi znaków b/110273284
  • Nawigacja prawidłowo eksportuje teraz swoje zasoby publiczne.b/121059552
  • Safe Args jest teraz zgodny z wtyczką Androida do obsługi Gradle w wersji 3.4 Canary 4 i nowszej.b/119662045

Wersja 1.0.0-alpha08

6 grudnia 2018 r.

Ta wersja zawiera zmiany w interfejsie API powodujące niezgodność. Więcej informacji znajdziesz w sekcji Zmiany powodujące niezgodność poniżej.

Nowe funkcje

  • Etykiety miejsc docelowych używane z metodami NavigationUI będą teraz automatycznie zastępować wystąpienia {argName}android:label prawidłowym argumentem. b/80267266
  • Nawigacja zależy teraz od biblioteki pomocy w wersji 28.0.0 b/120293333

Zmiany powodujące niezgodność

  • Nazwa OnNavigatedListener została zmieniona na OnDestinationChangedListener b/118670572
  • Funkcja OnDestinationChangedListener przekazuje teraz też Bundle argumentów aosp/837142
  • Atrybuty app:clearTaskapp:launchDocument oraz powiązane z nimi metody zostały usunięte. Użyj app:popUpTo z głównym węzłem wykresu, aby usunąć wszystkie miejsca docelowe ze stosu wstecznego. b/119628354
  • ActivityNavigator.Extras używa teraz wzorca Builder i umożliwia ustawianie dowolnych flag Intent.FLAG_ACTIVITY_.aosp/828140
  • Nazwa NavController.onHandleDeepLink została zmieniona na handleDeepLink aosp/836063
  • Wiele klas i metod, które nie są przeznaczone do tworzenia podklas, np. NavOptions, NavInflater, NavDeepLinkBuilderAppBarConfiguration, zostało zmienionych na final.aosp/835681
  • Usunięto nieużywaną metodę NavHostFragment.setGraph(). aosp/835684
  • Nieużywana metoda NavigationUI.navigateUp(DrawerLayout, NavController) została usunięta. aosp/835684
  • Tworzenie fragmentów zostało przeniesione do FragmentNavigator, co ułatwia delegowanie tworzenia fragmentów do FragmentFactory. b/119054429
  • Konstruktor NavGraphNavigator nie przyjmuje już argumentu Context aosp/835340
  • NavigatorProvider jest teraz klasą, a nie interfejsem. Funkcja NavigatorProvider zwracana przez getNavigatorProvider() nie zmieniła swojego działania. aosp/830660
  • NavDestination.navigate() został(a) usunięty(a). Zadzwoń pod numer navigate() na urządzeniu Navigator zamiast tego. aosp/830663
  • Znaczne przekształcenie funkcji Navigator, które eliminuje potrzebę używania funkcji OnNavigatorNavigatedListener. Zamiast tego funkcja navigate zwraca NavDestination, do którego nastąpiło przejście.
  • Instancje Navigator nie mogą już wysyłać wydarzeń typu pop-up do NavController. Rozważ użycie OnBackPressedCallback, aby przechwytywać naciśnięcia przycisku Wstecz i wywoływać navController.popBackStack(). aosp/833716

Poprawki błędów

  • popUpTo działa teraz spójnie, gdy miejscem docelowym jest 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ągi znaków, wywołując toString() b/120161365

Safe Args

  • Safe Args obsługuje obiekty Serializable, w tym wartości Enum. Typy wyliczeniowe mogą ustawiać wartość domyślną za pomocą literału wyliczeniowego bez nazwy klasy (np. app:defaultValue="READ") b/111316353
  • Safe Args obsługuje tablice wszystkich obsługiwanych typów b/111487504
  • Safe Args ignoruje teraz podfoldery katalogów zasobów b/117893516
  • Safe Args dodaje @Override adnotacje w odpowiednich miejscach b/117145301

Wersja 1.0.0-alpha07

29 października 2018 r.

Nowe funkcje

  • Nowa klasa AppBarConfiguration umożliwia dostosowywanie miejsc docelowych, które są uznawane za najwyższego poziomu. Szczegółowe informacje znajdziesz w zaktualizowanej dokumentacji. b/117333663
  • Teraz możesz przekazywać argumenty do miejsca docelowego na początku wykresu.b/110300470
  • Precyzyjne linki obsługują teraz schematy niestandardowe z kropkami, myślnikami i znakami plus. b/112806402

Zmiany powodujące niezgodność

  • Moduł navigation-testing-ktx został włączony do modułu navigation-testing artifact i nie będzie już publikowany.
  • Artefakt navigation-testing ma teraz zależność od standardowej biblioteki Kotlin. Interfejs API został zmieniony, aby był bardziej zgodny z konwencjami języka Kotlin, ale nadal możesz go używać w przypadku testów napisanych w języku Java.
  • Wykresy nawigacji zarejestrowane w manifeście metadanych nie są już obsługiwane. b/118355937
  • Działań nie można już dołączać do miejsc docelowych <activity>. aosp/785539

Poprawki błędów

  • Precyzyjne linki prawidłowo analizują teraz parametry zapytania. b/110057514
  • Miejsca docelowe aktywności prawidłowo stosują teraz wszystkie animacje wejść i wyjść. b/117145284
  • Naprawiliśmy awarię, która występuje po zmianach konfiguracji podczas korzystania z niestandardowych nawigatorów. b/110763345

Safe Args

  • Argumenty bezpieczne mają teraz stałą zależność od wtyczki Androida do obsługi Gradle w wersji 3.2.1. b/113167627
  • Można teraz generować wskazówki dojazdu dla klas wewnętrznych. b/117407555
  • Rozwiązanie problemu z generowaniem wskazówek dojazdu do wykresu <include>. b/116542123

Wersja 1.0.0-alpha06

20 września 2018 r.

Nowe funkcje

Zmiany w interfejsie API

  • Zmiana powodująca niezgodność: metoda Navigator navigate() przyjmuje teraz parametr Navigator.Extras.
  • Metoda getGraph() w klasie NavController to teraz NonNull b/112243286

Poprawki błędów

  • NavigationUI.setupWithNavController() nie powoduje już wycieku wyświetleń, jeśli jest używany z wyświetleniami z poszczególnych miejsc docelowych b/111961977
  • Funkcja Navigator onSaveState() jest teraz wywoływana tylko raz b/112627079

Safe Args

  • Klasy kierunków miejsca docelowego nawigacji rozszerzają teraz klasę kierunków elementu nadrzędnego, jeśli taka klasa istnieje b/79871405
  • Klasy Directions i Args mają teraz przydatną implementację toString() b/111843389

Wersja 1.0.0-alpha05

10 sierpnia 2018 r.

Poprawki błędów

  • Naprawiliśmy błąd, który powodował nieprawidłowe działanie listy wstecznej. b/111907708
  • Naprawiono błąd w elemencie equals() w klasach Generated Args. b/111450897
  • Naprawianie błędu kompilacji w Safe Args. b/109409713
  • Poprawianie konwersji identyfikatorów zasobów na nazwy w języku Java b/111602491
  • Rozwiązywanie problemów z komunikatami o błędach dotyczącymi możliwości przyjmowania wartości null w pluginie Safe Args.
  • Dodaj brakujące adnotacje dotyczące możliwości przyjmowania wartości null.

Wersja 1.0.0-alpha04

19 lipca 2018 r.

Nawigacja 1.0.0-alpha04 i powiązana z nią wtyczka Gradle Safe Args zawierają szereg zmian w interfejsie API, zmian w działaniu i poprawek błędów.

Zmiany w interfejsie API i zachowaniu

  • NavHostFragment zawsze ustawia bieżący fragment jako główny fragment nawigacji, dzięki czemu menedżerowie fragmentów podrzędnych są usuwani przed usunięciem zewnętrznego NavControllera. b/111345778

Safe Args

  • Zmiana powodująca niezgodność: nazwa app:type została zmieniona na app:argType, aby uniknąć konfliktów z innymi bibliotekami, takimi jak ConstraintLayout 2.0.0-alpha1 b/111110548
  • Komunikaty o błędach z Safe Args są teraz klikalne b/111534438
  • Klasy Args potwierdzają teraz, że atrybuty NonNull nie są w rzeczywistości wartością null b/111451769
  • Dodano dodatkowe adnotacje NonNull do klas NavDirections i Args b/111455455 b/111455456

Poprawki błędów

  • Rozwiązaliśmy problem z systemowym przyciskiem Wstecz po precyzyjnym linkowaniu do miejsca docelowego fragmentu b/111515685

Wersja 1.0.0-alpha03

12 lipca 2018 r.

Nawigacja 1.0.0-alpha03 i powiązana z nią wtyczka Gradle Safe Args zawierają szereg zmian w interfejsie API, zmian w działaniu i poprawek błędów.

Zmiany w interfejsie API i zachowaniu

  • Dodano metodę NavigationUI.setupWithNavController dla paska narzędzi b/109868820
  • Dodano metodę NavigationUI.setupWithNavController dla CollapsingToolbarLayout b/110887183
  • Metoda popBackStack() zwraca teraz wartość „fałsz”, gdy stos wsteczny jest pusty lub gdy podany identyfikator miejsca docelowego nie znajduje się w stosie wstecznym b/110893637
  • FragmentNavigator ignoruje teraz operacje nawigacji po zapisaniu stanu przez FragmentManager, co pozwala uniknąć wyjątków „Can not perform this action after onSaveInstanceState” b/110987825

Safe Args

  • Zmiana powodująca niezgodność: znaki alfanumeryczne w nazwach działań i argumentów zostaną zastąpione w nazwach odpowiednich metod NavDirections przez zapis camel case.
    • Na przykład DemoController.index zmieni się w setDemoControllerIndex b/79995048
    • Na przykład action_show_settings zmieni się w actionShowSettings b/79642240
  • Zmiana powodująca niezgodność: argumenty są teraz domyślnie uznawane za niepuste. Aby zezwolić na wartości null w argumentach typu string i parcelable, dodaj app:nullable="true" b/79642307
  • Możesz teraz używać app:type="long" z wartościami domyślnymi w formacie „123L” b/79563966
  • Argumenty Parcelable są teraz obsługiwane przy użyciu pełnej i jednoznacznej nazwy klasy dla app:type. Jedyną obsługiwaną wartością domyślną jest "@null" b/79563966
  • Klasy argumentów implementują teraz interfejsy equals()hashCode(). b/79642246
  • Wtyczkę Safe Args można teraz stosować w projektach bibliotek b/80036553
  • Wtyczkę Safe Args można teraz stosować w projektach funkcji b/110011752

Poprawki błędów

  • Rozwiązano problemy z nawigacją podczas metod cyklu życia fragmentu b/109916080
  • Rozwiązaliśmy problemy podczas wielokrotnego przechodzenia przez zagnieżdżone wykresy b/110178671
  • Rozwiązaliśmy problemy podczas korzystania z setPopUpTo z pierwszym miejscem docelowym na wykresie b/109909461
  • Rozwiązaliśmy problem polegający na tym, że wszystkie wartości app:defaultValue były przekazywane jako ciągi tekstowe b/110710788
  • Narzędzie aapt2 dołączone do wtyczki Androida do obsługi Gradle w wersji 3.2 Beta 01 dodaje teraz reguły zachowywania dla każdego atrybutu android:name w plikach XML nawigacji b/79874119
  • Usunęliśmy wyciek pamięci podczas zastępowania domyślnego elementu FragmentNavigator b/110900142

Wersja 1.0.0-alpha02

7 czerwca 2018 r.

Zmiany w zachowaniu

  • FragmentNavigator korzysta teraz z setReorderingAllowed(true). b/109826220

  • Nawigacja dekoduje teraz argumenty z adresów URL precyzyjnych linków. b/79982454

Poprawki błędów

  • Naprawiono IllegalStateException podczas wywoływania nawigacji z metod cyklu życia fragmentu. b/79632233

  • Nawigacja zależy teraz od biblioteki pomocy w wersji 27.1.1, co eliminuje migotanie podczas korzystania z animacji. b/80160903

  • Naprawiono IllegalArgumentException podczas używania domyślnego hosta nawigacji („defaultNavHost="true"”) jako fragmentu podrzędnego. b/79656847

  • Naprawiono StackOverflowError podczas korzystania z klasy NavDeepLinkBuilder. b/109653065

  • Naprawiliśmy IllegalArgumentException podczas powrotu do zagnieżdżonego wykresu. b/80453447

  • Rozwiązaliśmy problem z nakładającymi się fragmentami podczas używania launchSingleTop. b/79407969

  • Nawigacja tworzy teraz prawidłowy syntetyczny stos wsteczny dla zagnieżdżonych wykresów. b/79734195

  • Biblioteka NavigationUI będzie teraz wyróżniać prawidłowy element, gdy jako MenuItem używany jest zagnieżdżony wykres. b/109675998

Zmiany w interfejsie API

  • Atrybut clearTask dla działań i powiązany z nim interfejs API w NavOptions zostały wycofane. b/80338878

  • Atrybut launchDocument dla działań i powiązane z nim interfejsy API w NavOptions zostały wycofane. b/109806636

Wersja 1.0.0-alpha01

8 maja 2018 r.

Nawigacja to platforma do tworzenia nawigacji w aplikacji. Ta pierwsza wersja to 1.0.0-alpha01.