Nawigacja

Nawigacja to framework umożliwiający poruszanie się między „miejscami docelowymi” w aplikacji na Androida, który zapewnia spójny interfejs API niezależnie od tego, czy miejsca docelowe są implementowane jako fragmenty, działania czy inne komponenty.
Ostatnia aktualizacja Wersja stabilna Wersja kandydująca Wersja Beta Wersja alfa
13 listopada 2024 r. 2.8.4 - - 2.9.0-alpha03

Deklarowanie zależności

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

Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle aplikacji lub modułu:

Groovy

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

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

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

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

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

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

Kotlin

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

dependencies {
  val nav_version = "2.8.4"

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

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

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

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

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

Safe Args

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

Groovy

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

Kotlin

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

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

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

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

Groovy

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

Kotlin

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

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

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

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

Opinia

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

Tworzenie nowego zgłoszenia

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

Wersja 2.9

Wersja 2.9.0-alpha03

13 listopada 2024 r.

androidx.navigation:navigation-*:2.9.0-alpha03 został zwolniony. Wersja 2.9.0-alpha03 zawiera te komity.

Nowe funkcje

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

Poprawki błędów

  • Naprawiono błąd ConcurrentModificationException, który mógł występować, gdy element LifecycleObserver dołączony do elementu NavBackStackEntry powodował zmianę w stosie, gdy element gospodarz LifecycleOwner, np. element Activity lub Fragment zawierający, zmieniał stan cyklu życia. (Ia9494)

Wersja 2.9.0-alpha02

30 października 2024 r.

androidx.navigation:navigation-*:2.9.0-alpha02 został zwolniony. Wersja 2.9.0-alpha02 zawiera te komity.

Darowizna zewnętrzna

  • Nowa wspólna metoda NavController.handleDeepLink(request: NavDeepLinkRequest). Dziękuję, Konstantin Tskhovrebov. (I3e228)

Wersja 2.9.0-alpha01

16 października 2024 r.

androidx.navigation:navigation-*:2.9.0-alpha01 został zwolniony. Wersja 2.9.0-alpha01 zawiera te komity.

Nowe funkcje

  • Niestandardowe nawigacje mogą teraz oznaczać swoje miejsca docelowe jako miejsca korzystające z interfejsu SupportingPane, co wskazuje NavController, że te miejsca docelowe będą wyświetlane obok innych miejsc docelowych. Dzięki temu interfejsowi możesz na przykład RESUMED jednocześnie. (Id5559)
  • W sekcji Nawigacja 2.8.3: dodaliśmy nowe kontrole lint dla modułów navigation-common, navigation-runtimenavigation-compose, aby ułatwić identyfikację ścieżek bezpiecznych pod względem typu, które nie są prawidłowo opatrzone adnotacjami za pomocą @Serializable. Ta weryfikacja jest stosowana do wszystkich funkcji rozszerzenia NavGraphBuilderNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • W sekcji Nawigacja2.8.3: dodaliśmy nowe mechanizmy sprawdzania błędów w modułach navigation-common, navigation-runtimenavigation-compose, aby ułatwić identyfikowanie ścieżek bezpiecznych pod względem typu z argumentami typu Enum, które nie są prawidłowo opatrzone adnotacjami @Keep. Ta weryfikacja jest stosowana do wszystkich funkcji rozszerzenia NavGraphBuilderNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

Zmiany w zachowaniu

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

Poprawki błędów

  • Zaktualizuj wyjątek „Nie znaleziono klasy Enum”, aby sugerować użycie adnotacji @Keep na wypadek, gdyby klasa Enum została usunięta w skompresowanych kompilacjach. (I90e79, b/358137294)

Znane problemy

  • Wystąpił problem z nowymi regułami lint dodanymi w Navigation 2.8.*, które powodują błąd Obsolete custom lint check podczas próby uruchomienia lint za pomocą wtyczki Android Gradle w wersji 8.4 lub nowszej (b/368070326, b/371463741).

Wersja 2.8

Wersja 2.8.4

13 listopada 2024 r.

androidx.navigation:navigation-*:2.8.4 został zwolniony. Wersja 2.8.4 zawiera te komitowane zmiany.

Nowe funkcje

Poprawki błędów

Wersja 2.8.3

16 października 2024 r.

androidx.navigation:navigation-*:2.8.3 został zwolniony. Wersja 2.8.3 zawiera te komitowane zmiany.

Nowe funkcje

  • Dodano nowe kontrole lint dla modułów navigation-common, navigation-runtimenavigation-compose, aby ułatwić identyfikację ścieżek bezpiecznych pod względem typu, które nie są prawidłowo opatrzone adnotacjami @Serializable. Ta weryfikacja jest stosowana do wszystkich funkcji rozszerzenia NavGraphBuilderNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816)
  • Dodano nowe mechanizmy kontroli lint dla modułów navigation-common, navigation-runtimenavigation-compose, aby ułatwić identyfikację ścieżek bezpiecznych pod względem typu z argumentami Enum, które nie są prawidłowo opatrzone adnotacjami @Keep. Ta weryfikacja jest stosowana do wszystkich funkcji rozszerzenia NavGraphBuilderNavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142)

Poprawki błędów

  • Rozwiązano problem, który powodował, że nowe reguły lint dodane w Navigation 2.8.* wywoływały błąd Obsolete custom lint check podczas próby uruchomienia lint za pomocą wtyczki Android Gradle w wersji 8.4 lub nowszej (I1be3d, b/368070326, b/371463741).

Znane problemy

  • Podczas próby uruchomienia narzędzia Lint w wersji 16 (AGP 8.7) lub nowszej narzędzie do sprawdzania kodu w ramach funkcji Navigation lint zgłasza błąd „Obsolete custom lint check”. (b/371926651)

Wersja 2.8.2

2 października 2024 r.

androidx.navigation:navigation-*:2.8.2 został zwolniony. Wersja 2.8.2 zawiera te komitowane zmiany.

Nowe funkcje

  • Bezpieczeństwo typu nawigacji obsługuje teraz klasy serializacji, które obejmują Double, Double?, DoubleArray, DoubleArray?, List<Double>List<Double>? bez konieczności stosowania niestandardowych 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 zmapować argumentu trasy na NavType. Nowy komunikat o błędzie będzie zawierać nazwę argumentu, pełną nazwę argumentu i pełną nazwę trasy. (Id8416, b/346264232)

Wersja 2.8.1

18 września 2024 r.

androidx.navigation:navigation-*:2.8.1 został zwolniony. Wersja 2.8.1 zawiera te komity.

Nowe funkcje

  • Dodano nową regułę lint, aby zapewnić użycie funkcji popBackStack, która przyjmuje typ klasy z klasyfikowaniem, podczas próby użycia funkcji popBackStack za pomocą interfejsów API bezpiecznych pod względem typów. (Ief161, b/358095343)

Poprawki błędów

  • Nawigacja wymaga teraz, aby trasa przekazana do parametru NavGraph w funkcji startDestination zawierała wartości wszystkich wymaganych argumentów, w tym argumentów, które nie mogą być puste i nie mają wartości domyślnej. (I18e74, b/362594265)
  • Argumenty bezpieczne nawigacji obsługują teraz niepustą postać ciągu znaków, dzięki czemu wartości „null” będą analizowane i przechowywane w pakiecie w postaci domyślnej. Jest to zmiana w porównaniu z obecnym działaniem, w którym wartości „null” były analizowane w postaci obiektu null. Ta zmiana dotyczy tylko typów String, które nie mogą być puste. Ciągi znaków z możliwością przyjęcia wartości null pozostają bez zmian. (I08b4a, b/348936238)
  • Do NavDestination nie można już dodawać precyzyjnych linków, z wyjątkiem precyzyjnych linków dodanych do miejsca docelowego. Oznacza to też, że możesz nawigować do miejsca docelowego tylko za pomocą przeciążenia funkcji navigate, która przyjmuje ciąg znaków jako trasę. Poprawia to lukę, która umożliwiała tworzenie precyzyjnych linków do potencjalnie chronionych miejsc docelowych. (Ie30e6)

Aktualizacja zależności

  • Argumenty bezpiecznej nawigacji są teraz zależne od wersji Kotlin 1.9.24, a nie Kotlin 2.X, co pozwala deweloperom nie aktualizować aplikacji. (a4129a)
  • Element Nawigacja Compose zależy teraz od elementu Compose 1.7.2.

Wersja 2.8.0

4 września 2024 r.

androidx.navigation:navigation-*:2.8.0 został zwolniony. Wersja 2.8.0 zawiera te komity.

Ważne zmiany od wersji 2.7.0

Nawigacja w Kotlinie – typy danych w DSL

  • Nawigacja zapewnia teraz bezpieczne typowanie w przypadku Kotlin DSL (używanego przez Navigation Compose) za pomocą Kotlin Serialization, aby umożliwić definiowanie miejsc docelowych w grafach nawigacji za pomocą obiektów i klas danych bezpiecznych pod względem typu:
    // Define a home destination that doesn't take any arguments
    @Serializable
    object Home

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

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

Więcej informacji znajdziesz w poście na blogu na temat funkcji tworzenia kodu i nawigacji w TypeScript.

Nawigacja Utwórz Wstecz z predykcją

  • Komponent Navigation Compose obsługuje teraz funkcję przewidywania powrotu do aplikacji za pomocą nowych interfejsów API SeekableTransitionState z komponentu compose-animation. Dzięki temu możesz użyć gestu wstecz, aby wyświetlić poprzedni cel z niestandardowym przejściem, zanim zdecydujesz się na przeprowadzenie transakcji za pomocą gestu ukończenia lub anulowania.

Komponent nawigacji Fragment

  • Dodaliśmy nowy artefakt navigation-fragment-compose, który zawiera alternatywę ComposableNavHostFragment dla NavHostFragment, która umożliwia dodawanie miejsc docelowych do plików XML nawigacji. Każde miejsce docelowe composable 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. Gdy przejdziesz do jednego z tych miejsc docelowych, zostanie utworzony fragment zawierający treści kompozytowe.
  // In HomeScreen.kt
  @Composable
  fun HomeScreen() {
    // Your Composable content here
  }

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

Inne zmiany

  • Składnik Nawigacja zależy teraz od składnika Compose w wersji 1.7.0.
  • Nawigacja udostępnia teraz nową klasę CollectionNavType<T>, która jest podklasą NavType<T> i służy do argumentów opartych na kolekcji, takich jak listy, tablice i mapy. Wszystkie domyślne tablice NavType (IntArrayType, LongArrayType, FloatArrayType, BoolArrayTypeStringArrayType) dziedziczą teraz z tej nowej klasy.
  • NavType obsługuje teraz wbudowane listy typu Int, String, Boolean, Float i Long.

Wersja 2.8.0-rc01

21 sierpnia 2024 r.

androidx.navigation:navigation-*:2.8.0-rc01 został zwolniony. Wersja 2.8.0-rc01 zawiera te komisy.

Poprawki błędów

  • Naprawiono błąd nawigacji podczas przekazywania klas Enum najwyższego poziomu jako argumentów bezpiecznych pod względem typu. (I0ba76, b/358137294)
  • Biblioteka Navigation w wersji 2.8 działa teraz prawidłowo z pakietem SDK 34 i nie przejdzie na wersję 35, dopóki nie zostanie wydana wersja 2.9 wraz z resztą bibliotek AndroidX. (b/358798728)

Wersja 2.8.0-beta07

7 sierpnia 2024 r.

androidx.navigation:navigation-*:2.8.0-beta07 został zwolniony. Wersja 2.8.0-beta07 zawiera te komity.

Znane problemy

  • Z powodu problemu b/358137294 domyślnie obsługiwane są tylko zanurzone w innej klasie typy enumeracji. W następnej wersji obsługiwane będą enumeracje najwyższego poziomu.

Poprawki błędów

  • Podczas nawigacji do duplikatów lub udostępnionych miejsc docelowych nawigacja będzie priorytetowo traktować najbliższe pasujące miejsce docelowe od bieżącej lokalizacji na wykresie. (Ic89a4, b/352006850)
  • Nawigacja w safe_args ma teraz nową wartość NavType.EnumType. Oznacza to, że typy Enum nie wymagają już niestandardowych NavType. Pamiętaj, że Enum SerialName musi być pełną i jednoznaczną nazwą domyślną. (I66d22, b/346475493)
  • Nawigacja w safe_args obsługuje teraz wbudowane typy argumentów, które mogą być puste, m.in. Int?, Long?, Float?, Boolean?Enum<*>?. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237)
  • Funkcja NavGraph w elementach startDestination będzie teraz używać domyślnych wartości argumentów, jeśli ścieżka startDestination przekazana do funkcji NavGraph jest dokładnie równa ścieżce startDestination.route. (I13762, b/354046047)

Wersja 2.8.0-beta06

24 lipca 2024 r.

androidx.navigation:navigation-*:2.8.0-beta06 został zwolniony. Wersja 2.8.0-beta06 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który polegał na tym, że mechanizmy kontroli lint WrongStartDestinationType nie sprawdzały obiektów Companion w przekazanych typach klas, co powodowało, że mechanizmy te nie wykrywały błędów. (I92b09)

Wersja 2.8.0-beta05

10 lipca 2024 r.

androidx.navigation:navigation-*:2.8.0-beta05 został zwolniony. Wersja 2.8.0-beta05 zawiera te komity.

Poprawki błędów

  • Rozwiązanie problemu z awarią nawigacji singleTop, gdy zagnieżdżone NavGraphs mają ten sam startDestination. (I17b94, b/294408596)

Wersja 2.8.0-beta04

26 czerwca 2024 r.

androidx.navigation:navigation-*:2.8.0-beta04 został zwolniony. Wersja 2.8.0-beta04 zawiera te komity.

Poprawki błędów

  • Nawigacja obsługuje teraz puste ciągi znaków w argumentach ścieżki. (Ic5dbd, b/339481310)
  • Poprawić komunikat o błędzie w przypadku niestandardowych serializatorów zadeklarowanych bezpośrednio w polach klasy za pomocą @Serializable(with =...), aby wyjaśnić, że ta funkcja nie jest obecnie obsługiwana. (I052b0, b/341319151)
  • Interfejs testowy SavedStateHandleFactory można teraz używać w testach innych niż testy Androida, ale wymaga to obsługi przez Robolectric parsowania argumentów za pomocą pakietów. (I76cdc, b/340966212)
  • Rozwiązaliśmy problem z zawieszaniem się aplikacji podczas przywracania stanu po wznowieniu aplikacji po zakończeniu działania procesu przy użyciu nawigacji zabezpieczającej przed błędami typu w Compose. (Ia8f38, b/341801005)
  • Rozwiązaliśmy problem w komponowaniu nawigacji, który powodował, że po anulowaniu przewidywanego gestu wstecz NavBackStackEntry, do którego wraca użytkownik, nigdy nie wraca do stanu cyklu życia RESUMED. Dzięki temu animacja powrotu do miejsca docelowego będzie prawidłowo odtwarzana zamiast wskakiwać na miejsce po rzucie. (I97a0c, b/346608857)
  • Gdy używasz przewidywanego przycisku Wstecz w ramach funkcji Compose w nawigacji, wyświetlane będzie teraz właściwe porządkowanie w głąb, co zapewni prawidłową animację nadchodzącego miejsca docelowego. (I2077b, b/345993681)

Wersja 2.8.0-beta03

12 czerwca 2024 r.

androidx.navigation:navigation-*:2.8.0-beta03 został zwolniony. Wersja 2.8.0-beta03 zawiera te komity.

Zmiany w interfejsie API

  • CollectionNavType ma nową abstrakcyjną metodę emptyCollection(). Zastąp to, aby obsłużyć pustą kolekcję przekazaną jako argument. (Ie4d84, b/341723133)

Poprawki błędów

  • Dodaliśmy dokumentację dotyczącą funkcji NavType.serializeAsValue i serializeAsValues, aby podkreślić, że końcowe dane wyjściowe powinny być zakodowane za pomocą Uri. (Ida6bd, b/344943214)
  • Naprawiono błąd powodujący awarię podczas wywoływania funkcji toRoute<T> z pustym argumentem CollectionNavType. Gdy przechodzisz do elementu 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.

androidx.navigation:navigation-*:2.8.0-beta02 został zwolniony. Wersja 2.8.0-beta02 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem z zawieszaniem się funkcji ClassCastException podczas używania argumentu NavBackStackEntry.toRoute z nieobowiązkową wartością niestandardową NavType. (I1c29b, b/342239473)
  • Rozwiązano problemy z przywracaniem stanu nawigacji w grupie elementów poprzednich, które wystąpiły podczas próby przywrócenia elementu z grupy elementów poprzednich, do którego nie można dotrzeć za pomocą identyfikatora z bieżącego miejsca docelowego. Trasy są obsługiwane przez identyfikatory, więc na te miejsca docelowe, które zostały utworzone za pomocą tras, również to miało wpływ. Ta aktualizacja rozwiązuje też problem z zawieszaniem się aplikacji spowodowany wywołaniem funkcji clearBackStack(), która miała ten sam podstawowy problem. (I423c3, b/339908057)

Wersja 2.8.0-beta01

14 maja 2024 r.

androidx.navigation:navigation-*:2.8.0-beta01 został zwolniony. Wersja 2.8.0-beta01 zawiera te komity.

Zmiany w interfejsie API

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

Poprawki błędów

  • Dodano brakujące dokumenty dotyczące parametrów funkcji DSL w języku Kotlin w przypadku nawigacji. (I26a36)

Wersja 2.8.0-alpha08

1 maja 2024 r.

androidx.navigation:navigation-*:2.8.0-alpha08 został zwolniony. Wersja 2.8.0-alpha08 zawiera te komity.

Safe Args w komponencie Nawigacja i tworzenie wiadomości

Ta funkcja korzysta z serializacji Kotlina, aby umożliwić definiowanie miejsc docelowych w grafu nawigacji za pomocą obiektów bezpiecznych pod względem typu i klas danych:

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

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

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

Więcej informacji znajdziesz w poście na blogu na temat funkcji tworzenia kodu i nawigacji w TypeScript.

Nowe funkcje

  • Element navigation-fragment-compose zawiera teraz kompozycję LocalFragment lokalną dla metod kompozytowych w ramach ComposableFragment. (If35e5)
  • NavType obsługuje teraz wbudowane listy typu Int, String, Boolean, Float i Long. (I4b6dd, Ia914c, b/188693139)

Wersja 2.8.0-alpha07

17 kwietnia 2024 r.

androidx.navigation:navigation-*:2.8.0-alpha07 został zwolniony. Wersja 2.8.0-alpha07 zawiera te komity.

Nowe funkcje

  • Dodaje nowy element navigation-fragment-compose, który zawiera alternatywę ComposableNavHostFragment dla NavHostFragment, która umożliwia dodawanie miejsc docelowych composable do plików XML nawigacji. Każde miejsce docelowe composable 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. Gdy przejdziesz do jednego z tych miejsc docelowych, zostanie utworzony fragment zawierający treści kompozytowe. (I0ef2e, b/265480755)

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

Zmiany w interfejsie API

Wersja 2.8.0-alpha06

3 kwietnia 2024 r.

androidx.navigation:navigation-*:2.8.0-alpha06 został zwolniony. Wersja 2.8.0-alpha06 zawiera te komity.

Zmiany w interfejsie API

Poprawki błędów

  • NavHost używa teraz domyślnego argumentu contentAlignment Alignment.TopStart. Dzięki temu wartość ta jest zgodna z wartością domyślną dla AnimatedContent i rozwiązuje niektóre przypadki nieoczekiwanej skali po przejściu z poziomu środkowego. (I09e72, b/330111602)
  • Gdy podczas korzystania z funkcji tworzenia kodu w ramach nawigacji wykonasz gest przewidującego cofnięcia, NavHost prawidłowo dokończy niestandardowy przewrót zamiast natychmiastowego zakończenia. (I99017, b/327292110)

Wersja 2.8.0-alpha05

20 marca 2024 r.

androidx.navigation:navigation-*:2.8.0-alpha05 został zwolniony. Wersja 2.8.0-alpha05 zawiera te komity.

Nowe funkcje

  • Teraz możesz przekazywać argumenty do funkcji NavGraph w metodzie startDestination bezpośrednio w metodzie startDestination, nie korzystając z metody defaultValue. Dotyczy to również zagnieżdżonych elementów NavGraph startDestinations. (I0e0b5, b/109505019, b/188693139)

Zmiany w interfejsie API

  • Dodano nową abstrakcyjną klasę CollectionNavType<T>, która jest podklasą klasy NavType<T> i służy do argumentów opartych na zbiorze, takich jak listy, tablice i mapy. (Ic6d63, b/188693139)
  • Wszystkie domyślne tablice NavType (IntArrayType, LongArrayType, FloatArrayType, BoolArrayTypeStringArrayType) mają teraz typ 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 zapytań w precyzyjnych linkach mogą teraz zawierać wartości w postaci nawiasów klamrowych wokół nazwy argumentu (np. {argName}) jako prawidłowe wartości dla parametru NavTypes opartego na ciągu znaków. Rozwiązaliśmy problem, w którym taka wartość była uznawana za nieprawidłową (lub za brak wartości) we wszystkich typach. (I18302, b/327274038)
  • Funkcje NavController, które obsługują trasy, takie 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

androidx.navigation:navigation-*:2.8.0-alpha04 został zwolniony. Wersja 2.8.0-alpha04 zawiera te komity.

Nowe funkcje

  • W komponencie Plik nawigacji możesz teraz określać wartości SizeTranform dla przejść, definiując je w ramach inicjalizacji funkcji composable lub navigation. (I91062, b/296912651)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że przy użyciu przycisku Wstecz systemu bez gestów NavHost w komponencie Nawigacja w komponencie Utwórz nie wyświetlał prawidłowo przejścia. (Iceeae, b/325998468)

Wersja 2.8.0-alpha03

21 lutego 2024 r.

androidx.navigation:navigation-*:2.8.0-alpha03 został zwolniony. Wersja 2.8.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

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

Poprawki błędów

  • Rozwiązaliśmy problem w Nawigacji, który powodował, że NavGraph ViewModels był 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.

androidx.navigation:navigation-*:2.8.0-alpha02 został zwolniony. Wersja 2.8.0-alpha02 zawiera te commity.

Nowe funkcje

  • Komponent Navigation Compose obsługuje teraz funkcję przewidywania powrotu do aplikacji za pomocą nowych interfejsów API SeekableTransitionState z komponentu compose-animation. Dzięki temu możesz użyć gestu wstecz, aby wyświetlić poprzedni cel z niestandardowym przejściem, zanim zdecydujesz się na przeprowadzenie transakcji za pomocą gestu ukończenia lub anulowania. (I8b8e9)

Wersja 2.8.0-alpha01

24 stycznia 2024 r.

androidx.navigation:navigation-*:2.8.0-alpha01 został zwolniony. Wersja 2.8.0-alpha01 zawiera te commity.

Poprawki błędów

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

Aktualizacja zależności

  • Funkcja Nawigacja w Compose zależy teraz od funkcji Compose 1.7.0-alpha01, która rozwiązuje problem powodujący nieoczekiwane animacje skalowania. (b/297258205)

Darowizna zewnętrzna

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

Wersja 2.7.7

Wersja 2.7.7

7 lutego 2024 r.

androidx.navigation:navigation-*:2.7.7 został zwolniony. Wersja 2.7.7 zawiera te zatwierdzenia.

Poprawki błędów

  • Zmiana z Nawigacja 2.8.0-alpha01: rozwiązano problem z wyciekiem BackStackState, który powodował, że wywołania saveState() do jednej NavBackStackEntry powodowały zapisanie wielu stanów, ale można było przywrócić tylko pierwszy zapisany stan. (I598b0, b/309559751)
  • Zmiana z Nawigacja 2.8.0-alpha01: rozwiązaliśmy problem polegający na tym, że argumenty inne niż ciąg znaków nie były prawidłowo wyświetlane podczas wypełniania tytułu paska aplikacji za pomocą pomocników NavigationUI. (#636, b/316676794)

Darowizna zewnętrzna

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

Wersja 2.7.6

Wersja 2.7.6

13 grudnia 2023 r.

androidx.navigation:navigation-*:2.7.6 został zwolniony. Wersja 2.7.6 zawiera te commity.

Poprawki błędów

  • Funkcja NavGraph equals() uwzględnia teraz prawidłowo węzły z drugiego wykresu, a nie tylko ten, który wywołuje funkcję. Dzięki temu grafy z węzłami o różnych identyfikatorach nie będą już uważane za równe (I401cb, b/311414915).

Wersja 2.7.5

Wersja 2.7.5

1 listopada 2023 roku

androidx.navigation:navigation-*:2.7.5 został zwolniony. Wersja 2.7.5 zawiera te commity.

Usprawnienia dotyczące wydajności

  • Znacznie zwiększyliśmy wydajność (zarówno pod względem czasu, jak i liczby alokacji) porównywania 2 wykresów. Oznacza to, że wywołania takie jak setGraph, które porównują wewnętrznie nowy graf z dotychczasowym, są znacznie szybsze i prowadzą do mniejszej liczby pomijanych klatek. Dziękujemy Michał Z za dokładną analizę, która doprowadziła do tych ulepszeń. (I6ad62)
  • NavHost będzie teraz renderować miejsce docelowe startu w pierwszym przejeździe kompozycją zamiast czekać na drugi przejazd, aby odczytać zaktualizowany stan. (I439a7, b/304852206)

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że zwracany był stos wywołań, jeśli wywołano setGraph więcej niż raz z tym samym grafem tylko wtedy, gdy w grafie znajdowało się miejsce docelowe zawierające działanie łączące 2 miejsca docelowe. (Ieaed7)
  • Dialogi, które zostały wyświetlone i zamknięte w krótkim odstępie, nie będą już widoczne na liście NavController.visibleEntries. (I67586, b/287969970)
  • Gdy wpis zostanie usunięty, a następnie nastąpi zmiana konfiguracji, wartość ViewModel zostanie prawidłowo wyczyszczona, jeśli saveState ma wartość false. (Idf242, b/298164648)
  • Rozwiązano problem, który powodował, że NavController mogło obsługiwać ten sam link głęboki więcej niż raz, jeśli stos z poprzednimi wywołaniami był całkowicie pusty przed zmianą konfiguracji lub wywołaniem setGraph tylko wtedy, gdy przychodzący zamiar miał ustawioną flagę FLAG_ACTIVITY_NEW_TASK. (I73c7f)

Aktualizacje zależności

  • Nawigacja z fragmentami zależy teraz od Fragmentu 1.6.2. Rozwiązaliśmy problem, który powodował, że ViewModel wystąpienia zagnieżdżonych fragmentów nie były usuwane podczas wywoływania clearBackStack.

Wersja 2.7.4

Wersja 2.7.4

4 października 2023 roku

androidx.navigation:navigation-*:2.7.4 został zwolniony. Wersja 2.7.4 zawiera te commity.

Nowe funkcje

  • Dodano obsługę popUpTo, aby umożliwić korzystanie z tras z argumentami, co pozwala na powrót do konkretnego wpisu, który używa tych samych argumentów, co obsługa w popBackStack. (I731f4, b/299255572)

Poprawki błędów

  • Rozwiązanie problemu, w którym przerwanie nawigacji przez inną nawigację z użyciem popUpTo powodowało awarię FragmentNavigator. (I3c848, b/301887045)
  • Rozwiązaliśmy problem polegający na tym, że naciśnięcie przycisku Wstecz w systemie powodowało nieprawidłową aktualizację wartości currentDestination, która nie pasowała do wyświetlanego fragmentu. (Id0d6c, b/289877514)
  • Cykl życia DialogFragment będzie teraz prawidłowo przechodzić do stanu RESUMED, gdy dialog nad nim zostanie zamknięty. (I88f0d, b/301811387)

Wersja 2.7.3

Wersja 2.7.3

20 września 2023 r.

androidx.navigation:navigation-*:2.7.3 został zwolniony. Wersja 2.7.3 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem w Nawigacji z użyciem fragmentów, który powodował, że lista visibleEntries zawierała nieprawidłowe wpisy. (I5caa9, b/288520638)
  • Rozwiązaliśmy problem, który powodował, że do celu typu okienko wyłaniające (np.Dialogs, Bottomsheets itp.) nigdy nie docierał wywołanie zwrotne cyklu życia RESUMED. (I3b866, b/287505132)

Wersja 2.7.2

Wersja 2.7.2

6 września 2023 r.

androidx.navigation:navigation-*:2.7.2 został zwolniony. Wersja 2.7.2 zawiera te commity.

Poprawki błędów

  • Nawigacja zależy teraz od cyklu życia 2.6.2, co rozwiązuje problem interakcji między rememberSaveable a elementem NavHost w komponencie Navigation Compose, który powodował, że stan rememberSaveable miejsc docelowych i wszystkich elementów SavedStateHandle należących do ViewModel nie był prawidłowo przywracany po zakończeniu i powtórnym utworzeniu procesu. (b/298059596, b/289436035)
  • Rozwiązaliśmy problem polegający na tym, że podczas wyświetlania wielu okien dialogowych w edytowaniu nawigacji okna te były częściowo zasłonięte (np. nie były to okna na samej górze) i miały stan cyklu życia CREATED, a nie STARTED. (aosp/2728520, b/289257213)
  • Rozwiązano problem z jednoczesnym wyświetlaniem wielu okien w komponencie Navigation Compose. Po zamknięciu najwyższego okna nowe okno nie przechodziło w stan cyklu życia STARTED, tylko pozostawało w stanie RESUMED. (aosp/2629401, b/286371387)
  • Argumenty Bezpieczne parametry nawigacji nie tworzą już natychmiast instancji zadania, jeśli nie jest ono wykonywane. (I0e385, b/260322841)

Aktualizacja zależności

  • Składnik Nawigacja zależy teraz od składnika Compose w wersji 1.5.1.

Wersja 2.7.1

Wersja 2.7.1

23 sierpnia 2023 r.

androidx.navigation:navigation-*:2.7.1 został zwolniony. Wersja 2.7.1 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problemy w Nawigacji w Compose, które powodowały wyświetlanie błędu podczas próby uzyskania dostępu do Scaffold w ramach Lifecycle.State.DESTROYED ViewModel. (I1dc11, b/268422136)

Wersja 2.7.0

Wersja 2.7.0

9 sierpnia 2023 r.

androidx.navigation:navigation-*:2.7.0 został zwolniony. Wersja 2.7.0 zawiera te commity.

Ważne zmiany od wersji 2.6.0

Animacje z Accompanist

Teraz, gdy AnimatedContent jest stabilny, udało nam się przenieść kod z animacji towarzyszącej nawigacji z powrotem do samego tworzenia treści nawigacji.

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

Nie wprowadzimy żadnych dodatkowych zmian w animacji nawigacji w Accompanist. Wkrótce wycofamy ją oficjalnie, a wraz z nią instrukcje przejścia na kompozycję nawigacji. Będą one odwrotnością instrukcji migracji i nie będą wymagać żadnych innych zmian w interfejsie API, jeśli korzystasz już z najnowszej wersji alpha Accompanist (0.31.2-alpha). (b/197140101)

Poprawki błędów

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

Aktualizacje zależności

  • Nawigacja zależy teraz od tego, czy 1.5.0 jest w pozycji 1.5.0.1.1.0

Wersja 2.7.0-rc01

26 lipca 2023 r.

androidx.navigation:navigation-*:2.7.0-rc01 został zwolniony. Wersja 2.7.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

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

Znane problemy

  • W wersji 2.6.x aplikacji Nawigacja występuje problem, który może powodować IllegalArgumentException podczas nawigowania za pomocą funkcji popUpTo. Wyjątku można uniknąć, zmieniając strukturę grafu w sposób podobny do opisanego tutaj. (b/287133013)

Wersja 2.7.0-beta02

28 czerwca 2023 r.

androidx.navigation:navigation-*:2.7.0-beta02 został zwolniony. Wersja 2.7.0-beta02 zawiera te commity.

Poprawki błędów

  • W komponencie tworzenia trasy jest teraz prawidłowa kolejność Z dla niestandardowych przejść, które korzystają z opcji popUpTo (/Ib1c3a, b/285153947).

Wersja 2.7.0-beta01

7 czerwca 2023 r.

androidx.navigation:navigation-*:2.7.0-beta01 został zwolniony. Wersja 2.7.0-beta01 zawiera te commity.

Poprawki błędów

  • NavHost w sekcji Nawigacja w komponowaniu teraz prawidłowo przechwytuje wywołania systemowe nawet po tym, jak Activity został STOPPEDRESUMED. (Icb6de, b/279118447)

Wersja 2.7.0-alpha01

24 maja 2023 r.

androidx.navigation:navigation-*:2.7.0-alpha01 został zwolniony. Wersja 2.7.0-alpha01 zawiera te commity.

Animacje z Accompanist

Teraz, gdy AnimatedContent jest stabilny, udało nam się przenieść kod z animacji towarzyszącej nawigacji z powrotem do samego tworzenia treści nawigacji.

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

Nie wprowadzimy żadnych dodatkowych zmian w animacji nawigacji w Accompanist. Wkrótce wycofamy ją oficjalnie, a wraz z nią instrukcje przejścia na kompozycję nawigacji. Będą one odwrotnością instrukcji migracji i nie będą wymagać żadnych innych zmian w interfejsie API, jeśli korzystasz już z najnowszej wersji alpha Accompanist (0.31.2-alpha). (b/197140101)

Poprawki błędów

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

Aktualizacje zależności

  • Nawigacja zależy teraz od okna tworzenia wiadomości 1.5.0-beta01.

Wersja 2.6.0

Wersja 2.6.0

7 czerwca 2023 r.

androidx.navigation:navigation-*:2.6.0 został zwolniony. Wersja 2.6.0 zawiera te commity.

Ważne zmiany w nawigacji od wersji 2.5.0

  • Argumenty NavBackStackEntry.argumentsarguments przekazane do funkcji OnDestinationChangedListener są teraz tylko kopią niezmiennych argumentów utworzonych podczas przechodzenia do miejsca docelowego. Oznacza to, że wszelkie zmiany wprowadzone w tych pakietach nie będą widoczne podczas kolejnych dostępów do instancji arguments lub innych instancji OnDestinationChangedListener.
  • NavDeepLink obsługuje teraz wartości domyślne dla tablic, co umożliwia obsługę powtarzających się parametrów zapytania, które będą mapowane na typ tablicy argumentu. Funkcja NavType zawiera teraz też domyślną metodę, którą można zastąpić, aby połączyć 2 przeanalizowane wartości.
  • Niestandardowe podklasy klasy NavType mogą teraz zastąpić metodę serializeAsValue, aby za pomocą metody parseValue zastosować serializację wartości do typu String. Dzięki temu zarówno serializacja, jak i deserializacja (za pomocą metody parseValue) są całkowicie zaszyte w klasie NavType. StringType zastępuje teraz tę metodę, aby wywołać metodę Uri.encode w danym obiekcie String.

Ważne zmiany w komponencie Nawigacja od wersji 2.5.0

  • Podczas podglądu kompozytowalnej funkcji za pomocą NavHost domyślnie będzie wyświetlana startDestination w grafu nawigacji.
  • NavController.popBackStack(route), NavController.getBackStackEntry(route)NavController.clearBackStack(route) mają teraz wszystkie ścieżki pomocy z częściowo lub całkowicie wypełnionymi argumentami. Pamiętaj, że argumenty muszą być identyczne z argumentami wpisu.
  • Próba utworzenia pustego NavDeepLink za pomocą navDeepLink w Kotlinie DSL spowoduje wyświetlenie ostrzeżenia lint, które wskazuje, że precyzyjny link musi zawierać prawidłowy uri, działanie lub typ MIME.

Ważne zmiany w fragmentach nawigacji od wersji 2.5.0

  • NavHostFragment nie przechwytuje już samego przycisku Wstecz. Umożliwia to podrzędnej FragmentManager obsługę wywołania system back. Dzięki temu Fragment 1.7.0-alpha01 i nowsze mogą wyświetlać na urządzeniach z Androidem U animację przewidywanego przycisku Wstecz w aplikacji.
  • Gdy używasz nawigacji z fragmentami, próba ręcznego wykonania wywołania FragmentTransaction, które dodaje fragment do stosu poprzednich elementów FragmentManager, spowoduje wyjątek IllegalArgumentException. Fragmenty należy zawsze dodawać za pomocą interfejsu API navigate().
  • Jeśli w atributach app:dataapp:dataPattern w elemencie aktywności w pliku XML nawigacji używasz dokładnego ciągu znaków ${applicationId} jako placeholdera, podczas tworzenia placeholder zostanie automatycznie wypełniony wartością packageName kontekstu.
  • Podczas nawigacji i wyświetlania NavBackStackEntries FragmentNavigator używa teraz interfejsów API przejścia. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać na zakończenie efektów specjalnych fragmentu wejścia i wyjścia, zanim przejdzie do ostatniego Lifecycle.State.
  • Podczas nawigacji i wywoływania NavBackStackEntries interfejs DialogFragmentNavigator korzysta teraz z interfejsów API przejścia. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać, aż DialogFragment Lifecycle przejdzie do DESTROYED, zanim sama przejdzie do DESTROYED.
  • NavHostFragment umożliwia teraz odzyskiwanie NavController, gdy tylko NavHostFragment zostanie dołączony do FragmentManager, a nie dopiero po onCreate().
  • Obsługa modułów funkcji dynamicznych przez nawigację zależy teraz od szczegółowej biblioteki Play Feature Delivery.
  • Argumenty Bezpieczne dane nawigacji są teraz zależne od wtyczki Androida do obsługi Gradle w wersji 7.3.0. Oznacza to, że jest teraz zgodna tylko z wersjami 7.3.0 i nowszymi.

Ważne zmiany w NavigationUI od wersji 2.5.0

  • Gdy przekazujesz identyfikator grafu nawigacyjnego do funkcji AppBarConfiguration (np. za pomocą funkcji Menu), funkcja NavigationUI będzie teraz traktować jako miejsce docelowe najwyższego poziomu tylko miejsce docelowe początkowe tego grafu nawigacyjnego, a nie będzie błędnie oznaczać jako miejsce docelowe najwyższego poziomu każdego miejsca docelowego w grafu. Sposób przekazywania identyfikatora pojedynczego miejsca docelowego nie uległ zmianie. Ta sama funkcja jest dostępna w Twoim kodzie za pomocą nowej funkcji isTopLevelDestination w komponencie AppBarConfiguration.
  • Integracje setupWithNavControllerNavigationUI, które korzystają z górnego paska aplikacji, będą teraz analizować wartości R.string argumentów ReferenceType znalezionych w android:label, aby przekształcać je w wartości ciągu znaków zamiast generować automatycznie liczby całkowite zasobu.
  • NavigationUI udostępnia teraz logi, gdy nie uda się przejść do wybranego MenuItem.

Wersja 2.6.0-rc02

24 maja 2023 r.

androidx.navigation:navigation-*:2.6.0-rc02 został zwolniony. Wersja 2.6.0-rc02 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem z nawigacją w fragmentach, w którym nawigowanie za pomocą popUpTo i usuwanie fragmentu ze stosu bez ponownego tworzenia jego widoku powodowało, że system przestał działać. (Ieb8d4, b/281726455)

Wersja 2.6.0-rc01

10 maja 2023 r.

androidx.navigation:navigation-*:2.6.0-rc01 został zwolniony. Wersja 2.6.0-rc01 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem w Nawigacji z fragmentami, w którym usunięcie fragmentu za pomocą funkcji navigate z wartością popUpTo w obsługach cyklu życia onResume() powodowało błąd IllegalStateException. (I21884, b/279644470)

Wersja 2.6.0-beta01

19 kwietnia 2023 r.

androidx.navigation:navigation-*:2.6.0-beta01 został zwolniony. Wersja 2.6.0-beta01 zawiera te commity.

Nowe funkcje

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

Poprawki błędów

  • Gdy używasz nawigacji z fragmentami, próba ręcznego wykonania wywołania FragmentTransaction, które dodaje fragment do stosu poprzednich elementów FragmentManager, spowoduje wyjątek IllegalArgumentException. Fragmenty należy zawsze dodawać za pomocą interfejsu API navigate(). (I6d38e)
  • Gdy w tym samym interwale występuje instrukcja navigate, która dodaje element, i instrukcja popBackStack, która go usuwa, wynikowy element na szczycie stosu z powrotem trafi do instrukcji RESUMED Lifecycle.State. (Id8067, b/276495952)

Wersja 2.6.0-alpha09

5 kwietnia 2023 r.

androidx.navigation:navigation-*:2.6.0-alpha09 został zwolniony. Wersja 2.6.0-alpha09 zawiera te commity.

Poprawki błędów

  • Naprawiono błędy związane z nieprawidłową ścieżką. Jeśli NavDestination zawiera niepustą wartość NavArgument, ścieżka do tego miejsca docelowego musi zawierać zmienne o tych samych nazwach co niepusty argument NavArgument. (Ic62bf, b/274697949)
  • Nawigacja za pomocą precyzyjnych linków na podstawie Action/MimeType zakończy się teraz niepowodzeniem, jeśli operacja nawigacji nie zawiera wartości niepustowej NavArgument wymaganej przez NavDestination, z którym Action/MimeType się zgadza. (Ibfa17, b/271777424)
  • Gdy NavController ustawia graf z tymi samymi trasami i miejscami docelowymi co poprzedni graf, teraz prawidłowo zastępuje bieżące węzły grafu i miejsca docelowe w poprzednim stosie nowym instancjami. Rozwiązanie to problem z zawieszaniem się aplikacji podczas używania funkcji onLaunchSingleTop bez zapisywania stanu w komponencie Navigation Compose. Rozwiązaliśmy też błąd, który powodował nieprawidłowe przechodzenie do miejsc docelowych powiązanych z głównym wykresem i nieprawidłowy stos. (I5bc58, b/275258161, b/275407804)

Wersja 2.6.0-alpha08

22 marca 2023 r.

androidx.navigation:navigation-*:2.6.0-alpha08 został zwolniony. Wersja 2.6.0-alpha08 zawiera te commity.

Nowe funkcje

  • NavHostFragment umożliwia teraz odzyskiwanie NavController, gdy tylko NavHostFragment zostanie dołączony do FragmentManager, a nie dopiero po onCreate(). (Ic6382, b/220186282)

Poprawki błędów

  • Rozwiązaliśmy błąd NullPointerException występujący podczas wyjmowania zagnieżdżonego grafu, który zawiera argument niepusty. (6b3581, b/249988437)
  • Gdy użyjesz przycisku Wstecz po przejściu do innej strony za pomocą popUpTo, stan NavController zmieni się na odpowiedni. (I3a8ec, b/270447657)
  • FragmentNavigator będzie teraz prawidłowo wyjmować wpisy, gdy stos będzie wyjmowany przez system lub popBackStack(), oraz czy transakcja używa efektów dla fragmentu. (I81bdf)
  • Dodawanie fragmentów do FragmentNavigatorFragmentManager bez korzystania z nawigacji nie spowoduje już awarii. (b17204, b/274167493)

Aktualizacje zależności

Wersja 2.6.0-alpha07

8 marca 2023 r.

androidx.navigation:navigation-*:2.6.0-alpha07 został zwolniony. Wersja 2.6.0-alpha07 zawiera te commity.

Poprawki błędów

  • Wersje interfejsu API getBackStackEntry, popBackStackclearBackStack, które przyjmują trasy, obsługują teraz wzorce tras z argumentami typu nullable i parametrami zapytania typu nullable (I22294, b/269302500)
  • Rozwiązaliśmy problem polegający na tym, że wywołanie funkcji clearBackStack() z poziomu funkcji NavController nie powoduje wyczyszczenia zapisanego stanu w menedżerze fragmentów powiązanym z oczyszczonym stosem wstecz. (Ic1cce, b/271190202)
  • Naprawiliśmy regresję w wersji 2.6.0-alpha06, która powodowała podświetlenie niewłaściwego elementu MenuItem w elementach BottomNavigationView podczas przechodzenia między kartami za pomocą systemu wstecz. (I634f6, b/270447657)
  • Naprawiono regresję w wersji 2.6.0-alpha06, która powodowała, że NavBackStackEntry nie były przenoszone do stanu RESUMED podczas używania Animation. (Ib3589, b/269646882)

Wersja 2.6.0-alpha06

22 lutego 2023 roku

androidx.navigation:navigation-*:2.6.0-alpha06 został zwolniony. Wersja 2.6.0-alpha06 zawiera te commity.

Nowe funkcje

  • Podczas podglądu kompozytowalnej funkcji za pomocą NavHost domyślnie będzie wyświetlana startDestination w grafu nawigacji. (I2b89f)

Zmiany w interfejsie API

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

Poprawki błędów

  • Naprawiono awarię podczas próby nawigacji przy użyciu nawigacji dynamicznych fragmentów. (I3ee29, b/268360479)
  • Usunięto błąd, który powodował, że przechodzenie do innego fragmentu za pomocą przycisku wstecz systemu nie aktualizowało dolnego paska do wybranego elementu (If559f, b/269044426).

Znane problemy

  • Podczas korzystania z nawigacji z fragmentami cykl życia NavBackStackEntry nie dociera do etapu RESUMED, gdy używasz interfejsów API Animation. (b/269646882)
  • Jeśli używasz nawigacji z fragmentami i przemieszczasz się za pomocą BottomNavigation, a potem próbujesz przywrócić stos wstecz z większą liczbą wpisów, BottomMenuItem nie zostanie prawidłowo zaktualizowany. (b/270447657)
  • Gdy używasz nawigacji z fragmentami, po przywróceniu stanu NavBackStackEntry Lifecycle nie dostaje DESTROYED, gdy jego fragment to DESTROYED . (b/270610768)

Wersja 2.6.0-alpha05

8 lutego 2023 r.

androidx.navigation:navigation-*:2.6.0-alpha05 został zwolniony. Wersja 2.6.0-alpha05 zawiera te commity.

Nowe funkcje

  • NavController.popBackStack(route), NavController.getBackStackEntry(route)NavController.clearBackStack(route) mają teraz wszystkie ścieżki pomocy z częściowo lub całkowicie wypełnionymi argumentami. Pamiętaj, że argumenty muszą być identyczne z argumentami wpisu. (Iebd28, Ic678c, I3b37b, b/257514373)
  • Podczas nawigacji i wywoływania NavBackStackEntries interfejs FragmentNavigator korzysta teraz z interfejsów API przejścia. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać na zakończenie efektów specjalnych fragmentu wejścia i wyjścia, zanim przejdzie do ostatniego Lifecycle.State. (I3cb19, b/238686802)
  • Podczas nawigacji i wywoływania NavBackStackEntries interfejs DialogFragmentNavigator korzysta teraz z interfejsów API przejścia. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać, aż DialogFragment Lifecycle przejdzie do DESTROYED, zanim sama przejdzie do DESTROYED. (I53ee5, b/261213893)

Zmiany w interfejsie API

  • NavigatorState udostępnia teraz interfejs API prepareForTransition, aby umożliwić Navigator przenoszenie NavBackStackEntries do pośrednich Lifecycle.State. (I42c21, b/238686802)
  • Teraz możesz uzyskać dostęp do stosu powiązanego z elementem NavGraphNavigator lub ComposeNavigator za pomocą usługi backstack. ComposeNavigator udostępnia teraz też wywołanie zwrotne onTransitionComplete(), aby oznaczyć NavBackStackEntry, które wykonało operację nawigacji lub popBackStack, jako zakończone. (I02062, I718db, b/257519195)

Poprawki błędów

  • Stan nawigatora będzie teraz nieaktywny, gdy używasz interfejsów API push/popWithTransition, a element jest już obsługiwany. (Iadbfa, b/261213893)
  • Gdy używasz launchSingleTop z zagnieżdżonym NavGraph, wszystkie miejsca docelowe od oryginalnego miejsca docelowego do jego startDestination zostaną prawidłowo dodane do góry stosu. (Id4bea, b/253256629)
  • Nawigacja będzie teraz prawidłowo zastępować instancję DialogFragment podczas nawigowania do tego samego miejsca docelowego z flagą launchSingleTop ustawioną na wartość true. (I45b5a, b/149572817)
  • Argumenty Navigation SafeArgs nie będą już powodować błędu kompilacji, jeśli mają dokładnie 19 znaków. (Id60bc, b/257110095)

Wersja 2.6.0-alpha04

9 listopada 2022 r.

androidx.navigation:navigation-*:2.6.0-alpha04 został zwolniony. Wersja 2.6.0-alpha04 zawiera te commity.

Nowe funkcje

  • Niestandardowe podklasy klasy NavType mogą teraz zastąpić metodę serializeAsValue, aby za pomocą metody parseValue zastosować serializację wartości do typu String. Dzięki temu zarówno serializacja, jak i deserializacja (za pomocą metody parseValue) są całkowicie zaszyte w klasie NavType. StringType zastępuje teraz tę metodę, aby wywołać metodę Uri.encode w danym obiekcie String. (Ie5213, b/247637434)
  • NavigationUI udostępnia teraz logi, gdy nie uda się przejść do wybranego MenuItem. (I2af5a, b/247730357)

Poprawki błędów

  • Precyzyjne linki nawigacyjne są teraz analizowane leniwie zamiast podczas inicjalizacji grafu, co może poprawić wydajność aplikacji podczas uruchamiania. (Iab0ab)
  • Rozwiązanie problemu z awarią spowodowaną przewijaniem w górę po przejściu do miejsca docelowego za pomocą precyzyjnego linku z argumentami domyślnymi o wartości null. (I51c24, b/243183636)

Aktualizacja zależności

  • Obsługa modułów funkcji dynamicznych przez nawigację zależy teraz od szczegółowej biblioteki Play Feature Delivery. (Ib4ddc)
  • Argumenty Bezpieczne dane nawigacji są teraz zależne od wtyczki Androida do obsługi Gradle w wersji 7.3.0. Oznacza to, że jest teraz zgodna tylko z wersjami 7.3.0 i nowszymi (I47e49).

Wersja 2.6.0-alpha03

24 października 2022 r.

androidx.navigation:navigation-*:2.6.0-alpha03 został zwolniony. Wersja 2.6.0-alpha03 zawiera te commity.

Poprawki błędów

  • W sekcji Nawigacja 2.5.3: NavHost nie będzie już powodować błędu NoSuchElementException, jeśli nie ma dostępnych miejsc docelowych dla Crossfade. Teraz po prostu ją przeskoczy. (Ieb46e, b/253299416)
  • W sekcji Nawigacja2.5.3: rozwiązaliśmy problem, który powodował, że zapisany stan tworzenia wiadomości (np. użycie rememberSaveable) nie był zapominany i usuwany, gdy miejsce docelowe było usuwane z grupy. (I64949)

Aktualizacje zależności

Wersja 2.6.0-alpha02

5 października 2022 r.

androidx.navigation:navigation-*:2.6.0-alpha02 został zwolniony. Wersja 2.6.0-alpha02 zawiera te commity.

Zmiany w zachowaniu

  • Gdy przekazujesz identyfikator grafu nawigacyjnego do funkcji AppBarConfiguration (np. za pomocą funkcji Menu), funkcja NavigationUI będzie teraz traktować jako miejsce docelowe najwyższego poziomu tylko miejsce docelowe początkowe tego grafu nawigacyjnego, a nie będzie błędnie oznaczać jako miejsce docelowe najwyższego poziomu każdego miejsca docelowego w grafu. Sposób przekazywania identyfikatora pojedynczego miejsca docelowego nie uległ zmianie. Ta sama funkcja jest dostępna w Twoim kodzie za pomocą nowej funkcji isTopLevelDestination w komponencie AppBarConfiguration. (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 miejsca docelowego FloatingWindow, takiego jak okno dialogowe. (I4cde8, b/240308330)

Wersja 2.6.0-alpha01

7 września 2022 roku

androidx.navigation:navigation-*:2.6.0-alpha01 został zwolniony. Wersja 2.6.0-alpha01 zawiera te commity.

Nowe funkcje

  • Integracje setupWithNavControllerNavigationUI, które korzystają z górnego paska aplikacji, będą teraz analizować wartości R.string argumentów ReferenceType znalezionych w android:label, aby przekształcać je w wartości ciągu znaków zamiast generować automatycznie liczby całkowite zasobów. (I5f803, b/167959935)
  • NavDeepLink obsługuje teraz wartości domyślne dla tablic, co umożliwia obsługę powtarzających się parametrów zapytania, które będą mapowane na typ tablicy argumentu. Funkcja NavType zawiera teraz też domyślną metodę, którą można zastąpić, aby połączyć 2 przeanalizowane wartości. (Id68c3, b/209977108)
  • Jeśli w atributach app:dataapp:dataPattern w elemencie aktywności w pliku XML nawigacji używasz dokładnego ciągu znaków ${applicationId} jako placeholdera, podczas napełniania placeholder zostanie automatycznie wypełniony wartością packageName kontekstu. (Iaabde, b/234223561)
  • Próba utworzenia pustego NavDeepLink za pomocą navDeepLink w Kotlinie DSL spowoduje wyświetlenie ostrzeżenia lint, które wskazuje, że precyzyjny link musi zawierać prawidłowy uri, działanie lub typ MIME. (I08d2f, b/154038883)

Zmiany w interfejsie API

  • Dodano nową funkcję rozszerzenia NavDestination, która umożliwia analizowanie etykiet dynamicznych z argumentami w formie android:label="{arg}" i przekształcanie ich w typ String. Obsługuje argumenty ReferenceType, analizując wartości R.string na ciągi znaków. (I07d89, b/236269380)

Zmiany w zachowaniu

  • Argumenty argumentsarguments obiektu NavBackStackEntry przekazane do obiektu OnDestinationChangedListener są teraz tylko kopią niezmiennych argumentów utworzonych podczas przechodzenia do miejsca docelowego. Oznacza to, że wszelkie zmiany wprowadzone w tych pakietach nie będą widoczne podczas kolejnych dostępów do instancji arguments lub innych instancji OnDestinationChangedListener. (I676f5)

Poprawki błędów

  • W sekcji Nawigacja 2.5.2: dynamiczna nawigacja teraz prawidłowo próbuje zainstalować miejsca docelowe aktywności z innych modułów przed przejściem do nich. (Ia2c16, b/240292838)
  • Nawigacji 2.5.2: podczas przechodzenia do tego samego miejsca docelowego i ustawienia flagi launchSingleTop na „prawda” nawigacja będzie teraz prawidłowo zastępować wystąpienie Fragmentu. (I5a2f1, b/237374580)
  • Nawigacji2.5.2: rozwiązano problem IllegalStateException spowodowany przejściem do podwójnie zagnieżdżonego grafu, który ma element nadrzędny wspólny z nowym elementem docelowym. (I9f7cb, b/243778589)

Wersja 2.5

Wersja 2.5.3

24 października 2022 r.

androidx.navigation:navigation-*:2.5.3 został zwolniony. Wersja 2.5.3 zawiera te commity.

Poprawki błędów

  • NavHost nie będzie już powodować NoSuchElementException, gdy nie będzie dostępnego miejsca docelowego dla Crossfade. Teraz po prostu ją przeskoczy. (Ieb46e, b/253299416)
  • Rozwiązaliśmy problem, który powodował, że zapisany stan tworzenia (np. użycie rememberSaveable) nie był zapominany i usuwany, gdy miejsce docelowe było usuwane z zasobów. (I64949)

Wersja 2.5.2

7 września 2022 roku

androidx.navigation:navigation-*:2.5.2 został zwolniony. Wersja 2.5.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Dynamiczna nawigacja teraz prawidłowo próbuje zainstalować miejsca docelowe aktywności z innych modułów przed przejściem do nich. (Ia2c16, b/240292838)
  • Nawigacja będzie teraz prawidłowo zastępować wystąpienie Fragmentu podczas przechodzenia do tego samego miejsca docelowego i ustawiania wartości true dla flagi launchSingleTop. (I5a2f1, b/237374580)
  • Rozwiązano błąd IllegalStateException spowodowany przejściem do podwójnie zagnieżdżonego grafu, który ma element nadrzędny wspólny z nowym elementem docelowym. (I9f7cb, b/243778589)

Aktualizacja zależności

Wersja 2.5.1

27 lipca 2022 roku

androidx.navigation:navigation-*:2.5.1 został zwolniony. Wersja 2.5.1 zawiera te zatwierdzenia.

Poprawki błędów

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

Aktualizacje zależności

Wersja 2.5.0

29 czerwca 2022 r.

androidx.navigation:navigation-*:2.5.0 został zwolniony. Wersja 2.5.0 zawiera te commity.

Ważne zmiany od wersji 2.4.0

  • Integracja z CreationExtrasNavigation może teraz udostępniać bezstanową ViewModelProvider.Factory za pomocą CreationExtras w Lifecycle 2.5.0.

Nawigacja SafeArgs

  • Navigation Safe Args uaktualniła zależność Android Gradle Plugin, aby korzystała z 7.0.4, co powoduje utratę zgodności z wersjami AGP starszymi niż 7.0.
  • Dodaliśmy obsługę atrybutu build.gradle w pliku namespace, który zastępuje applicationId.

Inne zmiany

  • Interfejs API visibleEntries nie jest już eksperymentalny i zawiera funkcję umożliwiającą pobieranie wszystkich wpisów, których miejsce docelowe jest obecnie widoczne zgodnie z wartością parametru NavController.

Wersja 2.5.0-rc02

15 czerwca 2022 r.

androidx.navigation:navigation-*:2.5.0-rc02 został zwolniony. Wersja 2.5.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem z awarią spowodowany szybkim przełączaniem się między docelowymi przyciskami na dole podczas korzystania z funkcji tworzenia treści w nawigacji NavHost. (I3979a, b/234054916)
  • Navigation SafeArgs nie będzie się już zawieszać, gdy używasz applicationIdSuffix i przestrzeni nazw bez applicationId lub gdy applicationId i przestrzeń nazw są różne. (I754b1, b/233119646)
  • Funkcja NavArgument ma teraz funkcję niestandardową toString(), która pokazuje wewnętrzne wartości argumentu. (I900a8)

Wersja 2.5.0-rc01

11 maja 2022 roku

androidx.navigation:navigation-*:2.5.0-rc01 został zwolniony. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.

Nowe funkcje

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

Poprawki błędów

  • Zakresy kompozytowe w NavHostDialogHost są teraz usuwane w oczekiwanej kolejności, czyli komponenty wewnętrzne są usuwane przed zewnętrznymi. (I157e6)
  • Navigation SafeArgs używa teraz PathSensitivity.RELATIVEArgumentsGenerationTask, aby umożliwić przenoszenie pamięci podręcznej. Oznacza to, że element pamięci podręcznej można teraz ponownie użyć w ramach kompilacji CI w kompilacji lokalnej. (I5f67c, b/173420454)
  • Zaktualizowano regułę lint UnrememberedGetBackStackEntryDetector, aby wywołanie funkcji remember otaczające wywołanie funkcji getBackStackEntry() również przekazywało jako klucz obiekt NavBackStackEntry.(Ib7081, b/227382831)

Wersja 2.5.0-beta01

20 kwietnia 2022 r.

androidx.navigation:navigation-*:2.5.0-beta01 został zwolniony. Wersja 2.5.0-beta01 zawiera te commity.

Poprawki błędów

  • DialogNavigator używa teraz popWithTransition podczas wykonywania wywołania dismiss(). Rozwiązano problem z konkurencją podczas używania ViewModel w miejscu docelowym dialog, który powodował IllegalStateException, gdy okno dialogowe było zamykane za pomocą przycisku Wstecz lub gdy użytkownik klikał poza okno. (Id7376, b/226552301)

Aktualizacje zależności

  • Nawigacja zależy teraz od cyklu życia 2.5.0-beta01, co pozwala naprawić błąd IllegalStateException, gdy jedno NavHost jest zagnieżdżone w drugim NavHost na niegłównej karcie nawigacji u dołu, a użytkownik korzysta z wielu poziomów ścieżki wstecznej.

Wersja 2.5.0-alpha04

6 kwietnia 2022 roku

androidx.navigation:navigation-*:2.5.0-alpha04 został zwolniony. Wersja 2.5.0-alpha04 zawiera te commity.

Zmiany w interfejsie API

Poprawki błędów

  • Element NavHost zależy teraz od wartości visibleEntries z elementu NavController, 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 być prawidłowo animowany. (I4ba2b, b/225394514)
  • Wartość visibleEntries StateFlow zwracana przez NavController jest teraz obliczana na podstawie maksymalnego stanu cyklu życia wpisu, a nie jego bieżącego stanu. Oznacza to, że nawet jeśli cykl życia gospodarza navController jest krótszy niż STARTED, lista widocznych elementów pozostanie taka sama. (I9e2a8, b/225394514)
  • SavedStateViewFactory obsługuje teraz CreationExtras nawet wtedy, gdy został on zainicjowany za pomocą SavedStateRegistryOwner. Jeśli podano dodatkowe argumenty, argumenty zainicjowane są ignorowane. (I6c43b, b/224844583)
  • NavDeepLink może teraz analizować adresy Uri z jednym parametrem zapytania bez wartości. (I0efe8, b/148905489)
  • Pusty ciąg znaków jest teraz uznawany za prawidłowy argument w precyzyjnych linkach. (I70a0d, b/217399862)
  • Navigation Safe Args nie będzie się już zawieszać podczas korzystania z przestrzeni nazw, jeśli nie ma AndroidManifest.xml. (I17ccf, b/227229815)

Wersja 2.5.0-alpha03

23 lutego 2022 r.

androidx.navigation:navigation-*:2.5.0-alpha03 został zwolniony. Wersja 2.5.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

  • Teraz możesz przekazać parametr CreationExtras do funkcji by navGraphViewModels, aby utworzyć element ViewModel. (I29217, b/217618359)

Poprawki błędów

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

Wersja 2.5.0-alpha02

9 lutego 2022 r.

androidx.navigation:navigation-*:2.5.0-alpha02 został zwolniony. Wersja 2.5.0-alpha02 zawiera te commity.

Poprawki błędów

  • W sekcji Nawigacja 2.4.1: element NavHostFragment będzie teraz prawidłowo ustawiał element OnBackPressedDispatcher podczas korzystania z wiązania widoku z zagnieżdżonymi wykresami. (Ifbb51, b/214577959)
  • W sekcji Nawigacja 2.4.1: gdy linkujesz do głębokich treści w wielu zagnieżdżonych NavGraph, stapel „wstecz” będzie teraz prawidłowo zawierać pośrednie miejsca docelowe. (I504c0, b/214383060)

Wersja 2.5.0-alpha01

26 stycznia 2022 r.

androidx.navigation:navigation-*:2.5.0-alpha01 został zwolniony. Wersja 2.5.0-alpha01 zawiera te commity.

Nowe funkcje

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że dostęp do ViewModel utworzonego za pomocą by navGraphViewModels() z onCreate() fragmentu kończył się błędem IllegalStateException. (I8a14d)
  • NavDeepLinks nie będzie już niepotrzebnie dekodować argumentów dwukrotnie, co oznacza, że docelowe argumenty są teraz przekazywane do miejsca docelowego. (I31b0a, b/210711399)

Safe Args

  • Argumenty bezpieczne są teraz zależne od wtyczki Androida do obsługi Gradle w wersji 7.0.4. Oznacza to, że Navigation Safe Args nie będzie już zgodny z wersjami Android Studio starszymi niż 7.0, ale jest teraz zgodny z Android Gradle Plugin w wersji 7.1.0 lub nowszej. (I41c88, b/213086135, b/207670704)

Wersja 2.4.2

Wersja 2.4.2

6 kwietnia 2022 roku

androidx.navigation:navigation-*:2.4.2 został zwolniony. Wersja 2.4.2 zawiera te commity.

Poprawki błędów

Wersja 2.4.1

Wersja 2.4.1

9 lutego 2022 r.

androidx.navigation:navigation-*:2.4.1 został zwolniony. Wersja 2.4.1 zawiera te zatwierdzenia.

Poprawki błędów

Wersja 2.4.0

Wersja 2.4.0

26 stycznia 2022 r.

androidx.navigation:navigation-*:2.4.0 został zwolniony. Wersja 2.4.0 zawiera te commity.

Ważne zmiany od wersji 2.3.0

  • Wszystkie elementy nawigacji zostały przepisane w języku Kotlin. Poprawiono w nim możliwość zwracania wartości null przez klasy korzystające z typów ogólnych (np. podklasy NavType). Wszystkie funkcje rozszerzeń Kotlina, które wcześniej były częścią artefaktów -ktx, zostały przeniesione do odpowiednich głównych artefaktów. Elementy -ktx będą nadal publikowane, ale będą całkowicie puste.
  • Element navigation-fragment zawiera teraz wstępnie zbudowaną implementację układu z 2 panelami za pomocą nowego elementu AbstractListDetailFragment. Ten fragment używa obiektu SlidingPaneLayout do zarządzania panelem listy (który udostępnia Twoja podklasa) i panelem szczegółów, który używa obiektu NavHostFragment jako implementacji, jak widać w naszym przykładzie implementacji.
  • Metoda currentBackStackEntryAsFlow() w obiekcie NavController udostępnia obiekt Flow, który emituje się za każdym razem, gdy zmienia się bieżący obiekt NavBackStackEntry. Ten proces może być stosowany jako alternatywa dla ręcznego zarządzania OnDestinationChangedListener.
  • Kontroler nawigacji umożliwia teraz pobieranie listy wszystkich widocznych instancji NavBackStackEntry jako StateFlow za pomocą eksperymentalnej właściwości visibleEntries.
  • Teraz możesz rozszerzyć klasę NavType, aby utworzyć niestandardowe typy NavType. Typy niestandardowe są obsługiwane tylko wtedy, gdy tworzysz graficzną mapę nawigacyjną programowo, np. za pomocą języka DSL do tworzenia graficznej mapy nawigacyjnej w Kotlinie.
  • Navigation udostępnia teraz interfejsy API findStartDestination() i getHierarchy(), które można wykorzystać do implementacji niestandardowego interfejsu NavigationUI. findStartDestination() to funkcja rozszerzenia funkcji NavGraph, która wyszukuje rzeczywiste miejsce docelowe, które będzie wyświetlane po przejściu do wykresu, nawet jeśli startDestination jest zagnieżdżoną funkcją NavGraph. getHierarchy() to funkcja NavDestination, której można użyć do sprawdzenia, czy dane miejsce docelowe znajduje się w hierarchii innego miejsca docelowego.

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

  • Podczas napełniania elementu <action> za pomocą kodu 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 programowania Kotlin

W poprzednich wersjach Nawigacji każda lokalizacja miała stały identyfikator liczbowy, który pozwalał ją jednoznacznie odróżnić od innych lokalizacji i umożliwiał navigate() bezpośrednio lub za pomocą działania. Chociaż nadal jest to prawidłowe i przydatne, zwłaszcza w przypadkach, gdy definiujesz graf nawigacji w formacie XML i możesz używać automatycznie generowanych stałych R.id lub bezpiecznych argumentów (które używają tych stałych do generowania kodu w czasie kompilacji), ten system unikalnych liczb całkowitych nie uwzględnia znaczenia semantycznego ani możliwości wyrażania, które są potrzebne do obsługi w pełni dynamicznych grafów tworzonych programowo w czasie wykonywania za pomocą języka DSL Kotlina do nawigacji.

W tej wersji wprowadzamy nową opcję umożliwiającą jednoznaczne identyfikowanie miejsca docelowego w grafie nawigacji za pomocą jego trasy. Trasa to String, która definiuje unikalną ścieżkę do miejsca docelowego. Wszystkie metody Kotlin DSL, które przyjmowały identyfikator miejsca docelowego, są teraz wycofane i zastąpione odpowiednim interfejsem API, który przyjmuje trasę.

Każda trasa powinna być traktowana jako część „ścieżki” w elementach Uri, która definiuje ten cel, np. home, profile/{userId}, profile/{userId}/friends itd. Gdy tożsamość miejsca docelowego jest powiązana z konkretnym rodzajem treści, te argumenty dynamiczne powinny być częścią trasy, zgodnie z tymi samymi regułami co domyślne linki do treści.

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

Miało to pewne konsekwencje dla interfejsów API:

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

W odróżnieniu od nawigacji według identyfikatora nawigacja według trasy podlega tym samym regułom co ukryte linki głębokie, co oznacza, że możesz bezpośrednio nawigować do dowolnego miejsca docelowego w dowolnym zagnieżdżonym grafie. Dzięki temu te trasy będą dostępne w projektach wielomodułowych bez dodawania widocznych z zewnątrz linków głębokich do poszczególnych miejsc docelowych.

Nawigacja – tworzenie

Element navigation-compose zapewnia integrację między komponentem nawigacjiJetpack Compose. Używa funkcji @Composable jako miejsc docelowych w aplikacji.

Ta wersja zawiera:

  • Komponent NavHost, który umożliwia tworzenie grafu nawigacji za pomocą języka DSL w Kotlinie, z wykorzystaniem punktów docelowych composabledialog oraz obsługą opcjonalnych nawigacji, takich jak te z materiałów nawigacji towarzysza.
  • Obowiązkowa obsługa przejścia między miejscami docelowymi. Animacja nawigacji towarzyszącej może służyć do kontrolowania przejść wejścia i wyjścia za pomocą eksperymentalnych interfejsów Compose API.
  • Zakres Lifecycle dla każdego miejsca docelowego z możliwością łączenia. Każda lokalizacja osiąga stan RESUMED dopiero po zakończeniu wszystkich przejść wejściowych i natychmiast przechodzi do stanu STARTED po rozpoczęciu wszystkich przejść wyjściowych. Dzięki temu możesz uniknąć wszystkich problemów związanych z IllegalStateException i wielodotykiem, wywołując wywołanie navigate tylko wtedy, gdy Lifecycle ma stan RESUMED.
  • Wyodrębnienie ViewModel (za pomocą interfejsu API viewModel() w komponencie Lifecycle ViewModel Compose2.4.0 lub hiltViewModel() w komponencie Hilt Navigation Compose1.0.0) na poziomie miejsca docelowego, zapewniając zakres, który przetrwa zmiany konfiguracji i znajduje się na stosie z poziomu poprzedniego (gdy kompozytowany element treści jest w inny sposób usuwany) oraz sygnał w komponencie onCleared() ViewModel, który wskazuje na trwałe usunięcie i wyczyszczenie stanu związanego z tym NavBackStackEntry.
  • określenie zakresu stanu rememberSaveable na poziomie miejsca docelowego, co zapewnia automatyczne zapisywanie i przywracanie stanu wszystkich komponentów po powrocie do miejsca docelowego;
  • Pełna obsługa zapisywania i przywracania stanu NavController oraz stanu miejsca docelowego po zakończeniu i odtworzeniu procesu.
  • Automatyczna integracja z systemowym przyciskiem Wstecz.
  • Obsługa przekazywania argumentów, dołączania precyzyjnych linków do miejsc docelowych i zwracania wyniku do poprzednich miejsc docelowych.

  • Utwórz w komponencie rememberNavController()currentBackStackEntryAsState() konkretne pomocnicze komponenty, aby umożliwić przenoszenie stanu i połączenie komponentu NavController z komponentami kompozytowymi spoza komponentu NavHost (np. z paskiem nawigacyjnym na dole).

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

Więcej informacji znajdziesz w przewodniku po nawigacji w edytorze.

Wiele ścieżek wstecznych

Kontroler nawigacji odpowiada za zarządzanie stosem wstecz miejsc docelowych, dodając do niego miejsca docelowe, gdy navigate() do nich przechodzisz, oraz usuwając je, gdy wywołujesz popBackStack() lub naciskasz przycisk wstecz w systemie. Istniejąca klasa NavOptions i integracja z elementami <action> w pliku XML z grafem nawigacji zostały rozszerzone, aby obsługiwać zapisywanie i przywracanie stosu wstecz.

W ramach tej zmiany metody NavigationUI w klasach onNavDestinationSelected(), BottomNavigationView.setupWithNavController()NavigationView.setupWithNavController() automatycznie zapisują i przywracają stan wylistowanych miejsc docelowych, umożliwiając obsługę wielu stosów wstecznych bez wprowadzania żadnych zmian w kodzie. Jeśli używasz funkcji Nawigacja z fragmentami, jest to zalecany sposób integracji z wieloma stosami poprzednich elementów.

Interfejsy API służące do zapisywania i przywracania stanu są dostępne na różnych platformach:

  • W pliku XML nawigacji element <action> może teraz używać atrybutów logicznych app:popUpToSaveState i app:restoreState, aby zapisywać stan wszystkich miejsc docelowych wylistowanych za pomocą elementu app:popUpTo, a następnie przywracać stan powiązany z miejscem docelowym przekazanym jako element 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” />
    
  • navOptions Kotlin DSL możesz dodać właściwości logiczne restoreStatesaveState w komponencie popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • Aby ręcznie utworzyć obiekt NavOptions za pomocą metody NavOptions.Builder, możesz użyć metody setRestoreState() i nowego przeciążenia metody setPopUpTo(), która 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);
    
  • Automatyczne wywołania popBackStack() mogą teraz zawierać dodatkowy parametr saveState.

  • Metoda clearBackStack() służy do wyczyszczenia stanu zapisanego za pomocą metody popBackStack() lub popUpToSaveState.

We wszystkich przypadkach NavController zapisze i przywróci stan każdego NavBackStackEntry, w tym wszystkie wystąpienia ViewModel ograniczone do miejsca docelowego nawigacji. Interfejsy API Navigator zostały zaktualizowane, aby umożliwić każdemu Navigator zapisywanie i przywracanie własnego stanu.

Zmiany w zachowaniu

  • NavDeepLinkBuilder dodaje teraz PendingIntent.FLAG_IMMUTABLE do PendingIntent zwracanego przez createPendingIntent(), co zapewnia prawidłowe działanie tego interfejsu API w przypadku kierowania na Androida 12.
  • Nawigacja zależy teraz od Lifecycle 2.3.1 i teraz oznacza setGraph(), popBackStack(), navigateUp() i navigate(), czyli metody, które aktualizują NavBackStackEntry Lifecycle, jako @MainThread, dostosowując Nawigację do głównego wątku wdrożenia wprowadzonego w Lifecycle 2.3.0.
  • Precyzyjne linki sprawdzają teraz, czy w elementach Uri znajdują się wszystkie wymagane argumenty (te bez wartości domyślnych).
  • NavDeepLinkParsowane argumenty są teraz traktowane tak samo jak znaki zapytania jako separatory między segmentami ścieżki, co zapobiega rozciąganiu się argumentu na znak zapytania.
  • Podczas generowania działań kod Kotlina wygenerowany z Safe Args umieszcza teraz argumenty bez wartości domyślnych przed argumentami z wartościami domyślnymi jako parametry.
  • Podczas generowania argumentów Safe Args umieszcza teraz parametry bez wartości domyślnych przed parametrami z wartościami domyślnymi.
  • Safe-Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 4.2.0. Oznacza to, że nie będziesz już otrzymywać ostrzeżenia dotyczącego applicationIdTextResource.

Znane problemy

Wersja 2.4.0-rc01

15 grudnia 2021 roku

androidx.navigation:navigation-*:2.4.0-rc01 został zwolniony. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.

Zmiany w zachowaniu

  • NavDeepLink przeanalizowane argumenty są teraz traktowane jako znaki funta w taki sam sposób jak znaki zapytania jako separatory między argumentami. (I21309, b/180042703)

Poprawki błędów

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

Poprawki błędów w sekcji Nawigacja w Compose

  • Usunięto potencjalny błąd powodowany szybkim przełączaniem się między miejscem początkowym a innym miejscem docelowym za pomocą elementów menu nawigacji dolnej. (Ic8976, b/208887901)
  • Miejsce docelowe okna dialogowego jest teraz prawidłowo przywracane u góry ekranu po zmianach konfiguracji lub zakończeniu procesu. (I4c0dc, b/207386169)
  • Rozwiązaliśmy problem, który powodował, że próba pobrania ViewModel z elementu NavBackStackEntry okna dialogowego kończyła się niepowodzeniem, gdy okno zostało zamknięte. (I6b96d, b/206465487)
  • Rozwiązaliśmy problem, który występował podczas używania miejsc docelowych activity z elementem NavHost w komponowaniu trasy. Powodował on nieskończone ponowne komponowanie. (I8f64c)
  • Usunięto wyciek pamięci w komponencie Navigation Compose, który utrzymywał odwołanie do starej aktywności po zmianie konfiguracji lub zakończeniu procesu. (I4efcb, b/204905432)

Poprawki błędów Safe Args

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

Wersja 2.4.0-beta02

3 listopada 2021 r.

androidx.navigation:navigation-*:2.4.0-beta02 został zwolniony. Wersja 2.4.0-beta02 zawiera te commity.

Zmiany w interfejsie API

  • Obsługa zarówno jawnych, jak i domyślnych linków głębokich automatycznie dodaje flagę saveState podczas przechodzenia do innego grafu, co zapewnia, że kod, np. NavigationUI.setupWithNavController i kod korzystający z wielu stosów wywołań, działa zgodnie z oczekiwaniami. (Ic8807)

Zmiany w zachowaniu

  • W ramach funkcji NavDeepLink wzorce precyzyjnych linków są teraz kompilowane w sposób leniwy, a nie podczas napełniania. Powinna ona skrócić czas inflacji wykresów nawigacyjnych, które zawierają precyzyjne linki. (b8d257, b/184149935)

Poprawki błędów

  • Rozwiązaliśmy problem polegający na tym, że elementy NavBackStackEntries były przesuwane w dół do Lifecycle.State.CREATED po przeniesieniu do Lifecycle.State.STARTED, gdy element NavHost jest dodawany bezpośrednio do setContent() aktywności. (Ia5ac1, b/203536683)
  • Rozwiązaliśmy problem polegający na tym, że usunięcie miejsca docelowego DialogFragment ze stosu poprzednich wywołań przed wyświetleniem okna dialogowego nie powodowało jego zamknięcia. W efekcie, gdy użytkownik ręcznie zamykał błędne okno, aplikacja się zawieszała. (I687e5)
  • Rozwiązaliśmy problem, który powodował, że interfejs API onNavDestinationSelectedNavigationUI zwracał odpowiedź true, nawet jeśli nie navigate() do tego grafu nawigacyjnego. Teraz używa on tej samej logiki, której używa wewnętrznie usługa setupWithNavController, aby wybierać tylko MenuItem powiązane z bieżącym miejscem docelowym za pomocą atrybutu hierarchy tego miejsca. (I2b053)

Wersja 2.4.0-beta01

27 października 2021 roku

androidx.navigation:navigation-*:2.4.0-beta01 został zwolniony. Wersja 2.4.0-beta01 zawiera te commity.

Nowe funkcje

  • Możesz teraz używać by navGraphViewModel z trasą jako alternatywy dla identyfikatora, aby lepiej obsługiwać korzystanie z języka DSL nawigacji w Kotlinie z fragmentami. (I901e3, b/201446416)

Zmiany w interfejsie API

  • Interfejs API visibleEntries jest obecnie w fazie eksperymentalnej. (I93f6f)

Poprawki błędów

  • Modele widoku nie będą już usuwane, gdy przejścia zostaną przerwane przez przełączanie się między tymi samymi ekranami (Id52d8, b/200817333)
  • Argumenty NavDeepLink, które mogą być puste, nie wymagają już wartości domyślnej podczas dodawania precyzyjnych linków do pól NavDestination. (I5aad4, b/201320030)
  • Elementy NavBackStackEntries z różnymi cyklami życia nie są już uważane za równe. Oznacza to, że podczas nawigacji za pomocą singleTop i podczas ponownego wybierania elementów menu dolnego NavHost będzie prawidłowo przetwarzać wszystkie miejsca docelowe. (I1b351, b/196997433)
  • Rozwiązaliśmy problem z funkcją AbstractListDetailFragment, który powodował, że atrybuty layout_widthlayout_weight w panelu listy zwracanej przez funkcję onCreateListPaneView() były nieprawidłowo obsługiwane lub ignorowane. (f5fbf3)
  • Stan wizualny miejsc docelowych dialogu jest teraz prawidłowo zsynchronizowany ze stanem DialogFragmentNavigator. Oznacza to, że ręczne wywołanie asynchronicznego interfejsu API dismiss() dla DialogFragment prawidłowo usuwa wszystkie miejsca docelowe dialogu powyżej zamkniętego dialogu. Nie ma to wpływu na przypadki, gdy do zamknięcia okna dialogowego używasz popUpTo lub popBackStack(). (I77ba2)
  • AbstractAppBarOnDestinationChangedListener ma teraz bardziej czytelne komunikaty o błędach dotyczące onDestinationChanged(). (Ie742d)

Wersja 2.4.0-alpha10

29 września 2021 r.

androidx.navigation:navigation-*:2.4.0-alpha10 został zwolniony. Wersja 2.4.0-alpha10 zawiera te commity.

Nowe funkcje

  • Kontroler NavController umożliwia teraz pobieranie listy wszystkich widocznych instancji NavBackStackEntry za pomocą visibleEntries StateFlow (Ia964e).
  • Funkcja rememberNavController() przyjmuje teraz opcjonalny zbiór instancji Navigator, który zostanie dodany do zwróconego NavController, aby lepiej obsługiwać opcjonalne nawigatory, takie jak te z Materiału nawigacyjnego towarzysza. (I4619e)

Poprawki błędów

  • Nawigacja dynamiczna nie będzie się już zawieszać, gdy ponownie utworzysz aktywność. (Ifa6a3, b/197942869)
  • Rozwiązanie problemu z przyciskiem wstecz systemu, który występuje tylko po powrocie do miejsca docelowego w ramach komponentu zawierającego element NavHost. (3ed148, b/195668143)
  • SafeArgs generuje teraz argumenty dla fromBundle()fromSavedStateHandle() w odpowiedniej kolejności. (I824a8, b/200059831)

Wersja 2.4.0-alpha09

15 września 2021 r.

androidx.navigation:navigation-*:2.4.0-alpha09 został zwolniony. Wersja 2.4.0-alpha09 zawiera te commity.

Nowe funkcje

  • Możesz teraz użyć metody clearBackStack(), aby wyczyścić stan zapisany za pomocą metody popBackStack() lub popUpToSaveState. (I80a0f)
  • Możesz teraz przekazać w kreatorze grafu zagnieżdżonej nawigacji listę argumentów lub linków dogłębnych, które zostaną automatycznie dodane do tworzonego grafu. (I8a470, b/182545357)

Zmiany w interfejsie API

  • Funkcja navArgument w Kotlin DSL jest teraz częścią funkcji navigation-common, a nie navigation-compose. Aby nadal korzystać z tej funkcji, musisz zaktualizować importowane dane. (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

  • Gdy używasz komponentu Navigation Compose, komponenty NavGraph są DESTROYED dopiero wtedy, gdy wszystkie ich elementy podrzędne są DESTROYED. (I86552, b/198741720)
  • Argumenty NavDeepLink, które mogą być puste, nie wymagają już wartości domyślnej. (Ia14ef, b/198689811)
  • Wywołanie funkcji setGraph() z nowym grafem spowoduje teraz również wyczyszczenie wszystkich zapisanych stosów odwrotnych, a nie tylko odrzucenie poprzedniego stosu odwrotnego, jak miało to miejsce wcześniej. (I97f96)
  • Rozwiązaliśmy problem, który powodował, że instancje OnDestinationChangedListener i currentBackStackEntryFlow nie były powiadamiane podczas korzystania z launchSingleTop. (Iaaebc)

Aktualizacje zależności

Wersja 2.4.0-alpha08

1 września 2021 roku

androidx.navigation:navigation-*:2.4.0-alpha08 został zwolniony. Wersja 2.4.0-alpha08 zawiera te commity.

Nowe funkcje

Zmiany w zachowaniu

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

Poprawki błędów

  • Używanie funkcji getBackStackEntrypreviousBackStackEntry w ramach funkcji composable() w połączeniu z funkcją remember() nie spowoduje już wyjątku, jeśli w grupie elementów zwracanych przez funkcję nie ma żadnego elementu docelowego. (I75138, b/194313238)
  • Składnik Navigation Compose jest teraz prawidłowo ponownie składany po zmianie argumentów podrzędnego stosu i użyciu launchSingleTop=true. (Iebd69, b/186392337)
  • Nie będzie już funkcji ArrayIndexOutOfBoundsException podczas wywoływania funkcji setGraph z grafem zawierającym 13 lub 29 miejsc docelowych. (I1a9f1, b/195171984)
  • Generator SafeArgs Java nie powinien już generować ostrzeżeń lint podczas generowania klas Args. (I1a666, b/185843837)

Darowizna zewnętrzna

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

Wersja 2.4.0-alpha07

18 sierpnia 2021 r.

androidx.navigation:navigation-*:2.4.0-alpha07 został zwolniony. Wersja 2.4.0-alpha07 zawiera te commity.

Poprawki błędów

  • Element kompozytywny Nawigacja teraz prawidłowo zapisuje stan po zmianach konfiguracji i podczas zmiany wykresów przy użyciu funkcji wielu warstw ścieżki wstecznej. (If5a3d, b/195141957)
  • Ponowny wybór tej samej karty podczas korzystania z funkcji tworzenia nawigacji z wieloma warstwami cofnięcia nie spowoduje już pustego ekranu. (I860dc, b/194925622)
  • NavHost sprawdza teraz zmiany w Lifecycle.State NavBackStackEntry, co oznacza, że fragment z użyciem NavHost będzie teraz odpowiednio przekomponowany w zależności od zmian cyklu życia, zamiast wyświetlać pusty ekran. (I4eb85, b/195864489)
  • Rozwiązaliśmy problem, który powodował, że po utworzeniu nowej aktywności (np. po zmianie konfiguracji) zamykanie okna DialogFragment nie aktualizowało prawidłowo stanu NavController. (Icd72b)
  • Rozwiązaliśmy problem polegający na tym, że wywołanie otwierania miejsca docelowego dialogu nie aktualizowało obsługi przycisku Wstecz w systemie NavController, co mogło spowodować przechwycenie przycisku Wstecz przez NavController, mimo że nie było żadnego stosu Wstecz do wyjęcia. (If3b34)
  • Safe-args automatycznie generuje teraz metodę toSavedStateHandle do argumentów, która może służyć do testowania kodu ViewModel. (If1e2d, b/193353880)

Wersja 2.4.0-alpha06

4 sierpnia 2021 r.

androidx.navigation:navigation-*:2.4.0-alpha06 został zwolniony. Wersja 2.4.0-alpha06 zawiera te commity.

Zmiany w interfejsie API

  • Metody requireSlidingPaneLayout()requireDetailPaneNavHostFragment()AbstractListDetailFragment zostały odpowiednio przemianowane na getSlidingPaneLayout()getDetailPaneNavHostFragment(). (I34a08)

Zmiany w zachowaniu

  • Podczas nawigacji z animacjami (np. Crossfade) nowy element docelowy Lifecycle dotrze do RESUMED dopiero po zakończeniu animacji. (If0543, b/172112072, b/194301889)
  • Element NavHost w sekcji Nawigacja w sekcji Tworzenie tekstu ustawia teraz wykres jako część pierwszej kompozycji. (Ieb7be)

Poprawki błędów

  • Wyświetlenie ostatniego miejsca docelowego w grafie nawigacji nie powoduje już błędu ClassCastException. (If0543, b/172112072, b/194301889)
  • Rozwiązaliśmy problem z NullPointerException, który występował podczas dodawania precyzyjnego linku bez Uri i przechodzenia do niego z trasy lub z precyzyjnego linku. (938a0c, b/193805425)
  • Rozwiązaliśmy problem w komponencie Edytor nawigacji polegający na tym, że precyzyjny link NavBackStackEntry nie osiągał stanu RESUMED. (I192c5)
  • Rozwiązaliśmy problem polegający na tym, że wyświetlenie okna docelowego nie aktualizowało obsługi przycisku Wstecz w systemie NavController, co mogło spowodować przechwycenie przycisku Wstecz przez NavController, mimo że nie było żadnego stosu Wstecz do wyświetlenia. (aosp/1782668)

Wersja 2.4.0-alpha05

21 lipca 2021 r.

androidx.navigation:navigation-*:2.4.0-alpha05 został zwolniony. Wersja 2.4.0-alpha05 zawiera te commity.

Zmiany w zachowaniu

  • Podczas nawigacji do różnych miejsc funkcja NavHost w sekcji Kompozycja w Nawigacji zawsze korzysta z przejść. (I07049, b/172112072)
  • Możesz teraz wprowadzać zmiany w grafu hosta nawigacji. Grafy z tym samym startDestination i tymi samymi miejscami docelowymi na rysunku będą uważane za równe i nie będą czyszczyć NavController stosu odwrotnego. (I0b8db, b/175392262)

Poprawki błędów

  • Naprawiono błąd NoSuchElementException występujący podczas wywoływania metody popBackStack() z poziomu metody LifecycleObserver dołączonej do obiektu NavBackStackEntry, spowodowany przez rekurencyjne aktualizacje stanu klasy NavController. (I64621)
  • AbstractListDetailFragment pozwala teraz całkowicie usunąć SlidingPaneLayout z pliku APK, gdy AbstractListDetailFragment nie jest używany. (I611ad)
  • Obiekty NavGraphNavDestination teraz zastępują metodę equals, dzięki czemu dwa obiekty o tych samych wartościach będą uważane za równe. (I166eb, b/175392262)

Wersja 2.4.0-alpha04

1 lipca 2021 r.

androidx.navigation:navigation-*:2.4.0-alpha04 został zwolniony. Wersja 2.4.0-alpha04 zawiera te commity.

Nowe funkcje

  • Element navigation-fragment zawiera teraz wstępnie zbudowaną implementację układu z 2 panelami za pomocą nowego elementu AbstractListDetailFragment. Ten fragment używa obiektu SlidingPaneLayout do zarządzania panelem listy (który udostępnia Twoja podklasa) i panelem szczegółów, który używa obiektu NavHostFragment jako implementacji, jak widać w naszym przykładzie implementacji. (Iac4be, b/191276636)
  • NavHost elementu navigation-compose obsługuje teraz dialog miejsca docelowe oprócz composable miejsc docelowych. Te miejsca docelowe dialogu będą wyświetlane w komponowalnym elemencie Dialog, który będzie unosić 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 add w funkcji NavigatorState nosi teraz nazwę 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 pushWithTransaction i popWithTransition w NavigatorState, aby asynchronicznie przesyłać lub usuwać dane do miejsca docelowego. Pamiętaj, że te interfejsy API nie są jeszcze używane przez żadnego z dołączonych nawigatorów. (Ic4d7c, b/172112072)

Zmiany w zachowaniu

  • NavDeepLinkBuilder dodaje teraz PendingIntent.FLAG_IMMUTABLE do PendingIntent zwracanego przez createPendingIntent(), co zapewnia prawidłowe działanie tego interfejsu API w przypadku kierowania na Androida 12. (If8c52)

Poprawki błędów

  • Rozwiązaliśmy problem z funkcją <include-dynamic>, w którym argumenty przekazywane do grafu nie były prawidłowo przekazywane do grafu uwzględnianego dynamicznie. (I3e115)
  • Rozwiązano błąd NullPointerException występujący 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 występujące podczas korzystania z pełnego trybu R8 3.1. (I2add9, b/191654433)
  • SafeArgs nie będzie już generować błędów podczas kompilowania aplikacji z wersjami Kotlin starszymi niż 1.5.0. (Icd1ff, b/190739257)

Wersja 2.4.0-alpha03

16 czerwca 2021 r.

androidx.navigation:navigation-*:2.4.0-alpha03 został zwolniony. Wersja 2.4.0-alpha03 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że do przejścia do zawartego wykresu dynamicznego potrzebne były 2 wywołania funkcji navigate(). (I7785c, b/188859835)
  • Naprawiliśmy regresję wprowadzoną w Nawigacji2.4.0-alpha01, w której setupActionBarWithNavController() nie usuwała prawidłowo ikony W górę, gdy znajdujesz się na poziomie najwyższym. (I5d443, b/189868637)
  • Rozwiązaliśmy błąd IllegalStateException występujący podczas wywoływania metody popBackStack() po wyjęciu z głównego grafu kontrolera NavController. (I2a330, b/190265699)
  • Reguły ProGuard dotyczące by navArgs() są teraz prawidłowo stosowane podczas korzystania z navigation-common lub innych artefaktów, które od niego zależą. (I68800, b/190082521)
  • Usługa OnDestinationChangedListener, która wywołuje usługę navigate() po raz pierwszy, gdy otrzyma wywołanie zwrotne, teraz prawidłowo otrzyma drugie wywołanie zwrotne z miejscem docelowym, do którego się przekierowała. (Ie5f9e, b/190228815)
  • Safe Args nie ulega już awarii podczas używania z modułami dynamicznych funkcji i AGP 7.0 lub nowszą wersją (I69518, b/189966576).

Znany problem

  • Jeśli używasz Gradle 6.7.0, funkcja Safe Args nie zadziała z powodu błędu Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’, ponieważ jest zależna od starszej wersji Kotlina. Aby rozwiązać ten problem, zaktualizuj Gradle do wersji 7.0. (b/190739257)

Wersja 2.4.0-alpha02

2 czerwca 2021 r.

androidx.navigation:navigation-*:2.4.0-alpha02 został zwolniony. Wersja 2.4.0-alpha02 zawiera te commity.

Nowe funkcje

  • Trasy są teraz obsługiwane w przypadku miejsc docelowych Activity, Fragment i Dialog, a także w ramach DynamicNavigation Kotlin DSL. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • NavigationUI tymczasowo dodał eksperymentalne interfejsy API, aby umożliwić rezygnację z zapisywania stanu. Zawsze zapisywanie stanu jest prawidłowym działaniem, ale nadal występują przypadki korzystania z nieobsługiwanych bibliotek (np.zachowanych fragmentów), które nie mogą być obsługiwane podczas zapisywania stanu. Daje to aplikacjom możliwość stopniowego rezygnowania z nieobsługiwanych interfejsów API. (Idf93c)
  • Navigation udostępnia teraz interfejsy API findDestination() i getHierarchy(), które można wykorzystać do implementacji niestandardowego interfejsu NavigationUI. findDestination() to funkcja rozszerzenia funkcji NavGraph, która wyszukuje miejsce docelowe na graf. getHierarchy() to funkcja NavDestination, której można użyć do sprawdzenia, czy dana lokalizacja docelowa znajduje się w hierarchii innej lokalizacji docelowej (I2932f, b/188183365).

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

  • Podczas wczytywania elementu <action> za pomocą kodu 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

  • Budowniki Kotlin DSL, które używają identyfikatora, zostały wycofane i powinny zostać zastąpione przez te, które korzystają z tras (I85b42, b/188816479) (I9f58f, b/188816479)

Poprawki błędów

  • DialogFragmentNavigator korzysta teraz z interfejsu API NavigatorState.pop(), aby informować NavController o zamknięciu okna dialogowego przez naciśnięcie przycisku Wstecz w systemie lub kliknięcie poza okno. Dzięki temu stan NavController jest zawsze zsynchronizowany ze stanem nawigatora. (I2ead9)
  • Nawigacja nie zwraca już wartości ConcurrentModificationException, gdy używasz manipulowania listą OnDestinationChangedListeners z wywołaniem zwrotnym onDestinationChanged. (Ib1707, b/188860458)

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

  • Metoda setId w klasie NavDestination jest teraz odpowiednio oznaczona za pomocą @IdRes, więc akceptuje tylko identyfikatory zasobów. (I69b80)

  • Parametr int w funkcji findNode to teraz resId, a nie 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 będziesz już otrzymywać ostrzeżenia dotyczącego applicationIdTextResource. (I6d67b, b/172824579)

Wersja 2.4.0-alpha01

18 maja 2021 r.

androidx.navigation:navigation-*:2.4.0-alpha01 został zwolniony. Wersja 2.4.0-alpha01 zawiera te commity.

Nowe funkcje

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

Wiele ścieżek wstecznych

Kontroler nawigacji odpowiada za zarządzanie stosem wstecz miejsc docelowych, dodając do niego miejsca docelowe, gdy navigate() do nich przechodzisz, oraz usuwając je, gdy wywołujesz popBackStack() lub naciskasz przycisk wstecz w systemie. Istniejąca klasa NavOptions i integracja z rekordami <action> w pliku XML z grafem nawigacji zostały rozszerzone, aby obsługiwać zapisywanie i przywracanie stosu wstecz. (b/80029773)

W ramach tej zmiany metody NavigationUI w klasach onNavDestinationSelected(), BottomNavigationView.setupWithNavController()NavigationView.setupWithNavController() automatycznie zapisują i przywracają stan wylistowanych miejsc docelowych, umożliwiając obsługę wielu stosów wstecznych bez wprowadzania żadnych zmian w kodzie. Jeśli używasz funkcji Nawigacja z fragmentami, jest to zalecany sposób integracji z wieloma stosami poprzednich elementów. (Ie07ca)

Interfejsy API służące do zapisywania i przywracania stanu są dostępne na różnych platformach:

  • W pliku XML nawigacji element <action> może teraz używać atrybutów logicznych app:popUpToSaveState i app:restoreState, aby zapisywać stan wszystkich miejsc docelowych wylistowanych za pomocą elementu app:popUpTo, a następnie przywracać stan powiązany z miejscem docelowym przekazanym jako element 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” />
    
  • navOptions Kotlin DSL możesz dodać właściwości logiczne restoreStatesaveState w komponencie popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • Aby ręcznie utworzyć obiekt NavOptions za pomocą metody NavOptions.Builder, możesz użyć metody setRestoreState() i nowego przeciążenia metody setPopUpTo(), która 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);
    
  • Automatyczne wywołania popBackStack() mogą teraz zawierać dodatkowy parametr saveState.

We wszystkich przypadkach NavController zapisze i przywróci stan każdego NavBackStackEntry, w tym wszystkie wystąpienia ViewModel ograniczone do miejsca docelowego nawigacji. Interfejsy API Navigator zostały zaktualizowane, aby umożliwić każdemu Navigator zapisywanie i przywracanie własnego stanu.

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

Trasy nawigacyjne

Trasa to String, który jednoznacznie identyfikuje miejsce docelowe. Chociaż wcześniej była używana tylko w komponencie Navigation Compose, teraz jest częścią podstawowych interfejsów API nawigacji. Jest to alternatywa dla używania identyfikatorów liczbowych podczas tworzenia grafu za pomocą Nawigacji w Kotlin DSL. (b/172823546)

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

Miało to pewne konsekwencje dla interfejsów API:

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

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

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

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

Zmiany w interfejsie API

  • Wszystkie elementy nawigacji zostały przepisane w języku Kotlin. Poprawiono w nim możliwość zwracania wartości null przez klasy korzystające z typów ogólnych (np. podklasy NavType). Wszystkie funkcje rozszerzeń Kotlina, które wcześniej były częścią artefaktów -ktx, zostały przeniesione do odpowiednich głównych artefaktów. Elementy -ktx będą nadal publikowane, ale będą całkowicie puste. (b/184292145)
  • NavDeepLinkBuilder obsługuje teraz dodawanie do wygenerowanego zbioru reguł wielu różnych miejsc docelowych. (I3ee0d, b/147913689)
  • Dodawanie funkcji fabrycznych dla DynamicNavHostFragment (Icd515, b/175222619)
  • Unikalny identyfikator NavBackStackEntry jest teraz dostępny w ramach publicznego interfejsu API. (Ie033a)
  • Pola nameargument oraz funkcje destrukturyzujące typu NamedNavArgument są teraz publiczne. (#174, b/181320559)
  • Wprowadziliśmy nowe rozszerzenie NavBackStackEntry#provideToCompositionLocals, które udostępnia wartość NavBackStackEntry odpowiednim lokalnym elementom kompozycji. (#175, b/187229439)

Safe Args

  • Safe Args generuje teraz metodę fromSavedStateHandle() dla każdej 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ło ono od KotlinPoet 1.8.0. (#172, b/183990444)

Zmiany w zachowaniu

  • Nawigacja zależy teraz od Lifecycle 2.3.1 i teraz oznacza setGraph(), popBackStack(), navigateUp() i navigate(), czyli metody, które aktualizują NavBackStackEntry Lifecycle, jako @MainThread, dostosowując Nawigację do głównego wątku wdrożenia wprowadzonego w Lifecycle 2.3.0. (b/171125856)
  • Parsowanie argumentów typu Enum z precyzyjnych linków jest teraz nieczułe na wielkość liter, dzięki czemu precyzyjny link http://www.example.com/red pasuje do precyzyjnego linku www.example.com/{color}, nawet jeśli typ Enum ma wartość RED. (#152, b/135857840)

Zgodność funkcji tworzenia

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

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że argumenty zastępcze na końcu miały pierwszeństwo przed precyzyjnymi linkami, które mają pasujący przyrostek. (#153, b/184072811)
  • NavHostFragment obsługuje teraz niestandardowe nawigacje, które używają tego samego @Navigator.Name("dialog") co domyślna DialogFragmentNavigator. (Ib1c2c, b/175979140)
  • Ulepszono działanie funkcji NavigatorProvider#addNavigator, aby zapewnić, że jej wielokrotne wywoływanie z tym samym wystąpieniem nie powoduje problemów. (#176, b/187443146)

Wkład zewnętrzny

  • Dziękujemy simonschiller za dodanie obsługi Safe Args generującej metodę fromSavedStateHandle() dla każdej klasy NavArgs. (#122, b/136967621)
  • Dziękujemy Bradleycorn za zignorowanie wielkości liter podczas parsowania argumentów typu Enum z precyzyjnych linków. (#152, b/135857840)
  • Dziękujemy użytkownikowi osipxd za rozwiązanie problemu polegającego na tym, że zmienne argumentów końcowych miały pierwszeństwo przed precyzyjnymi linkami, które mają pasujący sufiks. (#153, b/184072811)
  • Dziękujemy tatocaster za zaktualizowanie Safe Args, aby zależało ono od KotlinPoet 1.8.0. (#172, b/183990444)
  • Dziękujemy użytkownikowi jossiwolf za udostępnienie publicznie pól nameargument oraz funkcji destrukturyzowania w funkcji NamedNavArgument. (#174, b/181320559)
  • Dziękujemy użytkownikowi jossiwolf za wprowadzenie nowego rozszerzenia NavBackStackEntry#provideToCompositionLocals, które zapewnia NavBackStackEntry odpowiednim lokalnym elementom kompozycji. (#175, b/187229439)
  • Dziękujemy użytkownikowi jossiwolf za ulepszenie działania funkcji NavigatorProvider#addNavigator, aby jej wielokrotne wywoływanie z tą samą instancją nie powodowało problemów. (#176, b/187443146)

Wersja 1.0.0-alpha10

7 kwietnia 2021 r.

androidx.navigation:navigation-compose:1.0.0-alpha10 został zwolniony. Wersja 1.0.0-alpha10 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • NavHost przyjmuje teraz Modifier, który jest przekazywany do kontenera składanego, który zawiera docelowe elementy składane. (I85aca, b/175125483)

Poprawki błędów

  • NavHost działa teraz nawet wtedy, gdy nie znaleziono OnBackPressedDispatcherOwner, na przykład podczas wyświetlania podglądu NavHost. (I7d8b4)
  • Funkcja tworzenia trasy w nawigacji zależy teraz od nawigacji 2.3.5, co rozwiązuje problem z korzystaniem z elementu BackHandler w miejscu docelowym NavHost. (I7e63b, b/182284739)

Wersja 1.0.0-alpha09

10 marca 2021 r.

androidx.navigation:navigation-compose:1.0.0-alpha09 został zwolniony. Wersja 1.0.0-alpha09 zawiera te commity.

Zmiany w interfejsie API

  • Funkcja LocalViewModelStoreOwner.current zwraca teraz wartość ViewModelStoreOwner, która może być pusta, aby lepiej określić, czy ViewModelStoreOwner jest dostępna w bieżącej kompozycji. Interfejsy API, które wymagają parametru ViewModelStoreOwner, takie jak viewModel()NavHost, nadal wywołują wyjątek, jeśli parametr ViewModelStoreOwner nie jest ustawiony. (Idf39a)

Poprawki błędów

  • Navigation Compose zależy teraz od Navigation 2.3.4, która zawiera poprawkę dotyczącą próby ustawienia tego samego obiektu ViewModelStore po ustawieniu grafu. (I65c24, b/177825470)

Wersja 1.0.0-alpha08

24 lutego 2021 r.

androidx.navigation:navigation-compose:1.0.0-alpha08 został zwolniony. Wersja 1.0.0-alpha08 zawiera te commity.

Nowe funkcje

  • NavHost wypełnia teraz obiekt LocalSavedStateRegistryOwner CompositionLocal wartościami obiektu NavBackStackEntry tej lokalizacji, co zapewnia, że każdy stan zapisany bezpośrednio w SavedStateRegistry zostanie zapisany i przywrócony wraz z tą lokalizacją. (I435d7, b/179469431)

Wersja 1.0.0-alpha07

10 lutego 2021 r.

androidx.navigation:navigation-compose:1.0.0-alpha07 został zwolniony. Wersja 1.0.0-alpha07 zawiera te commity.

Aktualizacje zależności

Wersja 1.0.0-alpha06

28 stycznia 2021 roku

androidx.navigation:navigation-compose:1.0.0-alpha06 został zwolniony. Wersja 1.0.0-alpha06 zawiera te commity.

Zmiany w interfejsie API

  • Dodano rozszerzoną metodę getBackStackEntry(route: String) w klasie NavController, która zwraca powiązany obiekt NavBackStackEntry. (If8931)

Wersja 1.0.0-alpha05

13 stycznia 2021 r.

androidx.navigation:navigation-compose:1.0.0-alpha05 został zwolniony. Wersja 1.0.0-alpha05 zawiera te commity.

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

Wersja 1.0.0-alpha04

16 grudnia 2020 roku

androidx.navigation:navigation-compose:1.0.0-alpha04 został zwolniony. Wersja 1.0.0-alpha04 zawiera te commity.

  • Zaktualizowano w celu zapewnienia zgodności z Compose 1.0.0-alpha09.

Wersja 1.0.0-alpha03

2 grudnia 2020 r.

androidx.navigation:navigation-compose:1.0.0-alpha03 został zwolniony. Wersja 1.0.0-alpha03 zawiera te commity.

Poprawki błędów

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

Wersja 1.0.0-alpha02

11 listopada 2020 roku

androidx.navigation:navigation-compose:1.0.0-alpha02 został zwolniony. Wersja 1.0.0-alpha02 zawiera te commity.

Zmiany w interfejsie API

  • Komponent nawigacji obsługuje teraz opcje NavOptions do obsługi operacji popUpTo i launchSingleTop (If96c3, b/171468994)
  • Dodaliśmy funkcję nawigacji, która zamiast identyfikatora przyjmuje trasę. Umożliwia to tworzenie zagnieżdżonych wykresów w DSL funkcji tworzenia trasy. (I1661d)
  • startDestination znajduje się teraz przed trasą na liście parametrów NavHost (Ie620e).
  • Teraz możesz tworzyć graf, używając trasy jako źródła lub miejsca docelowego poza składanym elementem NavHost. (Iceb75)

Wersja 1.0.0-alpha01

28 października 2020 r.

android.navigation:navigation-compose:1.0.0-alpha01 został zwolniony. Wersja 1.0.0-alpha01 zawiera te commity.

Nowe funkcje

Element navigation-compose zapewnia integrację między komponentem nawigacjiJetpack Compose. Używa funkcji @Composable jako miejsc docelowych w aplikacji.

Ta pierwsza wersja zawiera:

  • Komponent NavHost, który umożliwia tworzenie grafu nawigacji za pomocą języka DSL w Kotlinie.
  • Zakres cyklu życia, ViewModel i zapamiętanego stanu na poziomie miejsca docelowego.
  • Automatyczna integracja z systemowym przyciskiem Wstecz.
  • Obsługa przekazywania argumentów, dołączania precyzyjnych linków do miejsc docelowych i zwracania wyniku do poprzednich miejsc docelowych.
  • Utwórz w komponencie rememberNavController()currentBackStackEntryAsState() konkretne pomocnicze komponenty, aby umożliwić przenoszenie stanu i połączenie komponentu NavController z komponentami kompozytowymi spoza komponentu NavHost (np. z paskiem nawigacji na dole).

Więcej informacji znajdziesz w przewodniku po nawigacji w edytorze.

Wersja 2.3.5

Wersja 2.3.5

7 kwietnia 2021 r.

androidx.navigation:navigation-*:2.3.5 został zwolniony. Wersja 2.3.5 zawiera te commity.

Nowe funkcje

  • Podczas nawigacji za pomocą elementu NavDeepLinkRequest lub Uri możesz teraz uzyskać dostęp do elementu Uri, działania i typu mime w wynikającym miejscu docelowym, uzyskując zamiar z argumentów za pomocą elementu KEY_DEEP_LINK_INTENT, co odzwierciedla funkcję już dostępną w przypadku zewnętrznego linkowania głębokiego. (I975c3, b/181521877)

Poprawki błędów

  • OnBackPressedCallbacks dodana do modułu rozsyłającego z użyciem NavBackStackEntry jako LifecycleOwner, który teraz prawidłowo przechwytuje dane po zakończeniu cyklu życia aktywności STOPPED, a potem STARTED (Iff94f, b/182284739)
  • Analizowanie domen precyzyjnych linków nie rozróżnia 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 wielkość liter nadal ma znaczenie. (#144, b/153829033)
  • Naprawiono błąd NullPointerException, który mógł występować, gdy miejsce docelowe ma kilka argumentów domyślnych, które nie mogą być puste, a przechodzisz do tego miejsca docelowego, zastępując tylko podzbiór tych argumentów. (aosp/1644827)

Aktualizacje zależności

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

Darowizna zewnętrzna

  • Dziękujemy za prośbę o włączenie funkcji bentrengrove, która wyłącza rozróżnianie wielkości liter przy parsowaniu domen precyzyjnych linków. (#144, b/153829033)

Wersja 2.3.4

Wersja 2.3.4

10 marca 2021 r.

androidx.navigation:navigation-*:2.3.4 został zwolniony. Wersja 2.3.4 zawiera te commity.

Nowe funkcje

  • Argumenty ReferenceType są teraz poprawnie analizowane, gdy są wysyłane jako część identyfikatora URI precyzyjnego linku. Ta funkcja obsługuje zarówno wartości całkowite, jak i wartości szesnastkowe z prefiksem 0x. (#127, b/179166693)
  • Funkcja android:defaultValue dla argumentu app:argType="float" obsługuje teraz wartości domyślne typu całkowitego, co pozwala używać argumentu android:defaultValue="0" zamiast wymaganego argumentu 0.0. (#117, b/173766247)

Poprawki błędów

  • Naprawiono problem z zawieszaniem się instalacji podczas korzystania z obsługi funkcji dynamicznych w Nawigacji. (Ib27a7, b/169636207)
  • Wywoływanie funkcji setViewModelStore lub setLifecycleOwner z tym samym obiektem, który został już ustawiony, będzie teraz bezczynne (Idf491, b/177825470)
  • Safe-Args dodaje teraz adnotacje tłumienia w odpowiednich metodach podczas używania języka Java. (I8fbc5, b/179463137)

Wkład zewnętrzny

  • Dziękujemy JvmName za prośbę o przejęcie kodu, aby zapewnić poprawne parsowanie argumentów ReferenceType wysyłanych jako część identyfikatora URI linku do treści. (#127, b/179166693)
  • Dziękujemy tatocaster za prośbę o przesłanie kodu, która umożliwiła dodanie do argumentu defaultValue wartości domyślnych typu całkowitego (int) w funkcji app:argType=”float”. (#117, b/173766247)

Wersja 2.3.3

Wersja 2.3.3

27 stycznia 2021 r.

androidx.navigation:navigation-*:2.3.3 został zwolniony. Wersja 2.3.3 zawiera te commity.

Poprawki błędów

  • Nie dochodzi już do awarii podczas wyświetlania NavBackStackEntry, zanim jego Lifecycle zostanie przeniesiony do CREATED. (Ie3ba3)
  • Rozwiązano regresję spowodowaną przez błąd b/171364502, w którym przejście do aktywności z wartością zasobu animacji 0 powodowało błąd ResourceNotFoundException. (I7aedb, b/176819931)

Wersja 2.3.2

Wersja 2.3.2

2 grudnia 2020 r.

androidx.navigation:navigation-*:2.3.2 został zwolniony. Wersja 2.3.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy regresję w NavigationUI, w której korzystanie z miejsca docelowego <activity>onNavDestinationSelected powodowało niemożność przejścia do Aktywności. (I22e34, b/171364502)
  • Rozwiązaliśmy problem, który powodował, że navigation-dynamic-features-fragment prowadziło do wielokrotnego przechodzenia do nowo zainstalowanego miejsca docelowego. (aosp/1486056, b/169636207)
  • Rozwiązaliśmy problem, który powodował, że podczas używania funkcji launchSingleTop do instancji funkcji OnDestinationChangedListener nie były wysyłane argumenty domyślne. (I2c5cb)
  • Rozwiązaliśmy problem, który powodował, że przejście do zagnieżdżonego grafu nawigacyjnego nie tworzyło nowego wystąpienia grafu na stosie. (Ifc831)
  • Rozwiązaliśmy problem polegający na tym, że użycie navigate()popUpTo, które powoduje usunięcie ostatniego miejsca docelowego w grafie nawigacji, nie powodowało natychmiastowego zniszczenia i usunięcia samego grafu nawigacji z bufora wstecznego. (I910a3)
  • Navigation SafeArgs używa teraz wersji 1.7.2 KotlinPoet, która obsługuje tryb jawnego interfejsu API w Kotlinie. (I918b5)
  • NavHostFragment.findNavController(Fragment) sprawdza teraz także widok głównego elementu dekoracyjnego DialogFragment oprócz dotychczasowych kontroli hierarchii Fragment i hierarchii widoku Fragment. Umożliwia to testowanie fragmentów dialogu, które używają funkcji Nawigacja z użyciem elementów FragmentScenarioNavigation.setViewNavController(). (I69e0d)

Wersja 2.3.1

Wersja 2.3.1

14 października 2020 r.

androidx.navigation:navigation-*:2.3.1 został zwolniony. Wersja 2.3.1 zawiera te komitowane zmiany.

Nowe funkcje

  • Domyślne zasoby animatora zostały dodane do interfejsu nawigacji i są zalecane zamiast domyślnych zasobów animacji. (b/167430145)
  • Opcja NavOptions zastępuje teraz metody hashcode i equals (b/161586466).
  • Nawigacja uwzględnia teraz bieżące miejsce docelowe w wyjątku IllegalArgumentException „No destination with ID”, co powinno ułatwić debugowanie programistom. (b/168311416)

Poprawki błędów

  • Safe Args nie będzie już zawijać linii z zwracaną wartością, nawet jeśli wygenerowana nazwa klasy argumentów jest dłuższa niż 100 znaków. (b/168584987)

Zmiany w zależnościach

  • Komponent navigation-ui zależy teraz od komponentu DrawerLayout 1.1.1, co zapewnia, że komponent NavigationUI może otworzyć panel nawet wtedy, gdy używasz komponentu 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.

androidx.navigation:navigation-*:2.3.0 został zwolniony. Wersja 2.3.0 zawiera te commity.

Najważniejsze zmiany od wersji 2.2.0

  • Integracja z Modułem funkcji: artefakty navigation-dynamic-features-runtimenavigation-dynamic-features-fragment umożliwiają nawigację do miejsc docelowych zdefiniowanych w Modułach funkcji. W razie potrzeby automatycznie obsługują one instalację tych modułów. Więcej informacji znajdziesz w artykule Przechodzenie między modułami funkcji.
  • Testowanie nawigacji: artefakt navigation-testing udostępnia element TestNavHostController, który pozwala ustawić bieżący cel i sprawdzać stos wsteczny po operacjach nawigacyjnych. Więcej informacji znajdziesz w artykule Testowanie nawigacji.
  • Zwracanie wyniku: obiekt NavBackStackEntry powiązany z każdą lokalizacją w nawigacji na stosie wstecznym umożliwia teraz dostęp do obiektu SavedStateHandle, który jest odpowiedni do przechowywania niewielkich ilości zapisanego stanu, które powinny być powiązane z konkretnym wpisem na stosie wstecznym. Więcej informacji znajdziesz w artykule Zwracanie wyniku do poprzedniego miejsca docelowego.
  • Obsługa NavigationUIOpenable: wszystkie wystąpienia DrawerLayoutNavigationUI zostały zastąpione bardziej uniwersalnym interfejsem Openable dodanym w CustomView 1.1.0 i wdrożonym przez DrawerLayoutDrawerLayout 1.1.0.
  • Obsługa akcji i typu MIME w precyzyjnych linkach: oprócz obsługiwanego wcześniej typu app:uri precyzyjne linki obsługują teraz także typy app:actionapp:mimeType. NavController obsługuje teraz nawigację za pomocą dowolnej kombinacji tych pól za pomocą nowej klasy NavDeepLinkRequest. Więcej informacji znajdziesz w artykule Nawigowanie za pomocą żądania NavDeepLinkRequest.

Znane problemy

  • Obsługa działań związanych z precyzyjnymi linkami i typów MIME nie jest jeszcze dostępna w Manifest Merger. Do czasu ukończenia tych prac wszystkie wygenerowane elementy <intent-filter> z elementu <nav-graph> w pliku manifestu nie będą zawierać typu mime w elementach <data> ani w elementach niestandardowych <action>. Musisz ręcznie dodać do pliku manifestu odpowiedni element <intent-filter>.

Wersja 2.3.0-rc01

10 czerwca 2020 r.

androidx.navigation:navigation-*:2.3.0-rc01 został zwolniony. Wersja 2.3.0-rc01 zawiera te commity.

Poprawki błędów

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

Wersja 2.3.0-beta01

20 maja 2020 r.

androidx.navigation:navigation-*:2.3.0-beta01 zostały opublikowane. Wersja 2.3.0-beta01 zawiera te commity.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że Lifecycle NavBackStackEntry nie był prawidłowo aktualizowany po zakończeniu procesu. (b/155218371)
  • instancje OnDestinationChangedListener zarejestrowane przed wywołaniem setGraph() są teraz prawidłowo wysyłane do przywróconego miejsca docelowego po zakończeniu działania procesu. (b/155218371)
  • Gdy używasz funkcji singleTop, funkcja NavBackStackEntry ma teraz prawidłowo aktualizowane argumenty, które są wysyłane do wszystkich wystąpień funkcji OnDestinationChangeListener. (b/156545508)

Aktualizacje zależności

Wersja 2.3.0-alpha06

29 kwietnia 2020 r.

androidx.navigation:navigation-*:2.3.0-alpha06 został zwolniony. (te commity zawiera wersja 2.3.0-alpha06)

Nowe funkcje

  • Precyzyjne linki zostały rozszerzone o obsługę app:action i app:mimeType, oprócz wcześniej dostępnej opcji app:uri. Kontroler nawigacji 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 rozszerzono obsługę Kotlin DSL w przypadku celów dynamicznej nawigacji. (b/148969800)

Poprawki błędów

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

Wersja 2.3.0-alpha05

15 kwietnia 2020 roku

androidx.navigation:navigation-*:2.3.0-alpha05 został zwolniony. Wersja 2.3.0-alpha05 zawiera te commity.

Nowe funkcje

  • W przypadku dynamicznych elementów uwzględnianych w grafie za pomocą funkcji <include-dynamic> nie musisz już podawać wartości app:graphPackage. Zamiast tego możesz dodać do niej sufiks moduleName, aby użyć domyślnej wartości.applicationId Jeśli chcesz dostosować graphPackage, możesz teraz użyć placeholdera ${applicationId}. (b/152696768)
  • Pakiet DSL Kotlina do korzystania z grafu nawigacji udostępnia teraz element defaultArguments Map do działań, co odzwierciedla możliwość ustawiania wartości domyślnych elementów <action> w plikach XML nawigacji. (b/150345605)

Poprawki błędów

  • Nawigacja 2.2.2: naprawiono błąd IllegalStateException podczas tworzenia precyzyjnego linku do punktu początkowego na wykresie, gdy w Aktywności masz wiele wystąpień NavHostFragment. (b/147378752)

Aktualizacje zależności

Wersja 2.3.0-alpha04

18 marca 2020 r.

androidx.navigation:navigation-*:2.3.0-alpha04 został zwolniony. Wersja 2.3.0-alpha04 zawiera te commity.

Nowe funkcje

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

Zmiany w interfejsie API

  • Klasa DynamicExtras nie używa już wzorca konstruktora i może być tworzona bezpośrednio. (aosp/1253671)
  • Konstruktor metody DynamicActivityNavigator przyjmuje teraz obiekt Context, a nie Activity. (aosp/1250252)

Poprawki błędów

  • NavigationUI nie ignoruje już pustych etykiet (np. miejsca docelowego z android:label=””) i teraz prawidłowo ustawia pusty ciąg znaków jako tytuł. (b/148679860)

Aktualizacje zależności

  • Elementy funkcji dynamicznych nawigacji są teraz zależne od Play Core 1.6.5. (b/149556401)

Wersja 2.3.0-alpha03

4 marca 2020 r.

androidx.navigation:navigation-*:2.3.0-alpha03 został zwolniony. Wersja 2.3.0-alpha03 zawiera te commity.

Zmiany w interfejsie API

  • Zamiast korzystać z konkretnej klasy DrawerLayout, AppBarConfiguration używa teraz interfejsu Openable wprowadzonego w CustomView 1.1.0-alpha02 (który DrawerLayout implementuje od wersji DrawerLayout 1.1.0-alpha04), co umożliwia korzystanie z niestandardowych implementacji Openable w komponencie NavigationUI. (b/129030452)

Poprawki błędów

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

Zmiany w zależnościach

  • Nawigacja nie jest już zależna od Core 1.2.0, a jej zależność od Core 1.1.0 została przywrócona. Dzięki temu nie trzeba będzie zmuszać deweloperów do przejścia na nowszą zależność, ponieważ Nawigacja nie jest zależna od żadnych nowych interfejsów API w Core 1.2.0.

Wersja 2.3.0-alpha02

19 lutego 2020 r.

androidx.navigation:navigation-*:2.3.0-alpha02 został zwolniony. Wersja 2.3.0-alpha02 zawiera te commity.

Nowe funkcje

  • Pole NavBackStackEntry umożliwia teraz dostęp do pola SavedStateHandle, które jest odpowiednie do przechowywania niewielkich ilości zapisanego stanu, który powinien być powiązany z określonym wpisem w steku wywołań. Przykładowy przypadek użycia znajdziesz w sekcji Zwracanie wyniku. (b/79672220)

Zmiany w interfejsie API

  • Dodano wygodne metody getCurrentBackStackEntry()getPreviousBackStackEntry(), aby ułatwić pobieranie NavBackStackEntry dla bieżącego i poprzedniego miejsca docelowego. (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 na własnym stosie zadań. (b/147456890)

Zmiany w zależnościach

Wersja 2.3.0-alpha01

5 lutego 2020 r.

androidx.navigation:navigation-*:2.3.0-alpha01 został zwolniony. Wersja 2.3.0-alpha01 zawiera te commity.

Nowe funkcje

  • Nowy artefakt navigation-testing udostępnia klasę TestNavHostController. Ta klasa stanowi alternatywę dla mocka NavController podczas testowania nawigacji i pozwala ustawić bieżący element docelowy oraz zweryfikować stos wsteczny po operacjach nawigacyjnych. (b/140884273)
  • Nowy element navigation-dynamic-features-fragment (oraz jego zależność navigation-dynamic-features-runtime) umożliwia uwzględnianie miejsc docelowych lub całych diagramów nawigacji (za pomocą elementu <include-dynamic>) z modułów funkcji, co zapewnia płynną instalację modułów funkcji na żądanie podczas przechodzenia do tych miejsc docelowych. Więcej informacji znajdziesz w artykule Przechodzenie między modułami funkcji. (b/132170186)

Poprawki błędów

  • W sekcji Nawigacja 2.2.1: precyzyjne linki bez parametrów zapytania są teraz prawidłowo ignorowane, zamiast dołączane do elementów końcowych {argument} lub niepasujących do precyzyjnego linku. (b/147447512)
  • W sekcji Nawigacja 2.2.1: reguły navigation-ui w ProGuard dotyczące DrawerArrowDrawable zostały zaktualizowane, aby nie wymagały android.enableJetifier=true. (b/147610424)
  • W sekcji Nawigacja 2.2.1: moduł navigation-common-ktx ma teraz unikalną nazwę pakietu pliku manifestu zamiast tej samej nazwy co moduł navigation-runtime-ktx. (aosp/1141947)

Aktualizacje zależności

Wersja 2.2.2

Wersja 2.2.2

15 kwietnia 2020 roku

androidx.navigation:navigation-*:2.2.2 zostały opublikowane. Wersja 2.2.2 zawiera te commity.

Poprawki błędów

  • Naprawiono błąd IllegalStateException występujący podczas tworzenia precyzyjnego linku do punktu docelowego na początku wykresu, gdy w aktywności masz wiele wystąpień NavHostFragment. (b/147378752)
  • NavigationUI nie ignoruje już pustych etykiet (np. miejsca docelowego z android:label=””) i teraz prawidłowo ustawia pusty ciąg znaków jako tytuł. Ta funkcja została wcześniej opublikowana w wersji Nawigacja 2.3.0-alpha04. (b/148679860)
  • Reguły navigation-common-ktx ProGuard zachowują teraz tylko używane klasy NavArgs, a nie wszystkie wystąpienia NavArgs. Ta funkcja została wcześniej opublikowana w wersji Nawigacja 2.3.0-alpha03. (b/150213558

Aktualizacje zależności

Wersja 2.2.1

Wersja 2.2.1

5 lutego 2020 r.

androidx.navigation:navigation-*:2.2.1 został zwolniony. Wersja 2.2.1 zawiera te zatwierdzenia

Poprawki błędów

  • Precyzyjne linki bez parametrów zapytania są teraz prawidłowo ignorowane, zamiast dołączania do elementów końcowych {argument} lub niepasowania do precyzyjnego linku. (b/147447512)
  • Reguły navigation-ui ProGuard dla DrawerArrowDrawable zostały zaktualizowane, aby nie wymagały android.enableJetifier=true. (b/147610424)
  • Moduł navigation-common-ktx ma teraz unikalną nazwę pakietu manifestu zamiast tej samej nazwy co moduł navigation-runtime-ktx. (aosp/1141947)

Aktualizacje zależności

Wersja 2.2.0

Wersja 2.2.0

22 stycznia 2020 r.

androidx.navigation:navigation-*:2.2.0 został zwolniony. Wersja 2.2.0 zawiera te zatwierdzenia:

Ważne zmiany od wersji 2.1.0

  • NavBackStackEntry: możesz teraz wywołać NavController.getBackStackEntry(), przekazując identyfikator miejsca docelowego lub grafu nawigacji w back stack. Zwrócony obiekt NavBackStackEntry zawiera obiekt LifecycleOwner sterowany przez funkcję Nawigacja, obiekt ViewModelStoreOwner (ten sam, który zwraca funkcja NavController.getViewModelStoreOwner()) oraz obiekt SavedStateRegistryOwner, a także argumenty użyte do uruchomienia tego miejsca docelowego.
  • Łączenie Lifecycle ViewModel z SavedState: SavedStateViewModelFactory jest teraz domyślną fabryką używaną podczas korzystania z by navGraphViewModels() lub konstruktora ViewModelProviderViewModelStoreOwner zwracanym przez NavController.getBackStackEntry() lub NavController.getViewModelStoreOwner().
  • Obsługa parametrów zapytań w precyzyjnych linkach: precyzyjne linki z parametrami zapytań obsługują teraz zapytania z przetasowanymi parametrami. Argumenty, które mają wartość domyślną lub mogą być puste, są teraz opcjonalne podczas dopasowywania precyzyjnych linków.
  • Ulepszona obsługa animacji: NavHostFragment korzysta teraz z FragmentContainerViewFragment 1.2.0, co rozwiązuje problemy z kolejnością animacji i z przesyłaniem do fragmentów wstawionych okien.

Wersja 2.2.0-rc04

18 grudnia 2019 r.

androidx.navigation:navigation-*:2.2.0-rc04 został zwolniony. Wersja 2.2.0-rc04 zawiera te zatwierdzenia:

Poprawki błędów

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

Wersja 2.2.0-rc03

4 grudnia 2019

androidx.navigation:navigation-*:2.2.0-rc03 został zwolniony. Wersja 2.2.0-rc03 zawiera te zatwierdzenia:

Poprawki błędów

  • Rozwiązano problem z analizowaniem linków głębokich podczas używania parametrów zapytania i argumentu jako ostatniej części ścieżki, który uniemożliwiał analizowanie więcej niż 1 znaku ostatniego argumentu ścieżki. (b/144554689)
  • Rozwiązaliśmy problem z analizowaniem precyzyjnych linków, w którym parametry opcjonalne otrzymywały wartość "@null" zamiast null. (b/141613546)
  • Funkcja NavHostFragment teraz prawidłowo przywraca wykres po zmianie konfiguracji, gdy jest używana z funkcją FragmentContainerView. (b/143752103)

Zmiany w zależnościach

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

Wersja 2.2.0-rc02

7 listopada 2019 r.

androidx.navigation:navigation-*:2.2.0-rc02 został zwolniony. Wersja 2.2.0-rc02 zawiera te zatwierdzenia:

Zmiany w zależnościach

  • Nawigacja zależy teraz od androidx.lifecycle 2.2.0-rc02.

Wersja 2.2.0-rc01

23 października 2019 r.

androidx.navigation:navigation-*:2.2.0-rc01 jest publikowany bez zmian od 2.2.0-beta01. Wersja 2.2.0-rc01 zawiera te zatwierdzenia:

Wersja 2.2.0-beta01

9 października 2019 r.

androidx.navigation:navigation-*:2.2.0-beta01 został zwolniony. Wersja 2.2.0-beta01 zawiera te commity:

Nowe funkcje

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

Zmiany w zachowaniu

  • Dodatkowe parametry zapytania są teraz ignorowane podczas dopasowywania precyzyjnych linków, a nie powodują niepowodzenia dopasowania. (b/141482822)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że argumenty na ścieżce precyzyjnego linku były ignorowane, jeśli były też określone parametry zapytania. (b/141505755)
  • Rozszerzenie Kotlina navArgs()Activity zawiera teraz lepszy komunikat o błędzie, gdy nie ma żadnych dodatków. (b/141408999)
  • Generowane 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 2 miejscami docelowymi najwyższego poziomu. (b/140848160)

Wersja 2.2.0-alpha03

18 września 2019 r.

androidx.navigation:navigation-*:2.2.0-alpha03 został zwolniony. Wersja 2.2.0-alpha03 zawiera te commity

Zmiany w zachowaniu

  • Zadzwonienie pod numer setViewModelStore() po wywołaniu setGraph powoduje teraz IllegalStateException. Wartość ta powinna być zawsze ustawiana przez NavHost w ramach początkowej konfiguracji, aby zapewnić spójne miejsce na dane dla wszystkich instancji NavBackStackEntry.ViewModel (aosp/1111821)

Poprawki błędów

  • Rozwiązano problem z ConcurrentModificationException podczas używania instancji ViewModel dołączonych do wielu różnych instancji ViewModelStore z ograniczonym zakresem w grafach nawigacji. (aosp/1112257)

Wersja 2.2.0-alpha02

5 września 2019 r.

androidx.navigation:navigation-*:2.2.0-alpha02 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Precyzyjne linki z parametrami zapytania obsługują teraz zapytania z przetasowanymi parametrami. Argumenty, które mają wartość domyślną lub mogą być puste, są teraz opcjonalne w przypadku dopasowywania precyzyjnych linków. (b/133273839)
  • Teraz możesz wywołać funkcję NavController.getBackStackEntry(), przekazując identyfikator miejsca docelowego lub grafu nawigacji w poprzednim stosie. Zwrócony obiekt NavBackStackEntry zawiera obiekt LifecycleOwner sterowany przez funkcję Nawigacja, obiekt ViewModelStoreOwner (ten sam, który zwraca funkcja NavController.getViewModelStoreOwner()) oraz obiekt 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ł niepowodzenie dodawania NavHostFragment do ViewPager2 z użyciem IllegalArgumentException. (b/133640271)
  • NavInflater nie wywołuje już niepotrzebnie funkcji getResourceName(), co przyspiesza inflację nawet o 40%. (b/139213740)

Wersja 2.2.0-alpha01

7 sierpnia 2019 r.

androidx.navigation:navigation-*:2.2.0-alpha01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • SavedStateViewModelFactory jest teraz domyślną fabryką używaną podczas wywoływania funkcji by navGraphViewModels() lub konstruktora ViewModelProvider z argumentem ViewModelStoreOwner zwracanym przez NavController.getViewModelStoreOwner(). (b/135716331)

Zmiany w interfejsie API

  • W sekcji Nawigacja 2.1.0-rc01: wycofany interfejs API getViewModelStore() w usługach NavController, wprowadzony w wersji 2.1.0-alpha02, został usunięty. (aosp/1091021)

Poprawki błędów

  • NavHostFragment używa teraz FragmentContainerView, co rozwiązuje problemy z kolejnością animacji i z przesyłaniem wstawionych okien do fragmentów. (b/137310379)

Wersja 2.1.0

Wersja 2.1.0

5 września 2019 r.

androidx.navigation:navigation-*:2.1.0 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Ważne zmiany od wersji 2.0.0

  • Zakres ViewModels ograniczony do grafu nawigacji: teraz możesz tworzyć widoki ViewModels, które są ograniczone do poziomu grafu nawigacji, za pomocą obiektu delegowanego by navGraphViewModels() dla użytkowników Kotlina korzystających z bibliotek -ktx lub za pomocą interfejsu API getViewModelStoreOwner() dodanego do NavController. Więcej informacji znajdziesz w artykule Udostępnianie danych związanych z interfejsem użytkownika między miejscami docelowymi.
  • Miejsca docelowe dialogu: możesz teraz tworzyć miejsca docelowe <dialog>, które będą wyświetlać DialogFragment, gdy navigate do nich przejdziesz. NavHostFragment domyślnie obsługuje miejsca docelowe dialogu. Więcej informacji znajdziesz w artykule Tworzenie strony docelowej z fragmentu dialogowego.
  • Nawigacja za pomocą adresu URI: możesz teraz navigate za pomocą Uri, który używa <deepLink> dodanego do miejsca docelowego, aby nawigować do niego. Więcej informacji znajdziesz w artykule Nawigowanie za pomocą Uri.
  • NavHostController: interfejsy API używane do tworzenia niestandardowych NavHost zostały przeniesione do NavHostController, co umożliwia implementacjom łączenie NavController z hostingiem LifecycleOwner, OnBackPressedDispatcherViewModelStore.

Wersja 2.1.0-rc01

7 sierpnia 2019 r.

androidx.navigation:navigation-*:2.1.0-rc01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

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

Wersja 2.1.0-beta02

19 lipca 2019 r.

androidx.navigation:*:2.1.0-beta02 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

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

Wersja 2.1.0-beta01

17 lipca 2019 r.

androidx.navigation:*:2.1.0-beta01 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • NavigationUI teraz animuje usuwanie przycisku W górę, gdy używasz setupWithNavController()Toolbar lub CollapsingToolbarLayout. (b/131403621)

Poprawki błędów

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

Wersja 2.1.0-alpha06

2 lipca 2019 r.

androidx.navigation:*:2.1.0-alpha06 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

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

Zmiany w interfejsie API

  • Interfejs API getViewModelStore() w usłudze NavController został wycofany na rzecz nowej metody getViewModelStoreOwner(), która zwraca obiekt ViewModelStoreOwner. (aosp/987010)
  • Wdrożenie miejsc docelowych okna pływającego, takich jak miejsca docelowe <dialog>, zostało uogólnione w interfejsie markera FloatingWindow, który jest teraz stosowany we wszystkich miejscach docelowych <dialog>. Metody NavigationUI służące do interakcji z górnym paskiem aplikacji ignorują teraz miejsca docelowe FloatingWindow. (b/133600763)

Zmiany w zachowaniu

  • Nawigacja jest teraz prawidłowo synchronizowana z tym, co widać na ekranie podczas korzystania z miejsca docelowego <dialog>. W rezultacie podczas nawigacji do miejsca docelowego, które nie jest miejscem docelowym dialogu ani aktywności, np. <fragment>, aplikacja Nawigacja automatycznie wyświetla miejsca docelowe <dialog>. (b/134089818)

Poprawki błędów

  • Nawigacja teraz tłumi animację, która występuje podczas odtwarzania aktywności podczas obsługi precyzyjnego linku, korygując błysk wizualny. (b/130362979)
  • Naprawiono błąd polegający na tym, że stos elementów wstecz w nawigacji był niezsynchronizowany podczas usuwania fragmentu, gdy dodawany był początkowy fragment. (b/133832218)

Wersja 2.1.0-alpha05

5 czerwca 2019 r.

androidx.navigation:*:2.1.0-alpha05 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Zmiany w interfejsie API

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

Poprawki błędów

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

Wersja 2.1.0-alpha04

16 maja 2019 r.

androidx.navigation:*:2.1.0-alpha04 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

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

Wersja 2.1.0-alpha03

7 maja 2019 r.

androidx.navigation:*:2.1.0-alpha03 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Znane problemy

  • Komponent NavHostFragment nadal przechwytuje przycisk Wstecz systemu, mimo użycia app:defaultNavHost="false" b/132077777

Nowe funkcje

  • Możesz teraz tworzyć <dialog>, które będą wyświetlać DialogFragment, gdy navigate do nich przejdziesz. NavHostFragment domyślnie obsługuje miejsca docelowe dialogów. b/80267254
  • Oprócz wywoływania navigate z identyfikatorem zasobu lub wystąpieniem NavDirections możesz teraz nawigować za pomocą Uri, który używa <deepLink> dodany do miejsca docelowego, aby nawigować do prawidłowego miejsca docelowego. b/110412864

Zmiany w zachowaniu

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

Zmiany w interfejsie API

  • Metoda createFragmentNavigator() klasy NavHostFragment została wycofana, a jej funkcjonalność została przeniesiona do nowej metody onCreateNavController(), aby wyraźniej wskazywać, że jest to właściwy punkt wejścia do dodawania niestandardowych obiektów Navigator podczas tworzenia podklas klasy NavHostFragment. b/122802849
  • Do metody NavDestination dodano metodę hasDeepLink(), która umożliwia sprawdzenie, czy dane Uri może obsłużyć to miejsce docelowe. W przypadku metody NavGraph można sprawdzić dowolne miejsce docelowe w grafie nawigacji. b/117437718

Poprawki błędów

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

Wersja 2.1.0-alpha02

3 kwietnia 2019 r.

androidx.navigation:*:2.1.0-alpha02 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Teraz możesz tworzyć modele ViewModel, które są ograniczone do poziomu grafu nawigacji za pomocą obiektu zastępczego usługi by navGraphViewModels() dla użytkowników Kotlina lub za pomocą interfejsu 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}" do ograniczania pakietu do własnego identyfikatora aplikacji. b/110975456

Poprawki błędów

  • Wartość android:name dla miejsc docelowych <activity> nie jest już analizowana w klasie w momencie inflacji, co zapobiega wyjątkom ClassNotFoundExceptions podczas korzystania z funkcji dynamicznych. b/124538597

Wersja 2.1.0-alpha01

19 marca 2019 r.

To pierwsza wersja alfa Nawigacji 2.1.0.

Zmiany w zależnościach

  • Nawigacja zależy teraz od androidx.core:core:1.0.1 i androidx.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ą metodę Navigation.createNavigateOnClickListener(NavDirections) jako alternatywę dla tworzenia listenera kliknięć za pomocą identyfikatora zasobu i paczki. b/127631752
  • Właściwość FragmentNavigator.instantiateFragment została wycofana. Domyślna implementacja używa teraz funkcji FragmentFactory do tworzenia instancji fragmentów. b/119054429

Poprawki błędów

  • Nawigacja nie wysyła już wartości null do funkcji Bundle, gdy do miejsca docelowego są dołączone argumenty. Rozwiązano w ten sposób problem z użyciem funkcji 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 została opublikowana bez zmian w porównaniu z wersją 2.0.0-rc02.

Wersja 2.0.0-rc02

6 marca 2019 r.

Navigation 2.0.0-rc02 udostępnia nowe elementy z identyfikatorem grupy androidx.navigationoraz zmienia ich zależności na ich odpowiedniki w AndroidX.

Zalecenia 2.0.0-rc02 są identyczne z zaleceniami 1.0.0-rc02, a aby przejść z wersji 1.0.0-rc02, nie musisz wprowadzać żadnych zmian w kodzie, poza aktualizacją zależności do nowych wersji.

Aby korzystać z wersji 2.X biblioteki Navigation, musisz przeprowadzić migrację projektu na AndroidX. Wersja stabilna nawigacji 1.0 będzie ostatnią wersją korzystającą z zależności biblioteki obsługi. Cała przyszła praca nad wersją 1.0 będzie oparta na AndroidX i będzie opierać się na stabilnej wersji 2.0.

Zależności sprzed AndroidX

W przypadku wersji Nawigacji z Androida X uwzględnij te zależności:

dependencies {
    def nav_version = "1.0.0"

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

W przypadku Safe args dodaj ten ścieżka classpath w pliku top level build.gradle.

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

Wersja 1.0.0

Wersja 1.0.0

14 marca 2019 r.

Nawigacja 1.0.0 została opublikowana bez zmian w porównaniu z wersją 1.0.0-rc02.

Wersja 1.0.0-rc02

26 lutego 2019 r.

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

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował ignorowanie wartości popBackStack(), jeśli graf główny nie miał identyfikatora b/126251695
  • navigateUp() obsługuje teraz prawidłowo przechodzenie do zadania w aplikacji po wywołaniu po obsłudze precyzyjnego linku bez FLAG_ACTIVITY_NEW_TASK b/126082008
  • Rozwiązaliśmy problem polegający na tym, że ActivityNavigator.applyPopAnimationsToPendingTransition nie stosował prawidłowej animacji zakończenia okna wyskakującego b/126237567
  • Kod Kotlina wygenerowany przez Safe Args jest teraz odpowiednio zabezpieczany przed ucieczką słów kluczowych Kotlina, takich jak infun, w nazwie pakietu powiązanego z klasą R. b/126020455

Wersja 1.0.0-rc01

21 lutego 2019 r.

To jest wersja kandydująca do publikacji stabilnej wersji 1.0.0 nawigacji. Ta wersja zawiera jedną poprawkę błędu.

Poprawki błędów

  • Rozwiązaliśmy problem z użyciem operacji nawigacji Fragments i singleTop (b/124294805).

Wersja 1.0.0-beta02

12 lutego 2019 r.

Ta wersja zawiera kilka drobnych ulepszeń i ważne poprawki błędów.

Nowe funkcje

  • Możesz teraz używać argumentu 0 jako argumentu android:defaultValue w przypadku argumentu reference. b/124248602

Zmiany w zachowaniu

  • Dopasowania precyzyjnych linków są teraz traktowane priorytetowo w stosunku do precyzyjnych linków z dopasowaniem .* lub argumentów. b/123969518

Poprawki błędów

  • Funkcje popBackStack()navigateUp zwracają teraz prawidłowo wartość false, gdy usuwają ostatni element z bieżącego stosu. Rozwiązano w ten sposób regresję wprowadzoną w wersji 1.0.0-beta01. b/123933201
  • Nawigacja teraz prawidłowo ustawia ClassLoader podczas przywracania stanu zapisanego w przypadku instancji, co pozwala uniknąć problemów podczas używania niestandardowych klas w przypadku zapisanego stanu Navigator lub w argumentach wysyłanych do NavDestination. b/123893858
  • Generowane przez Safe Args klasy NavArgs nie powodują już awarii podczas przywracania argumentu Parcelable[] ze stanu zapisanej instancji. b/123963545
  • Funkcja Safe Args teraz prawidłowo usuwa niepotrzebne wygenerowane klasy Kotlin. b/124120883

Wersja 1.0.0-beta01

4 lutego 2019 r.

To pierwsza wersja beta nawigacji. Od teraz interfejs API nawigacji powinien być stabilny do czasu wydania kolejnej wersji, chyba że wystąpi krytyczny problem. Ta wersja zawiera poprawki błędów i zmiany działania.

Zmiany w zachowaniu

  • Nawigacja zapewnia teraz, że wartości domyślne argumentów są traktowane identycznie w czasie wykonywania i za pomocą Safe Args. W konsekwencji tylko argumenty z wartością domyślną app:argType="reference" mogą wskazywać na inny zasób (np. @color/colorPrimary). Próba użycia wartości domyślnej odwołania z innym app:argType spowoduje wyjątek podczas analizowania pliku XML nawigacji. b/123551990
  • Safe Args zależy teraz od wtyczki Androida do obsługi Gradle w wersji 3.3.0 aosp/888413
  • Safe Args zależy teraz od Kotlina 1.3.20 aosp/888414

Poprawki błędów

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

Wersja 1.0.0-alpha11

23 stycznia 2019 r.

To jest wersja 1.0.0-alpha10 z poprawką, która rozwiązuje problem z Safe Args.

Poprawki błędów

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

Wersja 1.0.0-alpha10

23 stycznia 2019 r.

Znane problemy

  • Safe Args nie może zaimportować klasy Directions powiązanej z działaniami globalnymi. b/123307342

Ta wersja zawiera zmiany API powodujące niezgodność. Zapoznaj się z sekcją Zmiany powodujące niezgodność.

Nowe funkcje

  • Użytkownicy Kotlina mogą teraz używać obiektu zastępczego by navArgs(), aby w funkcji Activity lub Fragment pobrać odwołanie do klasy NavArgs wygenerowanej przez Safe Args. b/122603367
  • Safe Args umożliwia teraz generowanie kodu Kotlina przez zastosowanie wtyczki androidx.navigation.safeargs.kotlin. Kod Kotlina jest tworzony specjalnie dla modułów tylko w Kotlinie, przy użyciu argumentów domyślnych i klas niezmiennych zamiast wzorca konstruktora, który jest nadal dostępny za pomocą poprzedniego wtyczki androidx.navigation.safeargs. b/110263087

Zmiany w zachowaniu

  • Dopasowywanie precyzyjnych linków jest teraz preferowane w przypadku precyzyjnego linku, który ma najwięcej pasujących argumentów.b/118393029
  • Wywołanie setGraph() w komponencie NavController spowoduje zresetowanie stosu. b/111450672
  • Nieznane precyzyjne linki nie powodują już błędu IllegalStateException, ale są ignorowane. Rozwiązano problemy z zagnieżdżonymi lub wielokrotnymi NavHostFragment. b/121340440

Zmiany powodujące niezgodność

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

Poprawki błędów

  • NavDeepLinkBuilder obsługuje teraz prawidłowo wiele jednoczesnych PendingIntent do tego samego miejsca docelowego, używając przekazanych przez Ciebie argumentów do określenia unikalności. b/120042732
  • Fragment NavController poprawnie obsługuje teraz operacje popBackStack(), gdy używasz zagnieżdżonego fragmentu NavHostFragment lub innych podrzędnych fragmentów z elementem wstecznym.b/122770335
  • NavigationUI teraz poprawnie ustawia opis treści przycisku W górę. b/120395362
  • Klasy Directions wygenerowane przez Safe Args obsługują teraz poprawnie działania globalne, które mają ten sam identyfikator co działanie na miejscu docelowym. b/122962504
  • Generowane przez Safe Args klasy NavDirections mają teraz prawidłowo wartości równe hashCode(), gdy equals() zwraca wartość true. b/123043662
  • FragmentNavigator wyświetla teraz lepszy komunikat o błędzie, jeśli spróbujesz dodać niestandardową wartość FragmentTransactions do właściwości NavHostFragment w elementach FragmentManager. Należy zawsze używać getChildFragmentManager(). b/112927148

Wersja 1.0.0-alpha09

18 grudnia 2018 r.

Ta wersja zawiera zmiany API powodujące niezgodność. Zapoznaj się z sekcją Zmiany powodujące niezgodność.

Postanowiliśmy nie kontynuować rozwoju artefaktu android.arch.navigation:navigation-testing. Chociaż ta metoda sprawdza się w przypadku testów wewnętrznych aplikacji NavController, zdecydowanie zalecamy stosowanie alternatywnych strategii testowania, takich jak symulowanie wystąpienia NavController, aby sprawdzić, czy wywołania navigate() są prawidłowe. To podejście jest szczegółowo omawiane w prezentacji dotyczącej pojedynczej aktywności na konferencji AndroidDevSummit 2018. Będziemy też pracować nad dodatkową dokumentacją dotyczącą testowania z użyciem funkcji Nawigacja.

Nowe funkcje

  • MenuItemmenuCategory="secondary" nie będą już powodować wyświetlania stosu podczas korzystania z metod NavigationUI. b/120104424
  • AppBarConfiguration umożliwia teraz ustawienie instancji OnNavigateUpListener, która zostanie wywołana, gdy funkcja navController.navigateUp() zwróci wartość false. b/79993862 b/120690961

Zmiany powodujące niezgodność

  • Gdy używasz <argument>argType="reference", funkcja Nawigacja nie analizuje już odwołania, ale podaje sam identyfikator zasobu.b/111736515
  • onNavDestinationSelected() teraz domyślnie wraca do punktu docelowego na początku wykresu nawigacyjnego, co zapewnia spójność z metodami setup. Dodaj menuCategory="secondary" do MenuItem, aby uniknąć wyrzucania stosu. aosp/852869
  • Metody fromBundle() wygenerowanych klas Args przyjmują teraz niepustą wartość Bundle zamiast zmiennej Bundle, która może przyjmować wartość pustą. aosp/845616

Poprawki błędów

  • Argumenty są teraz prawidłowo parsowane z precyzyjnych linków jako prawidłowe argTypezamiast zawsze jako ciągi znaków.b/110273284
  • Nawigacja teraz prawidłowo eksportuje zasoby publiczne b/121059552
  • Safe Args jest teraz zgodny z Android Gradle Plugin 3.4 Canary 4 lub nowszą wersją b/119662045

Wersja 1.0.0-alpha08

6 grudnia 2018 r.

Ta wersja zawiera zmiany API powodujące niezgodność. Zapoznaj się z sekcją Zmiany powodujące niezgodność.

Nowe funkcje

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

Zmiany powodujące niezgodność

  • Nazwa OnNavigatedListener została zmieniona na OnDestinationChangedListener b/118670572
  • Funkcja OnDestinationChangedListener przekazuje teraz również argument Bundle aosp/837142
  • Atrybuty app:clearTask i app:launchDocument oraz powiązane z nimi metody zostały usunięte. Użyj app:popUpTo w końcu grafu, aby usunąć wszystkie miejsca docelowe ze stosu. b/119628354
  • ActivityNavigator.Extras używa teraz wzorca Builder i dodaje możliwość ustawiania 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, takich jak NavOptions, NavInflater, NavDeepLinkBuilderAppBarConfiguration, zostało oznaczonych jako final.aosp/835681
  • Usunięto nieużywaną metodę NavHostFragment.setGraph() aosp/835684
  • Metoda NavigationUI.navigateUp(DrawerLayout, NavController), która została wycofana, została usunięta. aosp/835684
  • Tworzenie fragmentów zostało przeniesione do FragmentNavigator, dzięki czemu łatwiej jest delegować tworzenie fragmentów 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 się. aosp/830660
  • NavDestination.navigate() został(a) usunięty(a). Zadzwoń pod numer navigate() z numeru Navigator. aosp/830663
  • Znacząca refaktoryzacja funkcji Navigator, która eliminuje konieczność korzystania z funkcji OnNavigatorNavigatedListener i zamiast tego pozwala funkcji navigate zwracać NavDestination, do którego nastąpiło przejście.
  • instancje Navigator nie mogą już wysyłać zdarzeń pop do NavController. Rozważ użycie OnBackPressedCallback do przechwytywania naciśnięć przycisku Wstecz i wywołania funkcji navController.popBackStack(). aosp/833716

Poprawki błędów

  • Funkcja popUpTo działa teraz konsekwentnie, gdy miejsce docelowe to element <navigation> b/116831650
  • Naprawiliśmy kilka błędów, które powodowały IllegalArgumentException podczas używania zagnieżdżonych wykresów b/118713731 b/113611083 b/113346925 b/113305559
  • Atrybut dataPattern miejsc docelowych <activity> będzie teraz wypełniać argumenty z argumentów innych niż ciąg znaków, wywołując funkcję toString(). b/120161365

Safe Args

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

Wersja 1.0.0-alpha07

29 października 2018 r.

Nowe funkcje

  • Nowa klasa AppBarConfiguration umożliwia dostosowanie miejsc docelowych, które są uważane za miejsca docelowe najwyższego poziomu. Więcej informacji znajdziesz w zaktualizowanej dokumentacji. b/117333663
  • Teraz możesz przekazywać argumenty do punktu początkowego grafu b/110300470
  • Precyzyjne linki obsługują teraz schematy niestandardowe z kropkami, myślnikami i znakami plusa.b/112806402

Zmiany powodujące niezgodność

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

Poprawki błędów

  • Precyzyjne linki poprawnie analizują teraz parametry zapytań.b/110057514
  • Miejsca docelowe aktywności teraz prawidłowo stosują wszystkie animacje wejścia i wyjścia. b/117145284
  • Naprawiono awarię występującą po zmianach konfiguracji podczas korzystania z niestandardowych nawigatorów. b/110763345

Safe Args

  • Argumenty bezpieczne mają teraz naprawioną zależność od wtyczki Androida do obsługi Gradle 3.2.1. b/113167627
  • Wskazania można teraz generować dla klas wewnętrznych.b/117407555
  • Rozwiązanie problemu z generowaniem tras na liście <include>. b/116542123

Wersja 1.0.0-alpha06

20 września 2018 r.

Nowe funkcje

Zmiany w interfejsie API

  • Zmiany wprowadzające: metoda Navigatora navigate() przyjmuje teraz parametr Navigator.Extras.
  • Metoda getGraph() kontrolera nawigacji jest teraz NonNull b/112243286

Poprawki błędów

  • NavigationUI.setupWithNavController() nie powoduje już wycieku widoków, jeśli jest używany z widokami z pojedynczych miejsc docelowych b/111961977
  • Navigator onSaveState() jest teraz wywoływany tylko raz b/112627079

Safe Args

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

Wersja 1.0.0-alpha05

10 sierpnia 2018 r.

Poprawki błędów

  • Naprawiono błąd powodujący nieprawidłowe działanie stosu. b/111907708
  • Naprawiono błąd w equals() klasy wygenerowanych argumentów. b/111450897
  • Naprawić błąd kompilacji w Safe Args (b/109409713).
  • Naprawić konwersję z identyfikatorów zasobów na nazwy w języku Java b/111602491
  • Poprawiono komunikaty o błędach dotyczące możliwości wystąpienia wartości null w pluginie Safe Args.
  • Dodaj brakujące adnotacje dotyczące możliwości wystąpienia wartości null.

Wersja 1.0.0-alpha04

19 lipca 2018 r.

Nawigacja 1.0.0-alpha04 i powiązana wtyczka Safe Args do Gradle zawierają wiele zmian w interfejsie API, zmian zachowania i poprawek błędów.

Zmiany w interfejsie API i zachowaniu

  • Element NavHostFragment zawsze ustawia bieżący element jako główny element nawigacji, co zapewnia, że podrzędne elementy menedżera są usuwane przed usunięciem zewnętrznego elementu NavController b/111345778

Safe Args

  • Zmiany powodujące niezgodność: app:type zostało zmienione 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 argumentów potwierdzają teraz, że atrybuty NonNull nie są puste b/111451769
  • Do klas generowanych przez NavDirections i Args dodano dodatkowe adnotacje NonNull b/111455455 b/111455456

Poprawki błędów

  • Rozwiązaliśmy problem z przyciskiem powrotu systemu po kliknięciu precyzyjnego linku do fragmentu docelowego b/111515685

Wersja 1.0.0-alpha03

12 lipca 2018 r.

Nawigacja 1.0.0-alpha03 i powiązana wtyczka Safe Args do Gradle zawierają wiele zmian w interfejsie API, zmian zachowania i poprawek błędów.

Zmiany w interfejsie API i zachowaniu

  • Dodano metodę NavigationUI.setupWithNavController dla paska narzędzi b/109868820
  • Dodano metodę NavigationUI.setupWithNavController dla CollapsingToolbarLayout b/110887183
  • Funkcja popBackStack() zwraca teraz wartość false, gdy stos wstecz jest pusty lub podany identyfikator miejsca docelowego nie znajduje się w stosie wstecz b/110893637
  • FragmentNavigator ignoruje teraz operacje nawigacji po zapisaniu stanu przez FragmentManagera, co pozwala uniknąć wyjątków „Nie można wykonać tej czynności po wywołaniu onSaveInstanceState” b/110987825

Safe Args

  • Zmiany w przypadku niezgodności: znaki niealfanumeryczne w nazwach działań i argumentów zostaną zastąpione wielkimi literami w odpowiednich nazwach metod NavDirections.
    • np.DemoController.index zmieni się na setDemoControllerIndex b/79995048.
    • Przykład: action_show_settings stanie się actionShowSettings b/79642240.
  • Zmiany wprowadzające: argumenty są teraz domyślnie traktowane jako niepusty. Aby umożliwić stosowanie wartości null w przypadku ciągów znaków i argumentów parcelowalnych, dodaj app:nullable="true" b/79642307.
  • Możesz teraz używać app:type="long" z wartościami domyślnymi w formie „123L” b/79563966
  • Argumenty parcelable są teraz obsługiwane przy użyciu pełnej nazwy klasy dla app:type. Jedyną obsługiwaną wartością domyślną jest "@null" b/79563966
  • Klasy argumentów implementują teraz equals() i hashCode() b/79642246
  • Wtyczkę Safe Args można teraz zastosować do projektów bibliotek b/80036553
  • Wtyczka Safe Args może być teraz stosowana w projektach funkcji b/110011752

Poprawki błędów

  • Rozwiązano problemy z przechodzeniem do metod cyklu życia fragmentu b/109916080
  • Rozwiązaliśmy problemy z wielokrotnym przechodzeniem między zagnieżdżonymi wykresami b/110178671
  • Rozwiązaliśmy problemy z użyciem elementu setPopUpTo w przypadku pierwszego miejsca docelowego na wykresie (błąd b/109909461).
  • Rozwiązaliśmy problem, który powodował, że wszystkie wartości app:defaultValue były przekazywane jako ciągi znaków. b/110710788
  • aapt2 w pakiecie z wtyczką Android Gradle Plugin 3.2 Beta 01 dodaje teraz reguły zachowania dla każdego atrybutu android:name w plikach XML nawigacji (b/79874119).
  • Naprawiono wyciek pamięci podczas zastępowania domyślnego FragmentNavigatora b/110900142

Wersja 1.0.0-alpha02

7 czerwca 2018 r.

Zmiany w zachowaniu

  • Użytkownik FragmentNavigator używa teraz setReorderingAllowed(true). b/109826220

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

Poprawki błędów

  • Naprawiono błąd IllegalStateException występujący podczas wywoływania metody navigate z metod cyklu życia Fragment. b/79632233

  • Nawigacja zależy teraz od biblioteki pomocy 27.1.1, aby naprawić migotanie podczas korzystania z animacji. b/80160903

  • Naprawiono błąd IllegalArgumentException występujący podczas używania parametru defaultNavHost="true" jako fragmentu podrzędnego. b/79656847

  • Naprawiono błąd StackOverflowError występujący podczas korzystania z funkcji NavDeepLinkBuilder. b/109653065

  • Rozwiązano błąd IllegalArgumentException występujący podczas przechodzenia z powrotem 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 poprawny syntetyczny stos z powrotem dla zagnieżdżonych wykresów. b/79734195

  • NavigationUI będzie teraz wyróżniać odpowiedni element, gdy użyjesz zagnieżdżonego wykresu jako MenuItem. b/109675998

Zmiany w interfejsie API

  • Atrybut clearTask działań i powiązanego z nimi interfejsu API w NavOptions został wycofany. b/80338878

  • Atrybut launchDocument działań i powiązany z nimi interfejs API w NavOptions zostały wycofane. b/109806636

Wersja 1.0.0-alpha01

8 maja 2018 r.

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