Nawigacja
Nawigacja to platforma do poruszania się między „miejscami docelowymi” w aplikacji na Androida, która zapewnia spójny interfejs API niezależnie od tego, czy miejsca docelowe są zaimplementowane jako fragmenty, działania czy inne komponenty.
Najnowsza aktualizacja Wersja stabilna Kandydat do wydania Wersja Beta Wydanie alfa
26 czerwca 2024 r. 2.7.7 - 2.8.0-beta04 -

Deklarowanie zależności

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

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

Odlotowy

dependencies {
  def nav_version = "2.7.7"

  // Java language implementation
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Kotlin
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

  // Feature module Support
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

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

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

Kotlin

dependencies {
  val nav_version = "2.7.7"

  // Java language implementation
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Kotlin
  implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
  implementation("androidx.navigation:navigation-ui-ktx:$nav_version")

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

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

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

Safe Args

Aby dodać bezpieczne argumenty do projektu, umieść w pliku build.gradle najwyższego poziomu ten parametr classpath:

Odlotowy

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

Kotlin

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

Musisz też zastosować jedną z dwóch dostępnych wtyczek.

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

Odlotowy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

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

Odlotowy

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

Kotlin

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

Musisz mieć android.useAndroidX=true w pliku gradle.properties zgodnie z instrukcjami migracji do AndroidaX.

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

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

Opinia

Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli odkryjesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj istniejące problemy w tej bibliotece. Możesz oddać swój głos do istniejącego problemu, klikając przycisk gwiazdki.

Tworzenie nowego numeru

Więcej informacji znajdziesz w dokumentacji narzędzia do śledzenia problemów.

Wersja 2.8

Wersja 2.8.0-beta04

26 czerwca 2024 r.

Usługa androidx.navigation:navigation-*:2.8.0-beta04 została zwolniona. Wersja 2.8.0-beta04 zawiera te zatwierdzenia.

Poprawki błędów

  • Nawigacja obsługuje teraz nawigację z pustymi ciągami znaków w argumentach ścieżki. (Ic5dbd, b/339481310)
  • Popraw komunikat o błędzie dotyczący niestandardowych serializerów zadeklarowanych bezpośrednio w polach klasy przez @Serializable(with =...), aby wyjaśnić, że obecnie jest to nieobsługiwana funkcja. (I052b0, b/341319151)
  • Testowy interfejs API SavedStateHandleFactory może być teraz używany w testach niedotyczących Androida, ale będzie wymagać Robolectric do obsługi analizy argumentów za pomocą pakietów. (I76cdc, b/340966212)
  • Rozwiązaliśmy problem powodujący awarię, która występowała podczas przywracania stanu przy wznawianiu aplikacji po śmierci procesu w przypadku korzystania z nawigacji obsługującej pisanie w narzędziu Compose. (Ia8f38, b/341801005)
  • Naprawiono błąd w funkcji tworzenia nawigacji, który powodował, że po anulowaniu gestu przewidywania gestu cofania użytkownik NavBackStackEntry wracał i nigdy nie wracał do RESUMEDstanu cyklu życia. Dzięki temu powracające miejsce docelowe prawidłowo animuje się z powrotem, a nie wskoczy na miejsce po zwinięciu. (I97a0c, b/346608857)
  • Gdy korzystasz z funkcji przewidywania wstecz w funkcji tworzenia nawigacji, miejsce docelowe ma teraz odpowiednią animację w kolejności nakładania się na niego, a nad nim jest prawidłowo animowane. (I2077b, b/345993681)

Wersja 2.8.0-beta03

12 czerwca 2024 r.

Usługa androidx.navigation:navigation-*:2.8.0-beta03 została zwolniona. Wersja 2.8.0-beta03 zawiera te zatwierdzenia.

Zmiany interfejsu API

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

Poprawki błędów

  • Dodaliśmy dokumentację dotyczącą NavType.serializeAsValue i serializeAsValues, by podkreślić, że ostateczne dane wyjściowe powinny być zakodowane przy użyciu identyfikatora URI. (Ida6bd, b/344943214)
  • Naprawiono awarię, która występowała podczas wywoływania funkcji toRoute<T> z pustym argumentem CollectionNavType. Podczas poruszania się z wartością CollectionNavType o wartości null argumentem wyjściowym będzie wartość domyślna zadeklarowana w klasie Serializable lub wartość zwracana emptyCollection(), jeśli nie ma wartości domyślnej. (I84158, Id630f, b/342672856)

Wersja 2.8.0-beta02

29 maja 2024 r.

Usługa androidx.navigation:navigation-*:2.8.0-beta02 została zwolniona. Wersja 2.8.0-beta02 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono ClassCastExceptionawarię, która występowała podczas używania NavBackStackEntry.toRoute z niestandardowym NavType z wartością null. (I1c29b, b/342239473)
  • Rozwiązaliśmy problemy z odtwarzaniem wstecznego stanu stosu Nawigacji, które występowały podczas próby przywrócenia wpisu stosu, który jest nieosiągalny za pomocą identyfikatora z bieżącego miejsca docelowego. Ponieważ trasy są zależne od identyfikatorów, zmiana dotyczyła również miejsc docelowych utworzonych z wykorzystaniem tras. Rozwiązano też awarię spowodowaną wywołaniem funkcji clearBackStack() z tym samym problemem. (I423c3, b/339908057)

Wersja 2.8.0-beta01

14 maja 2024 r.

Usługa androidx.navigation:navigation-*:2.8.0-beta01 została zwolniona. Wersja 2.8.0-beta01 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Funkcja SavedStateHandle.toRoute() przyjmuje teraz parametr typeMap dla typów argumentów niestandardowych. (IE39fb, b/339026523)
  • W programie navigation-testing dodano testowy interfejs API w celu utworzenia obiektu SavedStateHandle z obiektu Kotlin z możliwością serializacji. (Id4867, b/339080702)

Poprawki błędów

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

Wersja 2.8.0-alpha08

1 maja 2024 r.

Usługa androidx.navigation:navigation-*:2.8.0-alpha08 została zwolniona. Wersja 2.8.0-alfa08 zawiera te zatwierdzenia.

Bezpieczne argumenty w funkcji Navigation Compose

Ta funkcja wykorzystuje serializację Kotlin, aby umożliwić definiowanie miejsc docelowych na wykresie nawigacyjnym za pomocą obiektów i klas danych umożliwiających bezpieczne typy:

  // 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( 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 Nawigacja i Bezpieczeństwo typów.

Nowe funkcje

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

Wersja 2.8.0-alpha07

17 kwietnia 2024 r.

Usługa androidx.navigation:navigation-*:2.8.0-alpha07 została zwolniona. Wersja 2.8.0-alfa07 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodaje nowy artefakt navigation-fragment-compose zawierający 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 i jednoznaczna nazwa jest używana jako atrybut android:name w każdym miejscu docelowym. Podczas przechodzenia do jednego z tych miejsc tworzony jest fragment zawierający treści kompozycyjne. (I0ef2e, b/265480755)

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

Zmiany interfejsu API

  • Nadal obsługiwane są bezpieczne argumenty w Navigation Compose przy użyciu metody opartej na serializacji Kotlin. Działanie tych interfejsów API nie zostało ukończone i są oznaczone adnotacją ExperimentalSafeArgsApi. Ta adnotacja zostanie usunięta w kolejnej wersji, gdy cała powierzchnia interfejsu API będzie gotowa. (Iefd95, I409c8, I5b5ac, I7e753, I960f8, I3eabd, I8ed5a, Ied2c9, I24}d15}, I24}I9b73 I24}I9b73

Wersja 2.8.0-alpha06

3 kwietnia 2024 r.

Usługa androidx.navigation:navigation-*:2.8.0-alpha06 została zwolniona. Wersja 2.8.0-alfa06 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Rozpoczęła się obsługa bezpiecznych argumentów w Navigation Compose z użyciem metody opartej na serializacji Kotlin. Działanie tych interfejsów API nie zostało ukończone i są oznaczone adnotacją ExperimentalSafeArgsApi. Ta adnotacja zostanie usunięta w kolejnej wersji, gdy cała powierzchnia interfejsu API będzie gotowa. (I644e7, I98896, I2a1c5, I43a51, I836a1, Ic5eec, I39407, I24e41, I24e41, cb15} cb15} C5}

Poprawki błędów

  • W usłudze NavHost jako domyślny argument content wyrównanie jest teraz używany Alignment.TopStart. Nadaje to wartość domyślną dla AnimatedContent i eliminuje niektóre przypadki nieoczekiwanej skali od środka. (I09e72, b/330111602)
  • Gdy podczas korzystania z funkcji tworzenia nawigacji zamiast szybkiego cofania się przesuwasz niestandardowe przejście, NavHost może teraz prawidłowo wykonać przejście niestandardowe. (I99017, b/327292110)

Wersja 2.8.0-alpha05

20 marca 2024 r.

Usługa androidx.navigation:navigation-*:2.8.0-alpha05 została zwolniona. Wersja 2.8.0-alfa05 zawiera te zatwierdzenia.

Nowe funkcje

  • Możesz teraz przekazywać argumenty do funkcji startDestination urządzenia NavGraph bezpośrednio na trasie startDestination, bez użycia funkcji defaultValue. Dotyczy to również zagnieżdżonych typów NavGraph startDestinations. (I0e0b5, b/109505019, b/188693139)

Zmiany interfejsu API

  • Dodano nową abstrakcyjną klasę CollectionNavType<T>, podklasę klasy NavType<T> dla argumentów opartych na zbiorach, takich jak lista, tablice czy mapy. (Ic6d63, b/188693139)
  • Wszystkie domyślne tablice NavType (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType i StringArrayType) są teraz typu CollectionNavType (Idcf79, b/188693139)
  • NavType udostępnia teraz nowy otwarty interfejs API valueEquals, który określa, czy 2 wartości tego samego typu są sobie równe. (I6cb97, b/327229511)

Poprawki błędów

  • Parametry zapytania w precyzyjnych linkach dopuszczają teraz wartości w postaci nawiasów klamrowych wokół nazwy argumentu (np. {argName}) jako prawidłowe wartości w NavTypes opartych na ciągach znaków. Rozwiązuje to problem, który powodował, że taka wartość była uznawana za nieprawidłową (lub braku wartości) dla wszystkich typów. (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

Usługa androidx.navigation:navigation-*:2.8.0-alpha04 została zwolniona. Wersja 2.8.0-alfa04 zawiera te zatwierdzenia.

Nowe funkcje

  • Możesz teraz określić SizeTranform dla przejść w narzędziu Navigation Compose, definiując je jako część inicjowania funkcji composable i/lub navigation. (I91062, b/296912651)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że funkcja NavHost w nawigacji w tworzeniu wiadomości nie wyświetlała prawidłowo przejścia, gdy użytkownik korzystał z Wstecz bez użycia gestu. (Iceeae, b/325998468)

Wersja 2.8.0-alfa03

21 lutego 2024 r.

Usługa androidx.navigation:navigation-*:2.8.0-alpha03 została zwolniona. Wersja 2.8.0-alfa03 zawiera te zatwierdzenia.

Zmiany interfejsu API

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

Poprawki błędów

  • Naprawiono błąd w Nawigacji, który powodował, że modele widoków NavGraph były zbyt wcześnieDESTROYEDwtedy, 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.

Usługa androidx.navigation:navigation-*:2.8.0-alpha02 została zwolniona. Wersja 2.8.0-alfa02 zawiera te zatwierdzenia.

Nowe funkcje

  • Navigation Compose obsługuje teraz funkcję przewidywania w aplikacji z powrotem przez nowe interfejsy API SeekableTransitionState dostępne w compose-animation. Dzięki temu możesz użyć gestu cofania, aby wyświetlić poprzednie miejsce docelowe w ramach niestandardowego przejścia przed podjęciem decyzji o zrealizowaniu transakcji za pomocą zrealizowanego gestu lub jej anulowaniem. (I8B8E9).

Wersja 2.8.0-alpha01

24 stycznia 2024 r.

Usługa androidx.navigation:navigation-*:2.8.0-alpha01 została zwolniona. Wersja 2.8.0-alfa01 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiliśmy wyciek BackStackState, który powodował, że wiele wywołań saveState z miejsca docelowego powodowało zapisanie wielu stanów, ale przywrócono tylko pierwsze z nich. (I598b0, b/309559751)
  • Rozwiązaliśmy problem, który powodował, że argumenty inne niż ciągi tekstowe nie były prawidłowo wyświetlane, gdy do wypełniania tytułu pasków aplikacji były używane pomocnicze NavigationUI. (#636, b/316676794)

Aktualizacja zależności

  • Funkcja tworzenia nawigacji wymaga teraz opcji Utwórz 1.7.0-alpha01, która naprawia błąd, który może powodować nieoczekiwaną animację skali. (b/297258205)

Treści tłumaczone przez użytkowników zewnętrznych

  • Dziękujemy SimonMarquis za rozwiązanie problemu z wyświetlaniem w przypadku argumentów niebędących ciągiem znaków podczas korzystania z pomocników NavigationUI do wypełniania tytułu pasków aplikacji.

Wersja 2.7.7

Wersja 2.7.7

7 lutego 2024 r.

Usługa androidx.navigation:navigation-*:2.7.7 została zwolniona. Wersja 2.7.7 zawiera te zatwierdzenia.

Poprawki błędów

  • Przeniesione z Nawigacji 2.8.0-alpha01: usunięto wyciek danych BackStackState, w wyniku którego po kilku wywołaniach saveState() na 1 pojedynczym NavBackStackEntry zapisano wiele stanów, ale przywrócono tylko pierwszy zapisany stan. (I598b0, b/309559751)
  • Przeniesione z Nawigacji 2.8.0-alpha01: naprawiono błąd polegający na tym, że argumenty niebędące ciągami znaków nie były prawidłowo wyświetlane, gdy do wypełniania tytułu pasków aplikacji są używane argumenty NavigationUI. (#636, b/316676794)

Treści tłumaczone przez użytkowników zewnętrznych

  • Dziękujemy SimonMarquis za rozwiązanie problemu z wyświetlaniem w przypadku argumentów niebędących ciągiem znaków podczas korzystania z pomocników NavigationUI do wypełniania tytułu pasków aplikacji.

Wersja 2.7.6

Wersja 2.7.6

13 grudnia 2023 r.

Usługa androidx.navigation:navigation-*:2.7.6 została zwolniona. Wersja 2.7.6 zawiera te zatwierdzenia.

Poprawki błędów

  • Funkcja equals() NavGraph prawidłowo uwzględnia teraz węzły innego grafu, a nie tylko jeden z wywołań. Dzięki temu wykresy, które mają węzły o różnych identyfikatorach, nie będą już uznawane za równe (I401cb, b/311414915).

Wersja 2.7.5

Wersja 2.7.5

1 listopada 2023 roku

Usługa androidx.navigation:navigation-*:2.7.5 została zwolniona. Wersja 2.7.5 zawiera te zatwierdzenia.

Ulepszenia wydajności

  • Znacznie poprawiła się wydajność porównywania 2 wykresów (zarówno pod względem czasu, jak i liczby alokacji). Oznacza to, że wywołania typu setGraph służące do wewnętrznego porównania nowego wykresu z wykresem istniejącym są znacznie szybsze i skutkują mniejszą liczbą pomijanych klatek. Dziękujemy Michałowi Z za dokładną analizę, która doprowadziła do tego ulepszenia. (I6ad62).
  • NavHost wyrenderuje teraz miejsce docelowe początkowe w pierwszym przebiegu kompozycji, zamiast czekać na odczyt zaktualizowanego stanu przez drugi przebieg. (I439a7, b/304852206)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że w przypadku wywołania funkcji setGraph więcej niż raz z tym samym wykresem tylko wtedy, gdy na wykresie znajdowało się miejsce docelowe, które zawierało działanie łączące 2 miejsca docelowe. (EOG7)
  • Okna, które były otwierane i zamknięte w krótkich odstępach czasu, nie będą już wyciekać na listę NavController.visibleEntries. (I67586, b/287969970)
  • Po wyświetleniu wpisu i zmianie konfiguracji jego ViewModel zostanie teraz prawidłowo wyczyszczony, jeśli saveState ma wartość false (fałsz). (Idf242, b/298164648)
  • Rozwiązaliśmy problem, który powodował, że funkcja NavController obsługiwała ten sam precyzyjny link więcej niż raz, jeśli stos wsteczny był całkowicie pusty przed zmianą konfiguracji lub wywołaniem setGraph tylko wtedy, gdy intencja przychodząca miała ustawioną flagę FLAG_ACTIVITY_NEW_TASK. (I73c7f)

Aktualizacje zależności

  • Nawigacja z fragmentami kodu jest teraz uzależniona od fragmentu 1.6.2. Naprawiamy problem, który powodował, że wystąpienia ViewModel zagnieżdżonych fragmentów nie były wyczyszczone podczas wywoływania funkcji clearBackStack.

Wersja 2.7.4

Wersja 2.7.4

4 października 2023 roku

Usługa androidx.navigation:navigation-*:2.7.4 została zwolniona. Wersja 2.7.4 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano obsługę tras z argumentami w popUpTo. Pozwala to wrócić do konkretnego wpisu korzystającego z konkretnych argumentów i spełniać kryteria zgodne z funkcją popBackStack. (I731f4, b/299255572)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że przerwanie nawigacji z użyciem innej nawigacji z użyciem parametru popUpTo powoduje awarię FragmentNavigator. (I3c848, b/301887045)
  • Rozwiązaliśmy problem polegający na tym, że naciśnięcie klawisza wstecznego powodowało nieprawidłowe aktualizowanie elementu currentDestination, aby pasowało do wyświetlanego fragmentu. (Id0d6c, b/289877514)
  • Cykl życia DialogFragment zostanie teraz prawidłowo zmieniony na RESUMED po zamknięciu okna powyżej. (I88f0d, b/301811387)

Wersja 2.7.3

Wersja 2.7.3

20 września 2023 r.

Usługa androidx.navigation:navigation-*:2.7.3 została zwolniona. Wersja 2.7.3 zawiera te zatwierdzenia.

Poprawki błędów

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

Wersja 2.7.2

Wersja 2.7.2

6 września 2023 r.

Usługa androidx.navigation:navigation-*:2.7.2 została zwolniona. Wersja 2.7.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Nawigacja jest teraz uzależniona od cyklu życia 2.6.2. Naprawiono interakcję między rememberSaveable a kontem NavHost w funkcji nawigacji, która spowodowała prawidłowe przywrócenie stanu rememberSaveable miejsc docelowych i wszystkich instancji SavedStateHandle należących do ViewModel po śmierci i odtworzeniu procesu. (b/298059596, b/289436035)
  • Rozwiązaliśmy problem, który powodował, że w kompozycji nawigacji jednocześnie wyświetlała się wiele okien dialogowych, w których częściowo zasłonięte okna (np. nie znajdujące się na samej górze) miały stan CREATED, a nie STARTED. (Aosp/2728520, b/289257213)
  • Rozwiązaliśmy problem, który powodował, że w funkcji tworzenia nawigacji jednocześnie wyświetlało się wiele okien, w których zamknięcie pierwszego z nich powodowało zablokowanie nowego okna najwyższego poziomu w stanie cyklu życia STARTED zamiast poprawnego przeniesienia się do RESUMED. (Aosp/2629401, b/286371387)
  • Bezpieczne argumenty nawigacji nie tworzą już instancji zadania w sposób, który w rzeczywistości nie jest wykonywany. (I0e385, b/260322841)

Aktualizacja zależności

  • Tworzenie nawigacji zależy teraz od funkcji Utwórz 1.5.1.

Wersja 2.7.1

Wersja 2.7.1

23 sierpnia 2023 r.

Usługa androidx.navigation:navigation-*:2.7.1 została zwolniona. Wersja 2.7.1 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problemy w nawigacji z funkcją tworzenia wiadomości, które powodowały, że podczas korzystania z elementu Scaffold mógł wystąpić błąd przy próbie uzyskania dostępu do elementu ViewModel Lifecycle.State.DESTROYED. (I1dc11, b/268422136)

Wersja 2.7.0

Wersja 2.7.0

9 sierpnia 2023 r.

Usługa androidx.navigation:navigation-*:2.7.0 została zwolniona. Wersja 2.7.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 2.6.0

Animacje od akompaniatora

Teraz, gdy usługa AnimatedContent jest stabilna, udało nam się przenieść kod z Accompanist Navigation Animation z powrotem do narzędzia Navigation Compose.

Oznacza to, że cała obsługa ustawiania niestandardowych przejść z usługi AnimatedNavHost jest bezpośrednio obsługiwana w NavHost.

Nie wprowadzimy żadnych dodatkowych zmian w animacji z nawigacją towarzyszącą i wkrótce ją oficjalnie wycofamy, podobnie jak wskazówki dotyczące przejścia z powrotem do Nawigacji. Będzie to jednak odwrotność przewodnika po migracji. Jeśli korzystasz już z najnowszej wersji alfa usługi Accompanist (0.31.2-alpha), nie musisz wprowadzać żadnych dodatkowych zmian. (b/197140101).

Poprawki błędów

  • NavHost w narzędziu Navigation Compose teraz prawidłowo przechwytuje połączenia zwrotne systemu, nawet gdy działanie zostało ZATRZYMANE i WZNÓW. (Icb6de, b/279118447)

Aktualizacje zależności

  • Nawigacja opiera się teraz na funkcji Utwórz 1.5.0 od 1.1.0.

Wersja 2.7.0-rc01

26 lipca 2023 r.

Usługa androidx.navigation:navigation-*:2.7.0-rc01 została zwolniona. Wersja 2.7.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że lambda EnterTransition i ExitTransition utworzone w ramach elementu NavHost mogły pozostać w pamięci nawet po usunięciu elementu NavHost z kompozycji. (I893d0)

Znane problemy

  • W Nawigacji w wersji 2.6.x występuje problem polegający na tym, że podczas korzystania z funkcji popUpTo można wywołać błąd IllegalArgumentException. Można tego uniknąć, zmieniając strukturę wykresu zgodnie z tymi wskazówkami. (b/287133013)

Wersja 2.7.0-beta02

28 czerwca 2023 r.

Usługa androidx.navigation:navigation-*:2.7.0-beta02 została zwolniona. Wersja 2.7.0-beta02 zawiera te zatwierdzenia.

Poprawki błędów

  • Funkcja Navigation Compose ma teraz odpowiednią kolejność przejść niestandardowych w przypadku niestandardowych przejść z użyciem opcji popUpTo (/Ib1c3a, b/285153947).

Wersja 2.7.0-beta01

7 czerwca 2023 r.

Usługa androidx.navigation:navigation-*:2.7.0-beta01 została zwolniona. Wersja 2.7.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Funkcja NavHost w narzędziu Navigation Compose teraz prawidłowo przechwytuje połączenia zwrotne systemowe, nawet jeśli Activity ma wartość STOPPED i RESUMED. (Icb6de, b/279118447)

Wersja 2.7.0-alpha01

24 maja 2023 r.

Usługa androidx.navigation:navigation-*:2.7.0-alpha01 została zwolniona. Wersja 2.7.0-alfa01 zawiera te zatwierdzenia.

Animacje od akompaniatora

Teraz, gdy usługa AnimatedContent jest stabilna, udało nam się przenieść kod z Accompanist Navigation Animation z powrotem do narzędzia Navigation Compose.

Oznacza to, że cała obsługa ustawiania niestandardowych przejść z usługi AnimatedNavHost jest bezpośrednio obsługiwana w NavHost.

Nie wprowadzimy żadnych dodatkowych zmian w animacji z nawigacją towarzyszącą i wkrótce ją oficjalnie wycofamy, podobnie jak wskazówki dotyczące przejścia z powrotem do Nawigacji. Będzie to jednak odwrotność przewodnika po migracji. Jeśli korzystasz już z najnowszej wersji alfa usługi Accompanist (0.31.2-alpha), nie musisz wprowadzać żadnych dodatkowych zmian. (b/197140101).

Poprawki błędów

  • Z sekcji Nawigacja 2.6.0-rc02: naprawiono problem z nawigacją we fragmentach „Fragmenty”, która polegała na tym, że nawigacja przy użyciu popUpTo i wyskakiwanie fragmentu z tylnego stosu bez odtworzenia jego widoku powodowało z powrotem przerwanie działania systemu. (Ieb8d4, b/281726455)

Aktualizacje zależności

  • Nawigacja opiera się teraz na funkcji Utwórz 1.5.0-beta01.

Wersja 2.6.0

Wersja 2.6.0

7 czerwca 2023 r.

Usługa androidx.navigation:navigation-*:2.6.0 została zwolniona. Wersja 2.6.0 zawiera te zatwierdzenia.

Ważne zmiany w Nawigacji wprowadzone od wersji 2.5.0

  • Elementy arguments funkcji NavBackStackEntry i elementy arguments przekazywane do funkcji OnDestinationChangedListener są teraz tylko kopią stałych argumentów, które zostały utworzone podczas przechodzenia do miejsca docelowego. Oznacza to, że zmiany wprowadzone w tych pakietach nie będą widoczne przy późniejszym dostępie do instancji arguments ani do innych instancji OnDestinationChangedListener.
  • Funkcja NavDeepLink obsługuje teraz domyślne wartości tablic, co umożliwia obsługę powtórzonych parametrów zapytania, które będą mapowane na typ tablicy argumentu. NavType zawiera teraz metodę domyślną, którą można zastąpić, aby połączyć 2 przeanalizowane wartości.
  • Niestandardowe podklasy klasy NavType mogą teraz zastąpić klasę serializeAsValue, aby zserializować wartość w ciągu znaków. Dzięki temu serializacja i deserializacja (za pomocą parseValue) mogą zostać w całości zamknięte w klasie NavType. Funkcja StringType zastępuje teraz tę metodę wywoływania funkcji Uri.encode w określonym elemencie String.

Ważne zmiany w usłudze Navigation Compose od wersji 2.5.0

  • Podczas wyświetlania podglądu funkcji kompozycyjnej przy użyciu funkcji NavHost domyślnie wyświetla się teraz startDestination na wykresie nawigacji.
  • NavController.popBackStack(route), NavController.getBackStackEntry(route), NavController.clearBackStack(route) są teraz dostępne wszystkie trasy obsługi z argumentami częściowo lub całkowicie wypełnionymi. Pamiętaj, że argumenty muszą być dokładnie takie same jak argumenty wpisu.
  • Próba utworzenia pustego pola NavDeepLink za pomocą DSL navDeepLink Kotlin spowoduje teraz wyświetlenie ostrzeżenia o tym, że precyzyjny link wymaga prawidłowego identyfikatora URI, działania lub typu MIME.

Ważne zmiany w nawigacji z fragmentami kodu od wersji 2.5.0

  • NavHostFragment nie przechwytuje już systemowego przycisku Wstecz. Dzięki temu bazowe FragmentManager może obsłużyć system z powrotem. Dzięki temu fragment fragmentu 1.7.0-alpha01 i nowszym może wyświetlać animację wsteczną w aplikacji na urządzeniach z Androidem U.
  • Gdy korzystasz z nawigacji z fragmentami kodu, próba ręcznego wykonania polecenia FragmentTransaction, który dodaje fragment do stosu wstecznego FragmentManager, spowoduje zgłoszenie IllegalArgumentException. Zawsze dodawaj fragmenty za pomocą interfejsu API navigate().
  • Jeśli używasz dokładnego ciągu ${applicationId} jako symbolu zastępczego w atrybutach app:data i app:dataPattern w elemencie aktywności pliku XML do nawigacji, obiekt zastępczy zostanie automatycznie wypełniony wartością packageName kontekstu.
  • FragmentNavigator używa teraz interfejsów API przejścia podczas nawigowania i wyświetlania elementów NavBackStackEntries. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać na zakończenie efektów specjalnych we fragmencie, w którym następuje przejście lub zakończenie, przed przeniesieniem ostatniego elementu Lifecycle.State.
  • DialogFragmentNavigator używa teraz interfejsów API przejścia podczas nawigowania i wyświetlania elementów NavBackStackEntries. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać, aż DialogFragment Lifecycle przejdzie do DESTROYED, zanim przejdzie do samej DESTROYED.
  • NavHostFragment umożliwia teraz pobranie NavController natychmiast po podłączeniu obiektu NavHostFragment do FragmentManager, a nie dopiero po onCreate().
  • Obsługa modułów funkcji dynamicznych zależy teraz od szczegółowej biblioteki Play Feature Delivery.
  • Bezpieczne argumenty nawigacji wymagają teraz wtyczki Androida do obsługi Gradle w wersji 7.3.0. Oznacza to, że jest ona obecnie zgodna tylko z wersjami 7.3.0 i nowszymi.

Ważne zmiany w NavigationUI od wersji 2.5.0

  • Podczas przekazywania identyfikatora wykresu nawigacji do AppBarConfiguration (np. za pomocą Menu) NavigationUI traktuje teraz tylko początkowe miejsce docelowe tego wykresu nawigacyjnego jako miejsce docelowe najwyższego poziomu, zamiast oznaczać je nieprawidłowo na wykresie. Sposób przekazywania identyfikatora pojedynczego miejsca docelowego pozostaje bez zmian. Ta sama funkcja jest dostępna w Twoim kodzie za pomocą nowej funkcji isTopLevelDestination w AppBarConfiguration.
  • Integracje setupWithNavController w NavigationUI umożliwiające pracę z górnym paskiem aplikacji będą teraz analizować wartości R.string dla argumentów ReferenceType znalezionych w android:label jako wartości ciągu znaków, zamiast podawać automatycznie wygenerowaną liczbę całkowitą zasobu.
  • NavigationUI udostępnia teraz logi, gdy nie może przejść przez wybrany obszar MenuItem.

Wersja 2.6.0-rc02

24 maja 2023 r.

Usługa androidx.navigation:navigation-*:2.6.0-rc02 została zwolniona. Wersja 2.6.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono problem z nawigacją we fragmentach „Fragmenty”, która polegała na tym, że nawigowanie z użyciem parametru popUpTo i wyskakiwanie fragmentu z tylnego stosu bez odtworzenia jego widoku powodowało z powrotem przerwanie działania systemu. (Ieb8d4, b/281726455)

Wersja 2.6.0-rc01

10 maja 2023 r.

Usługa androidx.navigation:navigation-*:2.6.0-rc01 została zwolniona. Wersja 2.6.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd nawigacji z fragmentami, który powodował, że usunięcie fragmentu przez nawigację z użyciem parametru popUpTo w wywołaniu zwrotnym cyklu życia onResume() skutkowało wyświetleniem IllegalStateException. (I21884, b/279644470)

Wersja 2.6.0-beta01

19 kwietnia 2023 r.

Usługa androidx.navigation:navigation-*:2.6.0-beta01 została zwolniona. Wersja 2.6.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

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

Poprawki błędów

  • Gdy korzystasz z nawigacji z fragmentami kodu, próba ręcznego wykonania polecenia FragmentTransaction, który dodaje fragment do stosu wstecznego FragmentManager, spowoduje zgłoszenie IllegalArgumentException. Zawsze dodawaj fragmenty za pomocą interfejsu API navigate(). (I6d38e)
  • Jeśli obiekt navigate dodaje wpis i zasadę popBackStack, która usuwa go w tej samej ramce, wynikowy wpis górny na stosie tylnym będzie teraz konsekwentnie wracać do RESUMED Lifecycle.State. (Id8067, b/276495952)

Wersja 2.6.0-alpha09

5 kwietnia 2023 r.

Usługa androidx.navigation:navigation-*:2.6.0-alpha09 została zwolniona. Wersja 2.6.0-alfa09 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono sprawdzanie nieprawidłowej trasy, na przykład jeśli NavDestination zawiera wartość NavArgument, która nie ma wartości null, trasa tego miejsca docelowego musi zawierać zmienne dla argumentów o takich samych nazwach jak wartość NavArgument, która nie ma wartości null. (Ic62bf, b/274697949)
  • Nawigacja z użyciem precyzyjnych linków oparta na metodzie Action/MimeType będzie teraz kończyć się niepowodzeniem, jeśli w operacji nawigacji brakuje wartości NavArgument, która nie jest wartością null wymaganej przez obiekt NavDestination, do którego pasuje Action/MimeType. (Ibfa17, b/271777424)
  • Gdy NavController ustawi wykres z tą samą trasą i miejscami docelowymi co poprzedni wykres, teraz prawidłowo zastąpi bieżące węzły grafu i miejsca docelowe stosu wstecznego nowymi instancjami. Rozwiązano problem powodujący awarię występującą podczas korzystania z funkcji onLaunchSingleTop bez zapisywania stanu w narzędziu Nawigacja. Rozwiązuje to też błąd polegający na tym, że w celu nawigacji do miejsc docelowych powiązanych z kompilacją na wykresie głównym i nieprawidłowym stosem powrotnym. (I5bc58, b/275258161, b/275407804)

Wersja 2.6.0-alpha08

22 marca 2023 r.

Usługa androidx.navigation:navigation-*:2.6.0-alpha08 została zwolniona. Wersja 2.6.0-alfa08 zawiera te zatwierdzenia.

Nowe funkcje

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

Poprawki błędów

  • Naprawiono błąd NullPointerException podczas wyświetlania zagnieżdżonego wykresu zawierającego argument niedopuszczający wartości pustych. (6b3581, b/249988437)
  • Podczas korzystania z systemu po przeprowadzeniu nawigacji przy użyciu popUpTo stan elementu NavController zostanie uzupełniony o właściwy wpis. (I3a8ec, b/270447657)
  • FragmentNavigator będzie teraz prawidłowo rozpoznawać wpisy, gdy tylny stos zostanie pobrany przez system zwrotny systemu lub popBackStack() i czy transakcja używa efektów dla danego fragmentu. (I81bdf)
  • Dodanie fragmentów do pliku FragmentManager FragmentNavigator bez korzystania z nawigacji nie będzie już powodować awarii. (B17204, b/274167493)

Aktualizacje zależności

Wersja 2.6.0-alpha07

8 marca 2023 r.

Usługa androidx.navigation:navigation-*:2.6.0-alpha07 została zwolniona. Wersja 2.6.0-alfa07 zawiera te zatwierdzenia.

Poprawki błędów

  • Warianty interfejsu API getBackStackEntry, popBackStack i clearBackStack, które przyjmują trasy, przyjmują teraz wzorce tras z argumentami do wartości null i parametrami zapytania dopuszczonymi do wartości null (I22294, b/269302500)
  • Naprawiono błąd, który powodował, że wywołanie funkcji clearBackStack() z poziomu NavController nie skutkowało usunięciem zapisanego stanu w menedżerze fragmentów powiązanym z usuniętym stosem wstecznym. (Ic1cce, b/271190202)
  • Naprawiliśmy regresję w wersjach 2.6.0-alfa06, która powodowała podświetlanie niewłaściwego elementu MenuItem w elemencie BottomNavigationView przy korzystaniu z systemu między kartami. (I634f6, b/270447657)
  • Naprawiliśmy regresję w wersjach 2.6.0-alfa06, w wyniku której elementy NavBackStackEntry nie zostały przeniesione do stanu WZNÓW podczas korzystania z elementów Animation. (Ib3589, b/269646882)

Wersja 2.6.0-alpha06

22 lutego 2023 roku

Usługa androidx.navigation:navigation-*:2.6.0-alpha06 została zwolniona. Wersja 2.6.0-alfa06 zawiera te zatwierdzenia.

Nowe funkcje

  • Podczas wyświetlania podglądu funkcji kompozycyjnej przy użyciu funkcji NavHost domyślnie wyświetla się teraz startDestination na wykresie nawigacji. (I2B89f)

Zmiany interfejsu API

  • Wszystkie NavController przeciążenia typu navigate są teraz opatrzone adnotacjami @MainThread, aby były wywoływane w wątku głównym. (I2c0b0, b/263427111)

Poprawki błędów

  • Naprawiono błąd występujący podczas próby nawigacji podczas korzystania z dynamicznej nawigacji po fragmentach. (I3ee29, b/268360479)
  • Naprawiono błąd polegający na tym, że przejście do innego fragmentu za pomocą przycisku Wstecz w systemie nie powodowało zmiany dolnego paska na prawidłowy wybrany element (If559f, b/269044426)

Znane problemy

  • Jeśli używasz nawigacji z fragmentami kodu, cykl życia NavBackStackEntry nie dociera do RESUMED, gdy używasz interfejsów API Animation. (b/269646882)
  • Jeśli korzystasz z nawigacji z fragmentami z fragmentami z fragmentami z krzyżykiem i używasz funkcji BottomNavigation, próba przywrócenia stosu z kilkoma wpisami spowoduje, że BottomMenuItem nie zostanie prawidłowo zaktualizowany. (b/270447657)
  • Podczas korzystania z nawigacji z fragmentami kodu po przywróceniu stanu NavBackStackEntry Lifecycle nie otrzymuje parametru DESTROYED, gdy jego fragment ma wartość DESTROYED . (B/270610768)

Wersja 2.6.0-alpha05

8 lutego 2023 r.

Usługa androidx.navigation:navigation-*:2.6.0-alpha05 została zwolniona. Wersja 2.6.0-alfa05 zawiera te zatwierdzenia.

Nowe funkcje

  • NavController.popBackStack(route), NavController.getBackStackEntry(route), NavController.clearBackStack(route) są teraz dostępne wszystkie trasy obsługi z argumentami częściowo lub całkowicie wypełnionymi. Pamiętaj, że argumenty muszą być dokładnie takie same jak argumenty wpisu. (Iebd28, Ic678c, I3b37b, b/257514373)
  • FragmentNavigator używa teraz interfejsów API przejścia podczas nawigowania i wyświetlania elementów NavBackStackEntries. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać na zakończenie efektów specjalnych we fragmencie, w którym następuje przejście lub zakończenie, przed przeniesieniem ostatniego elementu Lifecycle.State. (I3cb19, b/238686802)
  • DialogFragmentNavigator używa teraz interfejsów API przejścia podczas nawigowania i wyświetlania elementów NavBackStackEntries. Oznacza to, że NavBackStackEntry Lifecycle będzie teraz czekać, aż DialogFragment Lifecycle przejdzie do DESTROYED, zanim przejdzie do samej DESTROYED. (I53ee5, b/261213893)

Zmiany interfejsu API

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

Poprawki błędów

  • Podczas korzystania z interfejsów API push/popWithTransition stan nawigacji będzie teraz wskazywać brak działania, a wpis jest już obsługiwany. (Iadbfa, b/261213893)
  • Jeśli używasz interfejsu launchSingleTop z zagnieżdżonym NavGraph, wszystkie miejsca docelowe zaczynające się od pierwotnego miejsca docelowego do startDestination zostaną prawidłowo dodane tylko na górze stosu. (Id4bea, b/253256629)
  • Nawigacja będzie teraz prawidłowo zastępować instancję DialogFragment podczas nawigacji do tego samego miejsca docelowego z flagą launchSingleTop ustawioną na „true”. (I45b5a, b/149572817)
  • Element SafeArgs w nawigacji nie będzie już powodować błędu kompilacji, gdy używasz argumentów o długości dokładnie 19 znaków. (Id60bc, b/257110095)

Wersja 2.6.0-alpha04

9 listopada 2022 r.

Usługa androidx.navigation:navigation-*:2.6.0-alpha04 została zwolniona. Wersja 2.6.0-alfa04 zawiera te zatwierdzenia.

Nowe funkcje

  • Niestandardowe podklasy klasy NavType mogą teraz zastąpić klasę serializeAsValue, aby zserializować wartość w ciągu znaków. Dzięki temu serializacja i deserializacja (za pomocą parseValue) mogą zostać w całości zamknięte w klasie NavType. Funkcja StringType zastępuje teraz tę metodę wywoływania funkcji Uri.encode w określonym elemencie String. (IE5213, b/247637434)
  • NavigationUI udostępnia teraz logi, gdy nie może przejść przez wybrany obszar MenuItem. (I2af5a, b/247730357)

Poprawki błędów

  • Precyzyjne linki nawigacyjne są teraz analizowane leniwie zamiast na wykresie, co może poprawić wydajność przy uruchomieniu. (IAB0ab)
  • Naprawiono awarię powodowaną przez przejście w górę po precyzyjnym linku do miejsca docelowego z domyślnymi argumentami o wartości null. (I51c24, b/243183636)

Aktualizacja zależności

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

Wersja 2.6.0-alpha03

24 października 2022 r.

Usługa androidx.navigation:navigation-*:2.6.0-alpha03 została zwolniona. Wersja 2.6.0-alfa03 zawiera te zatwierdzenia.

Poprawki błędów

  • Z Nawigacji 2.5.3: NavHost nie spowoduje już wyświetlenia ciągu NoSuchElementException, jeśli nie ma miejsca docelowego, które może utworzyć Crossfade. Teraz pominie tylko kompozycję. (Ieb46e, b/253299416)
  • Z poziomu Nawigacji 2.5.3: naprawiliśmy błąd polegający na tym, że zapisany stan tworzenia wiadomości (np. przypadki użycia rememberSaveable) nie był zapamiętywany i usuwany, gdy miejsce docelowe wyskakiwało z tylnego stosu. (I64949)

Aktualizacje zależności

Wersja 2.6.0-alpha02

5 października 2022 r.

Usługa androidx.navigation:navigation-*:2.6.0-alpha02 została zwolniona. Wersja 2.6.0-alfa02 zawiera te zatwierdzenia.

Zmiany w działaniu

  • Podczas przekazywania identyfikatora wykresu nawigacji do AppBarConfiguration (np. za pomocą Menu) NavigationUI traktuje teraz tylko początkowe miejsce docelowe tego wykresu nawigacyjnego jako miejsce docelowe najwyższego poziomu, zamiast oznaczać je nieprawidłowo na wykresie. Sposób przekazywania identyfikatora pojedynczego miejsca docelowego pozostaje bez zmian. Ta sama funkcja jest dostępna w Twoim kodzie za pomocą nowej funkcji isTopLevelDestination w AppBarConfiguration. (IE936e, b/238496771)

Poprawki błędów

  • Komponent navigation:navigation-fragment zależy teraz od fragmentu w wersji 1.5.2. (I00BA4)
  • Wybrany element menu nie będzie już aktualizowany podczas przechodzenia do miejsca docelowego FloatingWindow, takiego jak okno. (I4cde8, b/240308330)

Wersja 2.6.0-alpha01

7 września 2022 roku

Usługa androidx.navigation:navigation-*:2.6.0-alpha01 została zwolniona. Wersja 2.6.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

  • Integracje setupWithNavController w NavigationUI umożliwiające pracę z górnym paskiem aplikacji będą teraz analizować wartości R.string dla argumentów ReferenceType znalezionych w android:label jako wartości ciągu znaków, zamiast podawać automatycznie wygenerowaną liczbę całkowitą zasobu. (I5f803, b/167959935)
  • Funkcja NavDeepLink obsługuje teraz domyślne wartości tablic, co umożliwia obsługę powtórzonych parametrów zapytania, które będą mapowane na typ tablicy argumentu. NavType zawiera teraz metodę domyślną, którą można zastąpić, aby połączyć 2 przeanalizowane wartości. (Id68c3, b/209977108)
  • Jeśli używasz dokładnego ciągu ${applicationId} jako symbolu zastępczego w atrybutach app:data i app:dataPattern w elemencie aktywności pliku XML do nawigacji, obiekt zastępczy zostanie automatycznie wypełniony wartością packageName kontekstu. (Iaabde, b/234223561)
  • Próba utworzenia pustego pola NavDeepLink za pomocą DSL navDeepLink Kotlin spowoduje teraz wyświetlenie ostrzeżenia o tym, że precyzyjny link wymaga prawidłowego identyfikatora URI, działania lub typu MIME. (I08d2f, b/154038883)

Zmiany interfejsu API

  • Dodaliśmy nową funkcję rozszerzenia NavDestination, która umożliwia przekształcanie etykiet dynamicznych z argumentami w postaci android:label="{arg}" na ciąg znaków. Obsługuje argumenty ReferenceType przez analizowanie R.string wartości jako ciągu znaków. (I07d89, b/236269380)

Zmiany w działaniu

  • arguments NavBackStackEntry i arguments przekazane do OnDestinationChangedListener są teraz tylko kopią stałych argumentów, które zostały utworzone podczas przechodzenia do miejsca docelowego. Oznacza to, że zmiany wprowadzone w tych pakietach nie będą widoczne przy późniejszym dostępie do instancji arguments ani do innych instancji OnDestinationChangedListener. (I676f5)

Poprawki błędów

  • Na karcie Nawigacja 2.5.2: dynamiczna nawigacja teraz prawidłowo próbuje zainstalować miejsca docelowe aktywności z innych modułów, zanim przejdzie do nich. (Ia2c16, b/240292838)
  • Od Nawigacji 2.5.2: nawigacja będzie teraz prawidłowo zastępować instancję Fragment podczas przechodzenia do tego samego miejsca docelowego i ustawiania flagi launchSingleTop na „prawda”. (I5a2f1, b/237374580)
  • Z Nawigacji 2.5.2: naprawiono błąd IllegalStateException związany z przejściem do podwójnych zagnieżdżonych wykresów, które korzystają z tego samego wykresu nadrzędnego i nowego miejsca docelowego z wyskakującym punktem początkowym. (I9f7cb, b/243778589)

Wersja 2.5

Wersja 2.5.3

24 października 2022 r.

Usługa androidx.navigation:navigation-*:2.5.3 została zwolniona. Wersja 2.5.3 zawiera te zatwierdzenia.

Poprawki błędów

  • Funkcja NavHost nie będzie już wywoływać NoSuchElementException, gdy nie ma dostępnego miejsca docelowego do utworzenia elementu Crossfade. Teraz pominie tylko kompozycję. (Ieb46e, b/253299416)
  • Rozwiązaliśmy problem, który powodował, że zapisany stan tworzenia wiadomości (np. przypadki użycia funkcji rememberSaveable) nie był zapomniany i usuwany, gdy miejsce docelowe było wyskakiwane z panelu tylnego. (I64949)

Wersja 2.5.2

7 września 2022 roku

Usługa androidx.navigation:navigation-*:2.5.2 została zwolniona. Wersja 2.5.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Obecnie dynamiczna nawigacja prawidłowo próbuje zainstalować miejsca docelowe aktywności z innych modułów, zanim przejdzie do nich. (Ia2c16, b/240292838)
  • Nawigacja będzie teraz prawidłowo zastępować instancję Fragment podczas przechodzenia do tego samego miejsca docelowego i ustawiania flagi launchSingleTop na „prawda”. (I5a2f1, b/237374580)
  • Naprawiono IllegalStateException spowodowane przejściem do podwójnych zagnieżdżonych wykresów, które mają ten sam element nadrzędny i nowe miejsce docelowe początkowe. (I9f7cb, b/243778589)

Aktualizacja zależności

Wersja 2.5.1

27 lipca 2022 roku

Usługa androidx.navigation:navigation-*:2.5.1 została zwolniona. Wersja 2.5.1 zawiera te zatwierdzenia.

Poprawki błędów

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

Aktualizacje zależności

Wersja 2.5.0

29 czerwca 2022 r.

Usługa androidx.navigation:navigation-*:2.5.0 została zwolniona. Wersja 2.5.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 2.4.0

  • Integracja dodatków do tworzenia – usługa Navigation może teraz udostępniać bezstanowe ViewModelProvider.Factory za pomocą funkcji CreationExtras w cyklu życia 2.5.0.

Bezpieczne argumenty nawigacji

  • W systemie Navigation Safe Args zależność Android Gradle Plugin została uaktualniona, tak aby korzystała z zasad 7.0.4, a zgodność z wersjami AGP została wycofana przed 7.0.
  • Dodano obsługę atrybutu build.gradle przestrzeni nazw zamiast atrybutu applicationId.

Inne zmiany

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

Wersja 2.5.0-rc02

15 czerwca 2022 r.

Usługa androidx.navigation:navigation-*:2.5.0-rc02 została zwolniona. Wersja 2.5.0-rc02 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd spowodowany szybkim przełączaniem się między dolnymi miejscami docelowymi podczas korzystania z funkcji tworzenia nawigacji NavHost. (I3979a, b/234054916)
  • Navigation SafeArgs nie będzie już ulegać awarii, gdy użyjesz applicationIdSuffix i przestrzeni nazw bez atrybutu applicationId lub gdy pola applicationId i przestrzeń nazw będą się różnić. (I754b1, b/233119646)
  • NavArgument ma teraz niestandardową funkcję toString() do pokazywania wartości wewnętrznych argumentu. (I900a8)

Wersja 2.5.0-rc01

11 maja 2022 roku

Usługa androidx.navigation:navigation-*:2.5.0-rc01 została zwolniona. Wersja 2.5.0-rc01 zawiera te zatwierdzenia.

Nowe funkcje

  • Dodano nową regułę lintowania, 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 kompozycyjne w funkcjach NavHost i DialogHost są teraz rozmieszczone w odpowiedniej kolejności, tj. wewnętrzne kompozycje są usuwane przed zasobami kompozycyjnymi zewnętrznymi. (I157e6)
  • Nawigacja SafeArgs używa teraz PathSensitivity.RELATIVE w: ArgumentsGenerationTask, aby umożliwić ponowne zlokalizowanie pamięci podręcznej. Oznacza to, że wpisu pamięci podręcznej można teraz ponownie użyć z kompilacji CI w kompilacji lokalnej. (I5f67c, b/173420454)
  • Reguła lintowania UnrememberedGetBackStackEntryDetector została zaktualizowana tak, aby wywołanie remember otaczające wywołanie funkcji getBackStackEntry() również było przekazywane w obiekcie NavBackStackEntry jako klucz.(Ib7081, b/227382831)

Wersja 2.5.0-beta01

20 kwietnia 2022 r.

Usługa androidx.navigation:navigation-*:2.5.0-beta01 została zwolniona. Wersja 2.5.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • DialogNavigator używa teraz popWithTransition podczas wykonywania wywołania dismiss(). Naprawia to warunek wyścigu, gdy używany jest ViewModel w miejscu docelowym dialog, który powoduje wyświetlenie komunikatu IllegalStateException przy zamykaniu okna przez powrót systemu lub kliknięcie poza oknem, aby je zamknąć. (Id7376, b/226552301)

Aktualizacje zależności

  • Nawigacja zależy teraz od cyklu życia 2.5.0-beta01, czyli naprawiania elementu IllegalStateException w przypadku zagnieżdżenia elementu NavHost w innym elemencie NavHost na oddzielnej dolnej karcie nawigacyjnej, gdy jest używany kilka stosów tylnych.

Wersja 2.5.0-alpha04

6 kwietnia 2022 roku

Usługa androidx.navigation:navigation-*:2.5.0-alpha04 została zwolniona. Wersja 2.5.0-alfa04 zawiera te zatwierdzenia.

Zmiany interfejsu API

Poprawki błędów

  • Aby określić, które wpisy utworzyć, NavHost zależy teraz od parametru visibleEntries z obiektu NavController. Oznacza to, że podczas korzystania z zagnieżdżonego hosta NavHost wewnętrzny element NavHost powinien teraz prawidłowo animować się na zewnątrz. (I4ba2b, b/225394514)
  • Pole visibleEntries StateFlow dostarczane przez NavController jest teraz oparte na maksymalnym stanie cyklu życia wpisu, a nie na bieżącym stanie cyklu życia. Oznacza to, że nawet jeśli cykl życia hosta navController spadnie poniżej wartości STARTED, lista widocznych całości pozostanie bez zmian. (I9e2a8, b/225394514)
  • SavedStateViewFactory obsługuje teraz korzystanie z CreationExtras nawet wtedy, gdy zostało zainicjowane za pomocą SavedStateRegistryOwner. Jeśli podano dodatki, zainicjowane argumenty są ignorowane. (I6c43b, b/224844583)
  • NavDeepLink może teraz analizować identyfikatory URI za pomocą jednego parametru zapytania bez wartości. (I0efe8, b/148905489)
  • Pusty ciąg jest teraz uważany za prawidłowe argumenty w precyzyjnych linkach. (I70a0d, b/217399862)
  • Interfejs Navigation Safe Args nie będzie już ulegał awarii podczas korzystania z przestrzeni nazw, gdy nie będzie parametru AndroidManifest.xml. (I17ccf, b/227229815)

Wersja 2.5.0-alpha03

23 lutego 2022 r.

Usługa androidx.navigation:navigation-*:2.5.0-alpha03 została zwolniona. Wersja 2.5.0-alfa03 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Możesz teraz przekazać funkcję CreationExtras do by navGraphViewModels, aby utworzyć ViewModel. (I29217, b/217618359)

Poprawki błędów

  • NavDeepLinks teraz prawidłowo obsługuje zakodowane znaki nowego wiersza umieszczone w identyfikatorach URI tras/precyzyjnych linków. (I513d1, b/217815060)
  • Funkcja CreationExtras będzie teraz działać prawidłowo, gdy będzie używana z NavBackStackEntries do tworzenia modeli widoków danych. (I69161, b/217617710)
  • Bezpieczne argumenty nawigacji obsługują teraz używanie przestrzeni nazw zdefiniowanej w elemencie build.gradle zamiast pakietu w pliku AndroidManifest. (I659ef, b/217414933)

Wersja 2.5.0-alpha02

9 lutego 2022 r.

Usługa androidx.navigation:navigation-*:2.5.0-alpha02 została zwolniona. Wersja 2.5.0-alfa02 zawiera te zatwierdzenia.

Poprawki błędów

  • Z Nawigacji 2.4.1: NavHostFragment będzie teraz prawidłowo ustawiać wartość OnBackPressedDispatcher podczas korzystania z powiązania widoku z zagnieżdżonymi wykresami. (Ifbb51, b/214577959)
  • Z Nawigacji 2.4.1: gdy precyzyjne linki prowadzą przez wiele zagnieżdżonych elementów NavGraph, stos wsteczny będzie teraz prawidłowo zawierać pośrednie miejsca docelowe rozpoczęcia. (I504c0, b/214383060)

Wersja 2.5.0-alpha01

26 stycznia 2022 r.

Usługa androidx.navigation:navigation-*:2.5.0-alpha01 została zwolniona. Wersja 2.5.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że nie można było uzyskać dostępu do pliku ViewModel utworzonego za pomocą by navGraphViewModels() z fragmentu kodu onCreate() fragmentu przy użyciu IllegalStateException. (I8a14d).
  • Parametr NavDeepLink nie będzie już dwukrotnie dekodować argumentów, co oznacza, że odpowiednie argumenty będą teraz przekazywane do miejsca docelowego. (I31b0a, b/210711399)

Bezpieczne argumenty

  • Bezpieczne argumenty wymagają teraz wtyczki Androida do obsługi Gradle w wersji 7.0.4. Oznacza to, że bezpieczne argumenty nawigacji nie będą już zgodne z Android Studio w wersji starszej niż 7.0, ale teraz są zgodne z wtyczką Androida do obsługi Gradle w wersji 7.1.0 lub nowszej. (I41c88, b/213086135, b/207670704)

Wersja 2.4.2

Wersja 2.4.2

6 kwietnia 2022 roku

Usługa androidx.navigation:navigation-*:2.4.2 została zwolniona. Wersja 2.4.2 zawiera te zatwierdzenia.

Poprawki błędów

Wersja 2.4.1

Wersja 2.4.1

9 lutego 2022 r.

Usługa androidx.navigation:navigation-*:2.4.1 została zwolniona. Wersja 2.4.1 zawiera te zatwierdzenia.

Poprawki błędów

  • NavHostFragment będzie teraz prawidłowo ustawiać wartość OnBackPressedDispatcher podczas korzystania z powiązania widoku z zagnieżdżonymi wykresami. (Ifbb51, b/214577959)
  • Gdy używasz precyzyjnych linków przez wiele zagnieżdżonych komponentów NavGraph, stos wsteczny będzie teraz prawidłowo zawierać pośrednie miejsca docelowe rozpoczęcia. (I504c0, b/214383060)
  • Przeniesione z Nawigacji 2.5.0-alpha01: naprawiliśmy błąd polegający na tym, że dostęp do modelu widoku utworzonego za pomocą by navGraphViewModels() z onCreate() fragmentu kodu nie dawał się pomyślnie IllegalStateException. (I8a14d).
  • Przeniesione z Nawigacji 2.5.0-alpha01: argumenty NavDeepLink nie są już 2 razy dekodowane, co oznacza, że prawidłowo zdekodowane argumenty są przekazywane do miejsca docelowego. (I31b0a, b/210711399)
  • Przeniesione z Nawigacji 2.5.0-alpha01: bezpieczne argumenty zależą teraz od wtyczki Androida do obsługi Gradle w wersji 7.0.4. Oznacza to, że bezpieczne argumenty nawigacyjne nie będą już zgodne z Android Studio w wersji starszej niż 7.0, ale są teraz zgodne z wtyczką Androida do obsługi Gradle w wersji 7.1.0 lub nowszej. (I41c88, b/213086135, b/207670704)

Wersja 2.4.0

Wersja 2.4.0

26 stycznia 2022 r.

Usługa androidx.navigation:navigation-*:2.4.0 została zwolniona. Wersja 2.4.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 2.3.0

  • Wszystkie artefakty nawigacji zostały przepisane w języku Kotlin. Dzięki temu zwiększyło się możliwość wartości null klas korzystających z klas ogólnych (takich jak podklasy NavType). Wszystkie funkcje rozszerzeń Kotlin, które były częścią artefaktów -ktx, zostały przeniesione do odpowiednich artefaktów głównych. Artefakty -ktx będą nadal publikowane, ale będą całkowicie puste.
  • Artefakt navigation-fragment zawiera teraz gotową implementację układu z dwoma panelami za pomocą nowego interfejsu AbstractListDetailFragment. Ten fragment korzysta z elementu SlidingPaneLayout do zarządzania panelem listy (udostępnianym przez Twoją klasę podrzędną) i panelem szczegółów, w którym implementacją jest NavHostFragment, tak jak w naszej przykładowej implementacji.
  • Metoda currentBackStackEntryAsFlow() w systemie NavController udostępnia Flow, który jest emitowany zawsze, gdy zmienia się bieżąca wartość NavBackStackEntry. Możesz użyć tego procesu zamiast ręcznego zarządzania elementem OnDestinationChangedListener.
  • NavController umożliwia teraz pobranie listy wszystkich widocznych instancji NavBackStackEntry w postaci elementu StateFlow za pomocą eksperymentalnej właściwości visibleEntries.
  • Teraz można rozszerzyć klasę NavType, aby tworzyć niestandardowe obiekty NavType. Typy niestandardowe są obsługiwane tylko w przypadku automatycznego tworzenia grafów nawigacyjnych, na przykład za pomocą Navigation Graph Kotlin DSL.
  • Nawigacja udostępnia teraz interfejsy API findStartDestination() i getHierarchy(), które można wykorzystać do wdrożenia niestandardowego interfejsu NavigationUI. findStartDestination() to funkcja rozszerzenia w usłudze NavGraph, która wskazuje miejsce docelowe początkowego, które wyświetli się po przejściu do wykresu, nawet jeśli startDestination jest zagnieżdżonym elementem NavGraph. getHierarchy() to funkcja w funkcji 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 usługi NavigationUI, które korzystały z klasy BottomNavigationView, zostały zaktualizowane, tak aby zajmowały nadrzędną klasę wprowadzone w interfejsie Material 1.4.0 w języku: NavigationBarView. Zezwala na używanie tych metod w NavigationRailView.

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

  • Bezpieczne argumenty generują 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 nawigacyjne i DSL Kotlin

Poprzednie wersje Nawigacji polegały na tym, że każde miejsce docelowe miało stały identyfikator całkowity, który jednoznacznie identyfikowałby je na podstawie obu miejsc docelowych i umożliwiał navigate()dojście do tego miejsca docelowego bezpośrednio lub przez działanie. Chociaż taki wykres nadal jest przydatny i przydatny, zwłaszcza w przypadkach, gdy definiujesz graf nawigacji w formacie XML i możesz używać automatycznie generowanych stałych R.id lub Bezpiecznego argumentów (które wykorzystują te stałe do generowania kodu podczas kompilacji), ten system unikalnych liczb całkowitych nie umożliwiał rozpoznawania semantycznego znaczenia i wyrazu potrzebnego do obsługi w pełni dynamicznych wykresów tworzonych na podstawie oprogramowania Navigation Kotlin DSL.

W tej wersji wprowadziliśmy nową opcję, która pozwala jednoznacznie zidentyfikować miejsce docelowe na wykresie nawigacyjnym według jego trasy. Trasa to element typu String, który określa unikalną ścieżkę do miejsca docelowego. Wszystkie metody DSL Kotlin, które korzystały z identyfikatora miejsca docelowego, zostały wycofane i zastąpione odpowiednikiem API, który korzysta z trasy.

Każda trasa powinna być traktowana jako część atrybutu Uri, która określa dany cel podróży, np. home, profile/{userId}, profile/{userId}/friends itp. Jeśli tożsamość miejsca docelowego jest powiązana z konkretnym fragmentem treści, te dynamiczne argumenty powinny być częścią trasy zgodnie z tymi samymi regułami co pośrednie precyzyjne linki.

Wszystkie interfejsy API usługi NavController, które dotychczas przyjmowały tylko identyfikator, mają teraz przeciążenie, które obejmuje trasę String. Są to między innymi navigate(), popBackStack(), popUpTo() i getBackStackEntry().

Ma to wpływ na interfejs API:

  • Właściwość popUpTo Kotlin w DSL Kotlin została wycofana i zastąpiona przez popUpToId.
  • Interfejs API getStartDestination() został wycofany i zastąpiony przez getStartDestinationId().

W przeciwieństwie do nawigacji według identyfikatora nawigacja według trasy podlega tym samym zasadom co pośrednie precyzyjne linki, ponieważ można bezpośrednio nawigować do dowolnego miejsca docelowego na dowolnym wykresie zagnieżdżonym. Dzięki temu możesz korzystać z tych tras w projektach wielomodułowych bez konieczności dodawania widocznego zewnętrznie precyzyjnego linku do każdego miejsca docelowego.

Tworzenie nawigacji

Artefakt navigation-compose zapewnia integrację między komponentem nawigacji a Jetpack Compose. Jako miejsca docelowe w aplikacji używa on funkcji @Composable.

W tej wersji:

  • Funkcja kompozycyjna NavHost, która umożliwia tworzenie grafu nawigacji przez DSL Kotlin i korzysta z miejsc docelowych composable i dialog. Dodatkowo obsługuje opcjonalne nawigatory, np. te z materiałów nawigacyjnych akompaniistów.
  • Obowiązkowa obsługa przechodzenia między miejscami docelowymi. Accompanist Navigation Animation może być używana do sterowania przejściami wejścia i wyjścia za pomocą eksperymentalnych interfejsów API tworzenia wiadomości.
  • Określanie zakresu wartości Lifecycle do każdego miejsca docelowego kompozycyjnego. Każde miejsce docelowe osiąga stan RESUMED tylko po zakończeniu dowolnego wejścia przejść i natychmiast spada do STARTED po rozpoczęciu dowolnego przejścia. Pozwala to uniknąć wszystkich problemów IllegalStateException i wielodotyku przez wywoływanie wywołania navigate tylko wtedy, gdy Lifecycle ma wartość RESUMED.
  • Określanie zakresu wartości ViewModel (za pomocą interfejsu viewModel() API Lifecycle ViewModel Compose 2.4.0 lub hiltViewModel() funkcji Hilt Navigation Compose 1.0.0 na poziomie miejsca docelowego, które zapewnia zakres, który przetrwa zmiany konfiguracji i pozostanie na stosie wstecznym (gdy treść kompozycyjna jest w innym przypadku usunięta) oraz sygnał w modelu onCleared() widoku danych wskazujący na trwałe usunięcie i oczyszczenie stanu powiązanego z tym elementem NavBackStackEntry.
  • Określenie zakresu stanu rememberSaveable na poziomie miejsca docelowego, dzięki czemu cały stan kompozycji jest automatycznie zapisany i przywracany po powrocie do miejsca docelowego.
  • Pełna obsługa zapisywania i przywracania NavController oraz stanu miejsca docelowego po śmierci i przywróceniu stanu procesu.
  • Automatyczna integracja z systemowym przyciskiem Wstecz.
  • Obsługa przekazywania argumentów, dołączania precyzyjnych linków do miejsc docelowych oraz zwracania wyniku do poprzednich miejsc docelowych.

  • Utwórz konkretne elementy pomocnicze w rememberNavController() i currentBackStackEntryAsState(), aby umożliwić stan podnoszenia i łączenie elementu NavController z kompozytami spoza obszaru NavHost (np. dolnym paskiem nawigacyjnym).

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

Więcej informacji znajdziesz w Przewodniku po tworzeniu wiadomości.

Wiele wstecznych stosów

Kontroler NavController odpowiada za zarządzanie wstecznym stosem miejsc docelowych, dodawanie miejsc docelowych do stosu tylnego, gdy navigate() do nich i usuwanie ich po wywołaniu popBackStack() lub uruchomieniu systemowego przycisku Wstecz. Istniejąca klasa NavOptions i integracja z elementami <action> w kodzie XML wykresu nawigacyjnego zostały rozszerzone, aby obsługiwać zapisywanie i przywracanie stosu wstecznego.

W ramach tej zmiany metody NavigationUI w onNavDestinationSelected(), BottomNavigationView.setupWithNavController() i NavigationView.setupWithNavController() automatycznie zapisują i przywracają stan pobranych miejsc docelowych. Zapewnia to obsługę wielu stosów wstecznych bez wprowadzania zmian w kodzie. W przypadku korzystania z nawigacji z fragmentami kodu jest to zalecany sposób integracji z wieloma stosami wstecznymi.

Podstawowe interfejsy API do zapisywania i przywracania stanu są udostępniane na wielu platformach:

  • W pliku XML nawigacji element <action> może teraz używać atrybutów logicznych app:popUpToSaveState i app:restoreState do zapisywania stanu wszystkich miejsc docelowych pobranych przez app:popUpTo i przywracania stanu powiązanego z miejscem docelowym przekazanym jako app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • W narzędziu DSL navOptions Kotlin możesz dodać właściwość wartości logicznej restoreState i wartość logiczną saveState w kreatorze 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
      }
    }
    
  • Podczas ręcznego tworzenia obiektu NavOptions za pomocą interfejsu NavOptions.Builder możesz użyć setRestoreState() i nowego przeciążenia w setPopUpTo(), które wymagają dodatkowego parametru 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.

  • Za pomocą metody clearBackStack() możesz wyczyścić wszystkie stany zapisane za pomocą metody popBackStack() lub popUpToSaveState.

We wszystkich przypadkach NavController zapisze i przywróci stan każdego elementu NavBackStackEntry, w tym instancje miejsca docelowego nawigacji o zakresie ViewModel. Interfejsy API Navigator zostały zaktualizowane, dzięki czemu każdy element Navigator obsługuje zapisywanie i przywracanie własnego stanu.

Zmiany w działaniu

  • NavDeepLinkBuilder dodaje teraz PendingIntent.FLAG_IMMUTABLE do PendingIntent zwróconej przez createPendingIntent(), dzięki czemu ten interfejs API będzie działać zgodnie z oczekiwaniami w przypadku kierowania na Androida 12.
  • Nawigacja opiera się teraz na cyklu życia 2.3.1 i oznacza setGraph(), popBackStack(), navigateUp() i navigate(), czyli metody, które aktualizują NavBackStackEntry Lifecycle jako @MainThread, dostosowując Nawigację do egzekwowania zasad dotyczących wątku głównego wprowadzonych w cyklu życia 2.3.0.
  • Precyzyjne linki sprawdzają teraz, czy Uri zawiera wszystkie wymagane argumenty (te bez wartości domyślnych).
  • Przeanalizowane argumenty funkcji NavDeepLink uwzględniają teraz znaki funta w taki sam sposób, jak znaki zapytania jako separator między segmentami ścieżki, co zapobiega rozpięciu argumentu na znak funta.
  • Podczas generowania działań kod Kotlin wygenerowany za pomocą Safe Args umieszcza teraz argumenty bez wartości domyślnych przed tymi z wartościami domyślnymi jako parametry.
  • Podczas generowania argumentów Bezpieczne argumenty umieszczają teraz parametry bez wartości domyślnych przed tymi z wartościami domyślnymi.
  • Safe-Args wymaga teraz wtyczki Androida do obsługi Gradle w wersji 4.2.0. Oznacza to, że ostrzeżenie o używaniu aplikacji applicationIdTextResource nie powinno już być wyświetlane.

Znane problemy

  • Naprawiono w Nawigacji 2.5.0-alpha01: dostęp do elementu ViewModel utworzonego przy użyciu by navGraphViewModels() z fragmentu onCreate() fragmentu kończy się niepowodzeniem z wartością IllegalStateException. (b/213504272)
  • Poprawiono w sekcji Nawigacja 2.5.0-alpha01: Bezpieczne argumenty w wersji 2.4.0 są niezgodne z wtyczką Androida do obsługi Gradle w wersji 7.1.0 i nowszych. (b/213086135)
  • Precyzyjne linki z wieloma zagnieżdżonymi wykresami nawigacyjnymi nie tworzą poprawnie pełnego stosu. (B/214383060)

Wersja 2.4.0-rc01

15 grudnia 2021 roku

Usługa androidx.navigation:navigation-*:2.4.0-rc01 została zwolniona. Wersja 2.4.0-rc01 zawiera te zatwierdzenia.

Zmiany w działaniu

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

Poprawki błędów

  • Precyzyjne linki nie będą już ignorować argumentów z wartościami takimi jak nazwa obiektu zastępczego. (If8017, b/207389470)
  • NavController nie będzie już ulegać awarii podczas wyświetlania zagnieżdżonego miejsca docelowego przy użyciu przejścia po przywróceniu elementu NavController. (I0f7c9, b/205021623)
  • Komunikat o błędzie podczas korzystania z nieprawidłowej wartości atrybutu startDestination będzie teraz domyślnie korzystać z trasy początkowej, jeśli jest ona dostępna. (I86b9d, b/208041894)

Poprawki błędów w tworzeniu nawigacji

  • Naprawiliśmy potencjalną awarię powodowaną przez szybkie przełączanie się między miejscem początkowym a innym miejscem docelowym za pomocą dolnych elementów menu nawigacyjnego. (IC8976, b/208887901)
  • Miejsce docelowe okna jest teraz prawidłowo przywracane u góry ekranu po zmianie konfiguracji lub śmierci procesu. (I4c0dc, b/207386169)
  • Rozwiązaliśmy problem, który powodował, że próba pobrania elementu ViewModel z okna NavBackStackEntry kończyła się niepowodzeniem po zamknięciu okna. (I6b96d, b/206465487)
  • Rozwiązaliśmy problem, który powodował, że podczas korzystania z celów podróży w activity z elementem NavHost w narzędziu Nawigacja w interfejsie można było nieskończone zmienianie kompozycji. (I8f64C)
  • Naprawiono wyciek w funkcji Kompozycje nawigacji, w wyniku którego po zmianie konfiguracji lub śmierci procesu pozostał on w odniesieniu do starej aktywności. (I4efcb, b/204905432)

Poprawki błędów Safe Args

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

Wersja 2.4.0-beta02

3 listopada 2021 r.

Usługa androidx.navigation:navigation-*:2.4.0-beta02 została zwolniona. Wersja 2.4.0-beta02 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Obsługa jawnych i niejawnych precyzyjnych linków teraz automatycznie dodaje flagę saveState podczas przechodzenia do innego wykresu, dzięki czemu kod taki jak NavigationUI.setupWithNavController i kod wykorzystujący kilka stosów wstecznych działa zgodnie z oczekiwaniami. (IC8807)

Zmiany w działaniu

  • Wzorce precyzyjnych linków są teraz kompilowane leniwie w NavDeepLink, a nie podczas inflacji. Powinno to skrócić czas inflacji na wykresach nawigacyjnych zawierających precyzyjne linki. (b8d257, b/184149935)

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że po przeniesieniu do Lifecycle.State.STARTED element NavBackStackEntries był przenoszony w dół do klasy Lifecycle.State.CREATED, gdy obiekt NavHost był dodawany bezpośrednio do setContent() aktywności. (Ia5ac1, b/203536683)
  • Naprawiono warunek wyścigu, w którym wydzielenie miejsca docelowego DialogFragment z backendu przed wyświetleniem okna nie powodowało zamknięcia okna, co powodowało awarię po ręcznym zamknięciu okna błędu. (I687e5)
  • Rozwiązaliśmy problem, który powodował, że interfejs API onNavDestinationSelected w witrynie NavigationUI zwracał wartość true nawet wtedy, gdy do tego wykresu nawigacyjnego nie było parametru navigate(). Używa teraz tej samej logiki używanej wewnętrznie przez usługę setupWithNavController do wybierania tylko tych usług (MenuItem) powiązanych z bieżącym miejscem docelowym za pomocą jego właściwości hierarchy. (I2b053)

Wersja 2.4.0-beta01

27 października 2021 roku

Usługa androidx.navigation:navigation-*:2.4.0-beta01 została zwolniona. Wersja 2.4.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany interfejsu API

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

Poprawki błędów

  • ViewModele nie będą już niszczone, gdy przejścia są przerywane przez poruszanie się między tymi samymi ekranami (Id52d8, b/200817333)
  • Podczas dodawania precyzyjnych linków do linków NavDestination nie trzeba już podawać wartości domyślnej w argumencie NavDeepLink. (I5aad4, b/201320030)
  • NavBackStackEntries z różnymi cyklami życia nie są już uważane za równe. Oznacza to, że NavHost prawidłowo ponownie skomponuje wszystkie miejsca docelowe podczas nawigacji z użyciem funkcji singleTop oraz po ponownym wybraniu dolnych pozycji menu. (I1b351, b/196997433)
  • Rozwiązaliśmy problem z elementem AbstractListDetailFragment, który powodował, że atrybuty layout_width i layout_weight w panelu listy zwracane przez funkcję onCreateListPaneView() były nieprawidłowo obsługiwane lub ignorowane. (f5fbf3)
  • Wizualny stan miejsc docelowych w oknach jest teraz prawidłowo zsynchronizowany ze stanem DialogFragmentNavigator. Oznacza to, że ręczne wywołanie asynchronicznego interfejsu API dismiss() dla DialogFragment teraz prawidłowo czyści wszystkie miejsca docelowe okna nad zamkniętym teraz oknem. Nie ma to wpływu na przypadki, gdy używasz popUpTo lub popBackStack() do zamknięcia okna. (I77ba2)
  • Usługa AbstractAppBarOnDestinationChangedListener wyświetla teraz bardziej przejrzyste komunikaty o błędach w przypadku usługi onDestinationChanged(). (IE742D)

Wersja 2.4.0-alfa10

29 września 2021 r.

Usługa androidx.navigation:navigation-*:2.4.0-alpha10 została zwolniona. Wersja 2.4.0-alfa10 zawiera te zatwierdzenia.

Nowe funkcje

  • NavController umożliwia teraz pobieranie listy wszystkich widocznych instancji NavBackStackEntry przez visibleEntries StateFlow (Ia964e)
  • rememberNavController() wykorzystuje teraz opcjonalny zestaw Navigator instancji, które zostaną dodane do zwróconego NavController, aby lepiej obsługiwać opcjonalne elementy nawigacyjne, takie jak Accompanist Navigation Material. (I4619e)

Poprawki błędów

  • Dynamiczna nawigacja nie będzie już ulegać awarii po odtworzeniu aktywności. (Ifa6a3, b/197942869)
  • Rozwiązaliśmy problem z systemowym przyciskiem Wstecz, który występował tylko po powrocie do miejsca docelowego kompozycyjnego zawierającego NavHost. (3ed148, b/195668143)
  • Teraz SafeArgs generuje argumenty fromBundle() i fromSavedStateHandle() we właściwej kolejności. (I824a8, b/200059831)

Wersja 2.4.0-alpha09

15 września 2021 r.

Usługa androidx.navigation:navigation-*:2.4.0-alpha09 została zwolniona. Wersja 2.4.0-alfa09 zawiera te zatwierdzenia.

Nowe funkcje

  • Za pomocą metody clearBackStack() możesz teraz wyczyścić wszystkie stany zapisane za pomocą metody popBackStack() lub popUpToSaveState. (I80a0F)
  • Teraz możesz przekazać listę argumentów lub precyzyjne linki do kreatora zagnieżdżonego wykresu nawigacyjnego, a zostaną one automatycznie dodane do wynikowego wykresu. (I8a470, b/182545357)

Zmiany interfejsu API

  • Funkcja DSL navArgument Kotlin jest teraz częścią navigation-common, a nie navigation-compose. Aby nadal korzystać z tej funkcji, konieczne będzie zaktualizowanie importów. (I1D095).

Zmiany w działaniu

  • Podczas generowania argumentów Bezpieczne argumenty umieszczają teraz parametry bez wartości domyślnych przed tymi z wartościami domyślnymi. (I89709, b/198493585)

Poprawki błędów

  • Gdy używa się funkcji tworzenia nawigacji, wykresy nawigacyjne mają wartość DESTROYED dopiero wtedy, gdy wszystkie dzieci dzieci są DESTROYED. (I86552, b/198741720)
  • Argumenty NavDeepLink do wartości null nie wymagają już wartości domyślnej. (Ia14ef, b/198689811)
  • Wywołanie funkcji setGraph() z nowym wykresem spowoduje też usunięcie wszystkich zapisanych stosów zwrotnych. (I97f96)
  • Rozwiązaliśmy problem, który powodował, że instancje OnDestinationChangedListener i currentBackStackEntryFlow nie były powiadamiane, gdy użyto launchSingleTop. (Iaaebc).

Aktualizacje zależności

Wersja 2.4.0-alpha08

1 września 2021 roku

Usługa androidx.navigation:navigation-*:2.4.0-alpha08 została zwolniona. Wersja 2.4.0-alfa08 zawiera te zatwierdzenia.

Nowe funkcje

  • Teraz można rozszerzyć klasę NavType, aby tworzyć niestandardowe obiekty NavType. Typy niestandardowe są obsługiwane tylko w przypadku automatycznego tworzenia grafów nawigacyjnych, na przykład za pomocą Navigation Graph Kotlin DSL. (I78440, b/196871885)

Zmiany w działaniu

  • Podczas generowania działań kod Kotlin wygenerowany za pomocą Safe Args umieszcza teraz argumenty bez wartości domyślnych przed tymi z wartościami domyślnymi jako parametry. (Idb697, b/188855904)
  • Precyzyjne linki sprawdzają teraz, czy Uri zawiera wszystkie wymagane argumenty (te bez wartości domyślnych). (nr 204, b/185527157)

Poprawki błędów

  • Użycie właściwości getBackStackEntry i previousBackStackEntry w komponencie composable() w połączeniu z zasadą remember() nie będzie już powodować wyjątku w sytuacji, gdy w stosie wstecznym nie będzie żadnego miejsca docelowego. (I75138, b/194313238)
  • Narzędzie Navigation Compose teraz prawidłowo komponuje się ponownie, gdy zmieniasz argumenty stosu wstecznego i używasz funkcji launchSingleTop=true. (Iebd69, b/186392337)
  • Podczas wywoływania setGraph z wykresem zawierającym 13 lub 29 miejsc docelowych nie będzie już ArrayIndexOutOfBoundsException. (I1a9f1, b/195171984)
  • Generator JavaScript SafeArgs nie powinien już powodować ostrzeżeń lint podczas generowania klas Args. (I1a666, b/185843837)

Treści tłumaczone przez użytkowników zewnętrznych

  • Dziękujemy za pomocą ospixd za sprawdzenie, czy precyzyjne linki sprawdzają, czy Uri zawiera wszystkie wymagane argumenty (te bez wartości domyślnych). (nr 204, b/185527157)

Wersja 2.4.0-alpha07

18 sierpnia 2021 r.

Usługa androidx.navigation:navigation-*:2.4.0-alpha07 została zwolniona. Wersja 2.4.0-alfa07 zawiera te zatwierdzenia.

Poprawki błędów

  • Teraz funkcja Navigation Compose poprawnie zapisuje stan po zmianie konfiguracji i na wykresach przy użyciu funkcji wielu stosów wstecznych. (If5a3d, b/195141957)
  • Ponowne wybranie tej samej karty w przypadku używania nawigacji tworzenia wiadomości z kilkoma tylnymi stosami nie spowoduje już wyświetlania pustego ekranu. (I860dc, b/194925622)
  • Funkcja NavHost obserwuje teraz zmiany w Lifecycle.State z NavBackStackEntry s, co oznacza, że użycie elementu NavHost we fragmencie zostanie teraz prawidłowo skomponowane wraz ze zmianami cyklu życia, zamiast wyświetlać pusty ekran. (I4eb85, b/195864489)
  • Rozwiązaliśmy problem, który powodował, że zamknięcie obiektu DialogFragment nie powodowało prawidłowej aktualizacji stanu NavController po ponownym utworzeniu aktywności (tj. po zmianie konfiguracji). (ICD72B)
  • Rozwiązaliśmy problem, który powodował, że wyświetlenie miejsca docelowego w oknie nie wiązało się z aktualizacją obsługi przycisków Wstecz w kontrolerze NavController. Mogło to spowodować przechwycenie przycisku Wstecz przez NavController, mimo że nie miało on żadnego stosu. (If3b34).
  • Bezpieczne argumenty automatycznie generują teraz metodę toSavedStateHandle dla argumentów, których można użyć do testowania kodu ViewModel. (If1e2d, b/193353880)

Wersja 2.4.0-alpha06

4 sierpnia 2021 r.

Usługa androidx.navigation:navigation-*:2.4.0-alpha06 została zwolniona. Wersja 2.4.0-alfa06 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Nazwy metod requireSlidingPaneLayout() i requireDetailPaneNavHostFragment() w systemie AbstractListDetailFragment zostały zmienione na odpowiednio getSlidingPaneLayout() i getDetailPaneNavHostFragment(). (I34a08)

Zmiany w działaniu

  • Podczas korzystania z animacji (np. Crossfade) wartość Lifecycle nowego miejsca docelowego osiągnie wartość RESUMED dopiero po zakończeniu animacji. (If0543, b/172112072, b/194301889)
  • Funkcja NavHost w narzędziu Navigation Compose ustawia teraz wykres jako część pierwszej kompozycji. (Ieb7be)

Poprawki błędów

  • Przebicie ostatniego miejsca docelowego wykresu nawigacyjnego nie powoduje już wyświetlenia ClassCastException. (If0543, b/172112072, b/194301889)
  • Naprawiono błąd NullPointerException, który występował podczas dodawania precyzyjnego linku bez Uri oraz nawigowania za pomocą trasy lub precyzyjnego linku. (938a0c, b/193805425)
  • Naprawiono błąd w funkcji tworzenia nawigacji, który powodował, że precyzyjny linkNavBackStackEntry nie docierał do stanuRESUMED. (I192C5)
  • Naprawiono błąd, który powodował, że wyświetlenie miejsca docelowego okna dialogowego nie aktualizowało obsługi systemowego przycisku Wstecz w kontrolerze NavController. Mogło to powodować przechwytywanie przycisku Wstecz przez kontroler NavController, mimo że nie miał on wyskakującego stosu tylnego. (Aosp/1782668).

Wersja 2.4.0-alpha05

21 lipca 2021 r.

Usługa androidx.navigation:navigation-*:2.4.0-alpha05 została zwolniona. Wersja 2.4.0-alfa05 zawiera te zatwierdzenia.

Zmiany w działaniu

  • Funkcja NavHost w narzędziu NavHost do nawigacji po miejscach docelowych zawsze używa teraz przenikania. (I07049, b/172112072)
  • Możesz teraz wprowadzać zmiany na wykresie NavHost. Wykresy z tym samym miejscem początkowym i miejscami docelowymi w wykresie będą uznawane za równe i nie wyczyściją stosu wstecznego NavController. (I0b8db, b/175392262)

Poprawki błędów

  • Naprawiono błąd NoSuchElementException wywoływany popBackStack() z poziomu LifecycleObserver dołączonego do NavBackStackEntry powodowanego przez powtarzające się aktualizacje stanu kontrolera NavController. (I64621)
  • AbstractListDetailFragment umożliwia teraz całkowite usunięcie elementu SlidingPaneLayout z pakietu APK, gdy AbstractListDetailFragment nie jest używany. (I611ad).
  • NavGraph i NavDestination zastępują teraz metodę równości, więc 2 obiekty z tymi samymi wartościami będą uznawane za równe. (I166eb, b/175392262)

Wersja 2.4.0-alpha04

1 lipca 2021 r.

Usługa androidx.navigation:navigation-*:2.4.0-alpha04 została zwolniona. Wersja 2.4.0-alfa04 zawiera te zatwierdzenia.

Nowe funkcje

  • Artefakt navigation-fragment zawiera teraz gotową implementację układu z dwoma panelami za pomocą nowego interfejsu AbstractListDetailFragment. Ten fragment korzysta z elementu SlidingPaneLayout do zarządzania panelem listy (udostępnianym przez Twoją klasę podrzędną) i panelem szczegółów, w którym implementacją jest NavHostFragment, tak jak w naszej przykładowej implementacji. (Iac4be, b/191276636)
  • NavHost artefaktu navigation-compose obsługuje teraz miejsca docelowe dialog, a nie tylko composable. Te miejsca docelowe okien będą wyświetlane w komponencie Dialog unoszącym 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 interfejsu API

  • Nazwa funkcji add w NavigatorState została zmieniona na push. Wszystkie bieżące wywołania funkcji add() trzeba zmienić na push(). (Ie89fc, b/172112072).
  • Niestandardowe instancje Navigator mogą teraz używać interfejsów API pushWithTransaction i popWithTransition w systemie NavigatorState do asynchronicznego przekazywania lub wypychania miejsca docelowego. Pamiętaj, że te interfejsy API nie są jeszcze używane przez żaden z uwzględnionych nawigatorów. (Ic4d7c, b/172112072)

Zmiany w działaniu

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

Poprawki błędów

  • Rozwiązaliśmy problem z funkcją <include-dynamic>, który powodował, że argumenty przekazywane do wykresu nie były prawidłowo przekazywane do wykresu dołączanego dynamicznie. (I3E115).
  • Naprawiono błąd NullPointerException występujący podczas przechodzenia do miejsca docelowego przy użyciu argumentu string[] z wartością domyślną @null. (I1fbe8)
  • Dodaj reguły ProGuard dla @Navigator.Name, aby rozwiązać problemy w przypadku korzystania z trybu pełnego w wersji R8 3.1. (I2add9, b/191654433)
  • Element SafeArgs nie będzie już kończyć się niepowodzeniem podczas tworzenia aplikacji z użyciem wersji Kotlin przed 1.5.0. (Icd1ff, b/190739257)

Wersja 2.4.0-alpha03

16 czerwca 2021 r.

Usługa androidx.navigation:navigation-*:2.4.0-alpha03 została zwolniona. Wersja 2.4.0-alfa03 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że przejście do uwzględnionego wykresu dynamicznego wymagało 2 wywołań navigate(). (I7785c, b/188859835)
  • Naprawiono regresję wprowadzoną w Nawigacji 2.4.0-alpha01, w której funkcja setupActionBarWithNavController() nie usuwała prawidłowo ikony w górę, gdy jesteś w miejscu docelowym najwyższego poziomu. (I5d443, b/189868637)
  • Naprawiono błąd IllegalStateException występujący podczas wywoływania popBackStack() po wcześniejszym wyświetleniu wykresu głównego w NavController. (I2a330, b/190265699)
  • Reguły ProGuard dla by navArgs() są teraz prawidłowo stosowane, gdy używasz navigation-common lub innych zależnych od niego artefaktów. (I68800, b/190082521)
  • OnDestinationChangedListener, który wywołuje navigate() po raz pierwszy przy pierwszym wywołaniu zwrotnym, otrzymuje teraz drugie wywołanie zwrotne z miejscem docelowym, do którego przeszedł. (Ie5f9e, b/190228815)
  • Bezpieczny argument nie ulega już awarii, gdy jest używany z dynamicznymi modułami funkcji i formatem AGP w wersji 7.0 lub nowszej. (I69518, b/189966576)

Znany problem

  • Podczas korzystania z narzędzia Gradle 6.7.0 bezpieczne argumenty będą kończyć się błędem Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’ z powodu zależności od starszej wersji Kotlin. Aby obejść ten problem, zaktualizuj narzędzie, aby używało Gradle w wersji 7.0. (b/190739257)

Wersja 2.4.0-alpha02

2 czerwca 2021 r.

Usługa androidx.navigation:navigation-*:2.4.0-alpha02 została zwolniona. Wersja 2.4.0-alfa02 zawiera te zatwierdzenia.

Nowe funkcje

  • Trasy są teraz obsługiwane w przypadku miejsc docelowych typu Activity, Fragment i Dialog, a także w całej DSL dynamicznej nawigacji Kotlin. (Ib5544, Ia617b, I22f96, b/188914648, b/188901565)
  • NavigationUI tymczasowo dodała eksperymentalne interfejsy API, aby umożliwić rezygnację z zapisywania stanu. Choć zawsze zapisywanie stanu jest prawidłowe, w dalszym ciągu są używane wycofane biblioteki (np.zachowane fragmenty), których nie można obsługiwać podczas zapisywania stanu. Umożliwia to aplikacjom powolną konwersję z nieobsługiwanych interfejsów API. (Idf93c).
  • Nawigacja udostępnia teraz interfejsy API findDestination() i getHierarchy(), które można wykorzystać do wdrożenia niestandardowego interfejsu NavigationUI. findDestination() to funkcja rozszerzenia NavGraph, która znajduje miejsce docelowe na wykresie. getHierarchy() to funkcja w obiekcie NavDestination, której można użyć do sprawdzenia, czy dane miejsce docelowe znajduje się w hierarchii innego miejsca docelowego.(I2932f, b/188183365)

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • Metody interfejsu NavigationUI, które korzystały z interfejsu BottomNavigationView, zostały zaktualizowane, aby zajmowały nadrzędną klasę wprowadzone w Material 1.4.0 (NavigationBarView). Zezwala na używanie tych metod w NavigationRailView. (Ib0b36, b/182938895)

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

Zmiany interfejsu API

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

Poprawki błędów

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

  • Bezpieczne argumenty nie ulegają już awarii podczas próby wygenerowania właściwości kierunków w Kotlin. (Id2416, b/188564435)

  • Metoda setId w NavDestination jest teraz prawidłowo oznaczona adnotacjami za pomocą właściwości @IdRes, więc akceptuje tylko identyfikatory zasobów. (I69b80)

  • Parametr int klasy findNode ma teraz wartość resId zamiast resid. (I7711D)

Aktualizacja zależności

  • Safe-Args wymaga teraz wtyczki Androida do obsługi Gradle w wersji 4.2.0. Oznacza to, że ostrzeżenie o używaniu aplikacji applicationIdTextResource nie powinno już być wyświetlane. (I6d67b, b/172824579)

Wersja 2.4.0-alpha01

18 maja 2021 r.

Usługa androidx.navigation:navigation-*:2.4.0-alpha01 została zwolniona. Wersja 2.4.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

  • Metoda currentBackStackEntryAsFlow() w systemie NavController udostępnia Flow, który jest emitowany zawsze, gdy zmienia się bieżąca wartość NavBackStackEntry. Możesz użyć tego procesu zamiast ręcznego zarządzania elementem OnDestinationChangedListener. (I19c4a, #89, b/163947280)

Wiele wstecznych stosów

Kontroler NavController odpowiada za zarządzanie wstecznym stosem miejsc docelowych, dodawanie miejsc docelowych do stosu tylnego, gdy navigate() do nich i usuwanie ich po wywołaniu popBackStack() lub uruchomieniu systemowego przycisku Wstecz. Istniejąca klasa NavOptions i integracja z wpisami <action> w kodzie XML wykresu nawigacji zostały rozszerzone, aby obsługiwać zapisywanie i przywracanie stosu wstecznego. (B/80029773)

W ramach tej zmiany metody NavigationUI w onNavDestinationSelected(), BottomNavigationView.setupWithNavController() i NavigationView.setupWithNavController() automatycznie zapisują i przywracają stan pobranych miejsc docelowych. Zapewnia to obsługę wielu stosów wstecznych bez wprowadzania zmian w kodzie. W przypadku korzystania z nawigacji z fragmentami kodu jest to zalecany sposób integracji z wieloma stosami wstecznymi. (IE07CA)

Podstawowe interfejsy API do zapisywania i przywracania stanu są udostępniane na wielu platformach:

  • W pliku XML nawigacji element <action> może teraz używać atrybutów logicznych app:popUpToSaveState i app:restoreState do zapisywania stanu wszystkich miejsc docelowych pobranych przez app:popUpTo i przywracania stanu powiązanego z miejscem docelowym przekazanym jako app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • W narzędziu DSL navOptions Kotlin możesz dodać właściwość wartości logicznej restoreState i wartość logiczną saveState w kreatorze popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • Podczas ręcznego tworzenia obiektu NavOptions za pomocą interfejsu NavOptions.Builder możesz użyć setRestoreState() i nowego przeciążenia w setPopUpTo(), które wymagają dodatkowego parametru 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 elementu NavBackStackEntry, w tym instancje miejsca docelowego nawigacji o zakresie ViewModel. Interfejsy API Navigator zostały zaktualizowane, dzięki czemu każdy element Navigator obsługuje zapisywanie i przywracanie własnego stanu.

ComposeNavigator używane w przypadku miejsc docelowych composable w narzędziu Nawigacja oraz FragmentNavigator i DynamicFragmentNavigator używane na potrzeby miejsc docelowych <fragment> w Nawigacji z fragmentami z fragmentami z krzyżykiem zostały zaktualizowane, aby korzystały z nowych interfejsów Navigator API oraz obsługują zapisywanie i przywracanie stanu.

Trasy nawigacji

Trasa to identyfikator String, który jednoznacznie identyfikuje miejsce docelowe. Chociaż wcześniej ta koncepcja była używana tylko w narzędziu Navigation Compose, teraz jest już częścią podstawowych interfejsów API nawigacji. Jest to metoda alternatywna do korzystania z identyfikatorów całkowitych podczas tworzenia grafu za pomocą funkcji DSL nawigacji Kotlin. (b/172823546)

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

Ma to wpływ na interfejs API:

  • Właściwość kotlin popUpTo na platformie DSL Kotlin została wycofana i zastąpiona popUpToId. (I59c73, b/172823546)
  • Interfejs API getStartDestination() został wycofany i zastąpiony przez getStartDestinationId(). (I0887f, b/172823546)

Jeśli deweloperzy przechodzą z poprzednich wersji Navigation Compose do funkcji Navigation Compose 2.4.0-alpha01, oznacza to, że nie jest już potrzebny importowanie następujących metod rozszerzeń 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 funkcji NavDestination, dzięki czemu możesz bezpośrednio wywołać funkcję navBackStackEntry.destination.route.

Zmiany interfejsu API

  • Wszystkie artefakty nawigacji zostały przepisane w języku Kotlin. Dzięki temu zwiększyło się możliwość wartości null klas korzystających z klas ogólnych (takich jak podklasy NavType). Wszystkie funkcje rozszerzeń Kotlin, które były częścią artefaktów -ktx, zostały przeniesione do odpowiednich artefaktów głównych. Artefakty -ktx będą nadal publikowane, ale będą całkowicie puste. (b/184292145)
  • NavDeepLinkBuilder umożliwia teraz dodawanie wielu różnych miejsc docelowych do wygenerowanego stosu zwrotnego. (I3ee0d, b/147913689)
  • Dodaj funkcje fabryczne do urządzenia DynamicNavHostFragment (IcD515, b/175222619)
  • Unikalny identyfikator instancji NavBackStackEntry jest teraz widoczny jako część jego publicznego interfejsu API. (IE033a)
  • Pola name i argument oraz funkcje niszczenia NamedNavArgument są teraz publiczne. (nr 174, b/181320559)
  • Wprowadziliśmy nowe rozszerzenie NavBackStackEntry#provideToCompositionLocals, które udostępnia NavBackStackEntry odpowiednim użytkownikom lokalnym kompozycji. (nr 175, b/187229439)

Bezpieczne argumenty

  • Bezpieczne argumenty generują 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 Bezpieczne argumenty, aby bazowały na KotlinPoet 1.8.0. (nr 172, b/183990444)

Zmiany w działaniu

  • Nawigacja opiera się teraz na cyklu życia 2.3.1 i oznacza setGraph(), popBackStack(), navigateUp() i navigate(), czyli metody, które aktualizują NavBackStackEntry Lifecycle jako @MainThread, dostosowując Nawigację do egzekwowania zasad dotyczących wątku głównego wprowadzonych w cyklu życia 2.3.0. (b/171125856)
  • Wielkość liter w argumentach typu enum z precyzyjnych linków nie jest teraz rozróżniana, dzięki czemu precyzyjny link, taki jak http://www.example.com/red, może pasować do precyzyjnego linku www.example.com/{color}, nawet jeśli wyliczenie ma wartość RED. (nr 152, b/135857840)

Zgodność podczas tworzenia wiadomości

  • Usługa androidx.navigation:navigation-compose:2.4.0-alpha01 jest zgodna tylko z funkcją tworzenia wiadomości w wersji 1.0.0-beta07 i nowszych.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że zmienne argumentów końcowych miały pierwszeństwo przed precyzyjnymi linkami o pasującym sufiksie dokładnego. (nr 153, b/184072811)
  • NavHostFragment obsługuje teraz niestandardowe nawigatory, które używają tych samych elementów @Navigator.Name("dialog") co domyślna wartość DialogFragmentNavigator. (Ib1c2c, b/175979140)
  • Poprawiliśmy działanie interfejsu NavigatorProvider#addNavigator, aby uniknąć problemów przy jego wielokrotnym wywoływaniu z tą samą instancją. (#176, b/187443146)

Treści tłumaczone z zewnątrz

  • Dziękujemy, simonschiller za utworzenie obsługi bezpiecznych argumentów, która generuje metodę fromSavedStateHandle() dla każdej klasy NavArgs. (#122, b/136967621)
  • Dziękujemy Bradleycorn za to, że w argumencie enum nie jest rozróżniana wielkość liter w precyzyjnych linkach. (nr 152, b/135857840)
  • Dziękujemy za rozwiązanie problemu osipxd, który powodował, że obiekty zastępcze argumentów końcowych miały pierwszeństwo przed precyzyjnymi linkami z pasującym sufiksem dokładnego. (nr 153, b/184072811)
  • Dziękujemy tatocaster za zaktualizowanie bezpiecznych argumentów tak, aby zależało od KotlinPoet 1.8.0. (nr 172, b/183990444)
  • Dziękujemy jossiwolf za publiczne udostępnienie pól name i argument oraz niszczenie funkcji NamedNavArgument. (nr 174, b/181320559)
  • Dziękujemy jossiwolf za wprowadzenie nowego rozszerzenia NavBackStackEntry#provideToCompositionLocals, które udostępnia NavBackStackEntry odpowiednim użytkownikom lokalnym kompozycji. (nr 175, b/187229439)
  • Dziękujemy jossiwolf za poprawienie działania pakietu NavigatorProvider#addNavigator. Dzięki temu powtórne wywoływanie go z tym samym wystąpieniem nie będzie powodować problemów. (#176, b/187443146)

Wersja 1.0.0-alpha10

7 kwietnia 2021 r.

Usługa androidx.navigation:navigation-compose:1.0.0-alpha10 została zwolniona. Wersja 1.0.0-alfa10 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • NavHost akceptuje teraz obiekt Modifier, który jest przekazywany do kontenera kompozycyjnego, który opakowuje docelowe elementy kompozycyjne. (I85aca, b/175125483)

Poprawki błędów

  • NavHost działa teraz nawet wtedy, gdy nie można znaleźć obiektu OnBackPressedDispatcherOwner, tak jak w przypadku wyświetlania podglądu obiektu NavHost. (I7d8b4)
  • Funkcja tworzenia wiadomości nawigacji korzysta teraz z Nawigacji 2.3.5. Rozwiązaliśmy problem, gdy używasz elementu BackHandler w miejscu docelowym NavHost. (I7e63b, b/182284739)

Wersja 1.0.0-alpha09

10 marca 2021 r.

Usługa androidx.navigation:navigation-compose:1.0.0-alpha09 została zwolniona. Wersja 1.0.0-alfa09 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • LocalViewModelStoreOwner.current zwraca teraz ViewModelStoreOwner do wartości null, co pozwala lepiej określić, czy w bieżącej kompozycji jest dostępna właściwość ViewModelStoreOwner. Interfejsy API, które wymagają ViewModelStoreOwner, takie jak viewModel() i NavHost, nadal zgłaszają wyjątek, jeśli ViewModelStoreOwner nie jest ustawiony. (Idf39a)

Poprawki błędów

  • Funkcja tworzenia nawigacji wymaga teraz nawigacji w wersji 2.3.4, która zawiera poprawkę polegającą na próbie ustawienia tego samego obiektu ViewModelStore po ustawieniu wykresu. (I65c24, b/177825470)

Wersja 1.0.0-alpha08

24 lutego 2021 r.

Usługa androidx.navigation:navigation-compose:1.0.0-alpha08 została zwolniona. Wersja 1.0.0-alfa08 zawiera te zatwierdzenia.

Nowe funkcje

  • NavHost wypełnia teraz kolumnę LocalSavedStateRegistryOwner CompositionLocal wartością NavBackStackEntry tego miejsca docelowego, dzięki czemu wszystkie stany zapisane bezpośrednio w folderze SavedStateRegistry zostaną zapisane i przywrócone wraz z miejscem docelowym. (I435d7, b/179469431)

Wersja 1.0.0-alpha07

10 lutego 2021 r.

Usługa androidx.navigation:navigation-compose:1.0.0-alpha07 została zwolniona. Wersja 1.0.0-alfa07 zawiera te zatwierdzenia.

Aktualizacje zależności

Wersja 1.0.0-alpha06

28 stycznia 2021 roku

Usługa androidx.navigation:navigation-compose:1.0.0-alpha06 została zwolniona. Wersja 1.0.0-alfa06 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • W systemie NavController dodano metodę rozszerzenia getBackStackEntry(route: String), która zwraca powiązane dane NavBackStackEntry. (If8931).

Wersja 1.0.0-alpha05

13 stycznia 2021 r.

Usługa androidx.navigation:navigation-compose:1.0.0-alpha05 została zwolniona. Wersja 1.0.0-alfa05 zawiera te zatwierdzenia.

Aktualizacja jest zgodna z wersją 1.0.0-alfa10.

Wersja 1.0.0-alpha04

16 grudnia 2020 roku

Usługa androidx.navigation:navigation-compose:1.0.0-alpha04 została zwolniona. Wersja 1.0.0-alfa04 zawiera te zatwierdzenia.

  • Zaktualizowano, aby zapewnić zgodność z funkcją tworzenia 1.0.0-alpha09.

Wersja 1.0.0-alpha03

Grudzień 2, 2020

Usługa androidx.navigation:navigation-compose:1.0.0-alpha03 została zwolniona. Wersja 1.0.0-alfa03 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że usługi popBackStack() i navigateUp() nie działały po zmianie konfiguracji ani procesie przetwarzania śmierci i odtwarzania. (Icea47, b/173281473)
  • Przechodzenie do wykresu zagnieżdżonego w NavHost działa teraz prawidłowo. (I0948d, b/173647694)

Wersja 1.0.0-alpha02

11 listopada 2020 roku

Usługa androidx.navigation:navigation-compose:1.0.0-alpha02 została zwolniona. Wersja 1.0.0-alfa02 zawiera te zatwierdzenia.

Zmiany interfejsu API

  • Tworzenie nawigacji obsługuje teraz NavOptions w celu korzystania z operacji popUpTo i launchSingleTop (If96c3, b/171468994)
  • Dodaliśmy funkcję nawigacyjną, która pobiera trasę zamiast identyfikatora. Pozwala ona tworzyć zagnieżdżone wykresy w funkcji DSL nawigacji. (I1661D)
  • Parametr startDestination jest teraz wyświetlany przed trasą na liście parametrów NavHost (Ie620e).
  • Możesz teraz utworzyć wykres, używając trasy jako miejsca docelowego poza kompozycją NavHost. (Iceb75).

Wersja 1.0.0-alpha01

28 października 2020 r.

Usługa android.navigation:navigation-compose:1.0.0-alpha01 została zwolniona. Wersja 1.0.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

Artefakt navigation-compose zapewnia integrację między komponentem nawigacji a Jetpack Compose. Jako miejsca docelowe w aplikacji używa on funkcji @Composable.

Zalety tej początkowej wersji:

  • Funkcja kompozycyjna NavHost, która umożliwia tworzenie grafów nawigacyjnych za pomocą DSL Kotlin.
  • Określanie zakresu cyklu życia (ViewModel) i zapamiętany stan na poziomie miejsca docelowego.
  • Automatyczna integracja z systemowym przyciskiem Wstecz.
  • Obsługa przekazywania argumentów, dołączania precyzyjnych linków do miejsc docelowych oraz zwracania wyniku do poprzednich miejsc docelowych.
  • Utwórz konkretne elementy pomocnicze w rememberNavController() i currentBackStackEntryAsState(), aby umożliwić stan podnoszenia i łączenie elementu NavController z kompozytami spoza obszaru NavHost (np. dolnym paskiem nawigacyjnym).

Więcej informacji znajdziesz w Przewodniku po tworzeniu wiadomości.

Wersja 2.3.5

Wersja 2.3.5

7 kwietnia 2021 r.

Usługa androidx.navigation:navigation-*:2.3.5 została zwolniona. Wersja 2.3.5 zawiera te zatwierdzenia.

Nowe funkcje

  • Podczas poruszania się za pomocą NavDeepLinkRequest lub Uri masz teraz dostęp do Uri, działania i typu MIME w wynikowym miejscu docelowym. Wystarczy, że pobierzesz intencję z argumentów za pomocą KEY_DEEP_LINK_INTENT. Będzie to powielać funkcje dostępne w przypadku zewnętrznych precyzyjnych linków. (I975c3, b/181521877)

Poprawki błędów

  • Pole OnBackPressedCallbacks zostało dodane do dyspozytora z NavBackStackEntry jako właścicielem cyklu życia. Teraz prawidłowo przechwytuje on z powrotem, gdy cykl życia aktywności ma wartość STOPPED, a następnie STARTED (Iff94f, b/182284739)
  • Wielkość liter podczas analizy domeny precyzyjnych linków nie jest teraz rozróżniana, dzięki czemu parametr www.example.com pasuje zarówno do www.example.com, jak i do www.Example.com. Pamiętaj, że w nazwach parametrów zapytania nadal jest rozróżniana wielkość liter. (nr 144, b/153829033)
  • Naprawiliśmy błąd NullPointerException, który mógł wystąpić, gdy miejsce docelowe ma wiele niepustych argumentów domyślnych i przechodzisz do tego miejsca docelowego, zastępując tylko podzbiór tych argumentów. (Aosp/1644827)

Aktualizacje zależności

  • Wtyczka Navigation Safe Args Gradle wymaga teraz wtyczki Kotlin Gradle w wersji 1.4.31. (Aosp/1661058, b/181156413)

Treści tłumaczone przez użytkowników zewnętrznych

  • Dziękujemy bentrengrove za żądanie pull, dzięki czemu wielkość liter w analizie domeny precyzyjnego linku nie jest rozróżniana. (nr 144, b/153829033)

Wersja 2.3.4

Wersja 2.3.4

10 marca 2021 r.

Usługa androidx.navigation:navigation-*:2.3.4 została zwolniona. Wersja 2.3.4 zawiera te zatwierdzenia.

Nowe funkcje

  • Argumenty funkcji ReferenceType można teraz prawidłowo analizować, gdy są wysyłane w ramach identyfikatora URI precyzyjnego linku. Obsługuje zarówno nieprzetworzoną liczbę całkowitą, jak i wartości szesnastkowe poprzedzone znakiem 0x. (#127, b/179166693)
  • Funkcja android:defaultValue dla argumentu z funkcją app:argType="float" obsługuje teraz domyślne wartości całkowite, dzięki czemu możesz używać parametru android:defaultValue="0", zamiast wymagać użycia funkcji 0.0. (nr 117, b/173766247)

Poprawki błędów

  • Rozwiązywanie problemów z zatrzymaniem instalowania podczas korzystania z obsługi funkcji dynamicznych w Nawigacji. (Ib27a7, b/169636207)
  • Wywołanie setViewModelStore lub setLifecycleOwner z użyciem tego samego obiektu, które został już ustawione, zostanie uznane za niemożliwe do wykonania (Idf491, b/177825470).
  • Podczas używania języka Java Safe-Args dodaje teraz adnotacje do ukrywania adnotacji w odpowiednich metodach. (I8fbc5, b/179463137)

Treści tłumaczone z zewnątrz

  • Dziękujemy JvmName za żądanie pull. Dzięki temu argumenty ReferenceType mogą być teraz prawidłowo analizowane, gdy są wysyłane w ramach identyfikatora URI precyzyjnego linku. (#127, b/179166693)
  • Dziękujemy tatocaster za żądanie pull umożliwiające defaultValue dla argumentu z wartością app:argType=”float”, które obsługuje teraz domyślne wartości całkowite. (nr 117, b/173766247)

Wersja 2.3.3

Wersja 2.3.3

27 stycznia 2021 r.

Usługa androidx.navigation:navigation-*:2.3.3 została zwolniona. Wersja 2.3.3 zawiera te zatwierdzenia.

Poprawki błędów

  • Już nie ma awarii przy wyskakującym elemencie NavBackStackEntry, zanim jego element Lifecycle zostanie przeniesiony do CREATED. (IE3ba3)
  • Usunięto problem z regresją spowodowaną przez błąd b/171364502, gdzie przejście do działania z wartością zasobu animacji 0 powodowało wyświetlenie błędu ResourceNotFoundException. (I7aedb, b/176819931)

Wersja 2.3.2

Wersja 2.3.2

Grudzień 2, 2020

Usługa androidx.navigation:navigation-*:2.3.2 została zwolniona. Wersja 2.3.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono regresję w NavigationUI, w której użycie miejsca docelowego <activity> z parametrem onNavDestinationSelected powodowało przechodzenie do aktywności. (I22e34, b/171364502)
  • Rozwiązaliśmy problem, który powodował, że funkcja navigation-dynamic-features-fragment powodowała wielokrotne przechodzenie do nowo zainstalowanego miejsca docelowego. (aosp/1486056, b/169636207)
  • Rozwiązaliśmy problem, który powodował, że podczas korzystania z metody launchSingleTop do instancji OnDestinationChangedListener nie były wysyłane domyślne argumenty. (I2c5cb)
  • Rozwiązaliśmy problem, który powodował, że przejście do zagnieżdżonego wykresu nawigacyjnego nie skutkowało utworzeniem nowej instancji grafu w stosie tylnym. (Ifc831).
  • Naprawiono błąd polegający na tym, że użycie funkcji navigate() z wartością popUpTo w celu usunięcia ostatniego miejsca docelowego z wykresu nawigacyjnego nie powodowało natychmiastowego zniszczenia i usunięcia wykresu nawigacji z tylnego stosu. (I910a3)
  • Nawigacja SafeArgs korzysta teraz z KotlinPoet w wersji 1.7.2, która obsługuje jawny tryb interfejsu API Kotlin. (I918B5)
  • NavHostFragment.findNavController(Fragment) sprawdza teraz także widok głównego wystroju fragmentu DialogFragment oprócz istniejących kontroli hierarchii i hierarchii widoków Fragmentu. Pozwoli Ci to przetestować fragmenty okien, które korzystają z nawigacji, z funkcjami FragmentScenario i Navigation.setViewNavController(). (I69e0D)

Wersja 2.3.1

Wersja 2.3.1

14 października 2020 r.

Usługa androidx.navigation:navigation-*:2.3.1 została zwolniona. Wersja 2.3.1 zawiera te zatwierdzenia.

Nowe funkcje

  • Domyślne zasoby animacji zostały dodane do interfejsu nawigacji i są zalecane zamiast domyślnych zasobów animacji. (B/167430145)
  • NavOptions zastępuje teraz kod skrótu i metody „równa się” (b/161586466).
  • Nawigacja obejmuje teraz bieżące miejsce docelowe w wyjątku IllegalArgumentException „Brak miejsca docelowego o identyfikatorze”, co powinno usprawnić debugowanie. (b/168311416)

Poprawki błędów

  • Bezpieczne argumenty nie będą już owijać wiersza powrotnego, nawet jeśli nazwa wygenerowanej klasy argumentu ma więcej niż 100 znaków. (b/168584987)

Zmiany zależności

  • navigation-ui korzysta teraz z DrawerLayout 1.1.1, dzięki czemu NavigationUI może otwierać panel, nawet gdy używasz LOCK_MODE_LOCKED_CLOSED lub LOCK_MODE_LOCKED_OPEN. (B/162253907)
  • Bezpieczne argumenty korzystają teraz z KotlinPoet 1.6.0 (aosp/1435911)
  • Bezpieczne argumenty zależą teraz od AGP 4.0.1 (aosp/1442337)

Wersja 2.3.0

Wersja 2.3.0

24 czerwca 2020 r.

Usługa androidx.navigation:navigation-*:2.3.0 została zwolniona. Wersja 2.3.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 2.2.0

  • Integracja modułu funkcji: artefakty navigation-dynamic-features-runtime i navigation-dynamic-features-fragment umożliwiają przechodzenie do miejsc docelowych zdefiniowanych w modułach funkcji i w razie potrzeby automatycznie obsługują ich instalację. Więcej informacji znajdziesz w sekcji Nawigacja z modułami funkcji.
  • Testowanie nawigacji: artefakt navigation-testing udostępnia TestNavHostController, który pozwala ustawić bieżące miejsce docelowe i zweryfikować stos tylny po operacjach nawigacji. Więcej informacji znajdziesz w sekcji Nawigacja testowa.
  • Zwracanie wyniku: element NavBackStackEntry powiązany z każdym miejscem docelowym w stosie nawigacji pozwala teraz uzyskać dostęp do obszaru SavedStateHandle odpowiedniego do przechowywania niewielkich ilości zapisanych informacji o stanie, które powinny być powiązane z konkretnym wpisem stosu. Więcej informacji znajdziesz w sekcji Zwracanie wyniku do poprzedniego miejsca docelowego.
  • Obsługa interfejsu Openable na platformie NavigationUI: wszystkie zastosowania funkcji DrawerLayout w tabeli NavigationUI zostały zastąpione bardziej ogólnym interfejsem Openable, który został dodany w widoku niestandardowym 1.1.0 i zaimplementowany przez DrawerLayout w DrawerLayout 1.1.0.
  • Obsługa działań i typów MIME w precyzyjnych linkach: precyzyjne linki obsługują obecnie app:action i app:mimeType, a nie tylko app:uri, które były wcześniej dostępne. NavController umożliwia teraz nawigowanie według dowolnej kombinacji tych pól za pomocą nowej klasy NavDeepLinkRequest. Więcej informacji znajdziesz w sekcji Nawigacja przy użyciu NavDeepLinkRequest.

Znane problemy

  • Obsługa działań precyzyjnych linków i typów MIME nie jest jeszcze dostępna w przypadku łączenia plików manifestu. Dopóki te czynności nie zostaną ukończone, elementy <intent-filter> wygenerowane z elementu <nav-graph> w pliku manifestu nie będą zawierać typu MIME w elemencie <data> ani niestandardowym <action>. Musisz ręcznie dodać do pliku manifestu odpowiedni plik <intent-filter>.

Wersja 2.3.0-rc01

10 czerwca 2020 r.

Usługa androidx.navigation:navigation-*:2.3.0-rc01 została zwolniona. Wersja 2.3.0-rc01 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono błąd NullPointerException podczas zastępowania wystąpienia miejsca docelowego bez argumentów innym wystąpieniem z argumentami singleTop. (B/158006669)
  • Wszystkie wyjątki typu destination is unknown zgłoszone przez zasadę NavController zawierają teraz dodatkowe informacje na potrzeby debugowania, które ułatwiają określenie stanu elementu NavController. (b/157764916)

Wersja 2.3.0-beta01

20 maja 2020 r.

Zwolniono androidx.navigation:navigation-*:2.3.0-beta01. Wersja 2.3.0-beta01 zawiera te zatwierdzenia.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że element Lifecycle obiektu NavBackStackEntry nie był prawidłowo aktualizowany po śmierci procesu. (b/155218371)
  • OnDestinationChangedListener instancje zarejestrowane przed wywołaniem usługi setGraph() są teraz prawidłowo wysyłane do przywróconego miejsca docelowego po śmierci procesu. (b/155218371)
  • Gdy używasz funkcji singleTop, argumenty funkcji NavBackStackEntry zostały prawidłowo zaktualizowane, a zaktualizowane argumenty są wysyłane do wszystkich instancji OnDestinationChangeListener. (B/156545508)

Aktualizacje zależności

Wersja 2.3.0-alfa06

29 kwietnia 2020 roku

Usługa androidx.navigation:navigation-*:2.3.0-alpha06 została zwolniona. (Wersja 2.3.0-alfa06 zawiera te zatwierdzenia).

Nowe funkcje

  • Precyzyjne linki zostały rozszerzone o app:action i app:mimeType, a nie tylko do tych, które były wcześniej dostępne (app:uri). NavController umożliwia teraz nawigowanie według dowolnej kombinacji tych pól za pomocą nowej klasy NavDeepLinkRequest. (b/136573074, b/135334841)

Zmiany interfejsu API

  • Znacznie rozszerzyliśmy obsługę DSL Kotlin w miejscach docelowych dynamicznej nawigacji. (B/148969800)

Poprawki błędów

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

Wersja 2.3.0-alpha05

15 kwietnia 2020 roku

Usługa androidx.navigation:navigation-*:2.3.0-alpha05 została zwolniona. Wersja 2.3.0-alfa05 zawiera te zatwierdzenia.

Nowe funkcje

  • W przypadku wykresu dynamicznego zawierającego z użyciem <include-dynamic> nie musisz już określać app:graphPackage. Zostanie użyty domyślny, dodając do applicationId po kropce sufiks moduleName. Jeśli chcesz dostosować graphPackage, możesz teraz użyć obiektu zastępczego ${applicationId}. (b/152696768)
  • Wykres nawigacyjny Kotlin DSL udostępnia teraz pole defaultArguments Map dla działań, odzwierciedlając możliwość ustawiania wartości domyślnych w elementach <action> w plikach XML nawigacji. (B/150345605)

Poprawki błędów

  • Z Nawigacji w wersji 2.2.2: naprawiono błąd IllegalStateException powodujący wyświetlanie precyzyjnych linków do początkowego miejsca docelowego wykresu, gdy w aktywności masz wiele wystąpień NavHostFragment. (b/147378752)

Aktualizacje zależności

Wersja 2.3.0-alfa04

18 marca 2020 r.

Usługa androidx.navigation:navigation-*:2.3.0-alpha04 została zwolniona. Wersja 2.3.0-alfa04 zawiera te zatwierdzenia.

Nowe funkcje

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

Zmiany interfejsu API

  • Klasa DynamicExtras nie używa już wzorca konstruktora i można ją utworzyć bezpośrednio. (Aosp/1253671).
  • DynamicActivityNavigator używa teraz w konstruktorze funkcji Context zamiast Activity. (Aosp/1250252).

Poprawki błędów

  • NavigationUI nie ignoruje już pustych etykiet (np. miejsca docelowego z atrybutem android:label=””), a teraz prawidłowo ustawia pusty ciąg znaków w tytule. (B/148679860)

Aktualizacje zależności

  • Artefakty funkcji dynamicznych nawigacji zależą teraz od podstawowej wersji Google Play 1.6.5. (b/149556401)

Wersja 2.3.0-alfa03

Marzec 4, 2020

Usługa androidx.navigation:navigation-*:2.3.0-alpha03 została zwolniona. Wersja 2.3.0-alfa03 zawiera te zatwierdzenia.

Zmiany interfejsu API

Poprawki błędów

  • Teraz reguły ProGuard navigation-common-ktx poprawnie zachowują tylko używane klasy NavArgs, a nie wszystkie instancje NavArgs. (b/150213558)

Zmiany zależności

  • Nawigacja nie jest już zależna od Core 1.2.0i jest teraz oparta na Core 1.1.0, aby nie zmuszać deweloperów do przejścia na nowszą zależność, gdy Nawigacja nie wymaga żadnych nowych interfejsów API w Core 1.2.0.

Wersja 2.3.0-alfa02

19 lutego 2020 r.

Usługa androidx.navigation:navigation-*:2.3.0-alpha02 została zwolniona. Wersja 2.3.0-alfa02 zawiera te zatwierdzenia.

Nowe funkcje

  • NavBackStackEntry umożliwia teraz dostęp do obiektu SavedStateHandle odpowiedniego do przechowywania niewielkich ilości zapisanych stanów, które powinny być powiązane z konkretnym wpisem stosu wstecznego. Przykład zastosowania znajdziesz w sekcji Zwracanie wyniku. (b/79672220)

Zmiany interfejsu API

  • Dodaliśmy metody wygodnych usług getCurrentBackStackEntry() i getPreviousBackStackEntry(), aby ułatwić pobieranie NavBackStackEntry w przypadku bieżących i poprzednich miejsc docelowych. (b/79672220)

Poprawki błędów

  • Podczas uruchamiania aplikacji w własnym stosie zadań funkcja navigateUp() przekazuje teraz argumenty bieżącego miejsca docelowego oraz KEY_DEEP_LINK_INTENT do poprzedniego miejsca docelowego. (B/147456890)

Zmiany zależności

Wersja 2.3.0-alfa01

5 lutego 2020 r.

Usługa androidx.navigation:navigation-*:2.3.0-alpha01 została zwolniona. Wersja 2.3.0-alfa01 zawiera te zatwierdzenia.

Nowe funkcje

  • Nowy artefakt navigation-testing udostępnia klasę TestNavHostController. Ta klasa stanowi alternatywę dla użycia przykładu NavController podczas testowania Nawigacji. Pozwala ona ustawić bieżące miejsce docelowe i zweryfikować stos wsteczny po operacjach nawigacji. (B/140884273)
  • Nowa funkcja navigation-dynamic-features-fragment (i jej zależność przejściowa navigation-dynamic-features-runtime) umożliwia dodanie miejsc docelowych lub całych wykresów nawigacyjnych (za pomocą <include-dynamic>) z modułów funkcji, co zapewnia bezproblemową instalację modułów funkcji na żądanie podczas korzystania z tych miejsc docelowych. Więcej informacji znajdziesz w sekcji Nawigacja z modułami funkcji. (b/132170186)

Poprawki błędów.

  • Z Nawigacji 2.2.1: precyzyjne linki bez parametrów zapytania prawidłowo ignorują teraz wszystkie parametry zapytania, zamiast dołączać je do końcowych elementów {argument} lub niepasujących do precyzyjnego linku. (b/147447512)
  • Z nawigacji 2.2.1: reguły ProGuard navigation-ui dla DrawerArrowDrawable zostały zaktualizowane, aby zasada android.enableJetifier=true nie była wymagana. (B/147610424)
  • Z Nawigacji 2.2.1: moduł navigation-common-ktx ma teraz unikalną nazwę pakietu manifestu, a nie jest taka sama jak nazwa navigation-runtime-ktx. (Aosp/1141947)

Aktualizacje zależności

Wersja 2.2.2

Wersja 2.2.2

15 kwietnia 2020 roku

Zwolniono androidx.navigation:navigation-*:2.2.2. Wersja 2.2.2 zawiera te zatwierdzenia.

Poprawki błędów

  • Naprawiono IllegalStateException występujące w przypadku precyzyjnych linków do początkowego miejsca docelowego wykresu, gdy w aktywności masz wiele wystąpień NavHostFragment. (b/147378752)
  • NavigationUI nie ignoruje już pustych etykiet (np. miejsca docelowego z atrybutem android:label=””), a teraz prawidłowo ustawia pusty ciąg znaków w tytule. Ta funkcja była już dostępna w Nawigacji w wersji 2.3.0-alfa04. (B/148679860)
  • Teraz reguły ProGuard navigation-common-ktx poprawnie zachowują tylko używane klasy NavArgs, a nie wszystkie instancje NavArgs. Wcześniej ta funkcja była dostępna w Nawigacji w wersjach 2.3.0-alfa03. (b/150213558)

Aktualizacje zależności

Wersja 2.2.1

Wersja 2.2.1

5 lutego 2020 r.

Usługa androidx.navigation:navigation-*:2.2.1 została zwolniona. Wersja 2.2.1 zawiera te zatwierdzenia.

Poprawki błędów.

  • Precyzyjne linki bez parametrów zapytania prawidłowo ignorują teraz wszystkie parametry zapytania, zamiast dołączać je do końcowych elementów {argument} lub niepasujące do precyzyjnego linku. (b/147447512)
  • Reguły ProGuard navigation-ui dla DrawerArrowDrawable zostały zaktualizowane, aby dopilnować, że zasada android.enableJetifier=true nie jest wymagana. (B/147610424)
  • Moduł navigation-common-ktx ma teraz unikalną nazwę pakietu manifestu i nie ma tej samej nazwy co pakiet navigation-runtime-ktx. (Aosp/1141947)

Aktualizacje zależności

Wersja 2.2.0

Wersja 2.2.0

Styczeń 22, 2020

Usługa androidx.navigation:navigation-*:2.2.0 została zwolniona. Wersja 2.2.0 zawiera te zatwierdzenia.

Ważne zmiany wprowadzone od wersji 2.1.0

  • NavBackStackEntry: możesz teraz wywołać funkcję NavController.getBackStackEntry(), podając identyfikator miejsca docelowego lub wykresu nawigacji na stosie tylnym. Zwrócony obiekt NavBackStackEntry udostępnia parametry LifecycleOwner, ViewModelStoreOwner (to samo zwrócone przez NavController.getViewModelStoreOwner()) i SavedStateRegistryOwner, a także argumenty używane do rozpoczęcia podróży.
  • Integracja z zapisanym modelem widoku cyklu życia: SavedStateViewModelFactory jest teraz domyślną fabryką używaną podczas używania konstruktora by navGraphViewModels() lub konstruktora ViewModelProvider z wartością ViewModelStoreOwner zwracaną przez NavController.getBackStackEntry() lub NavController.getViewModelStoreOwner().
  • Obsługa parametrów zapytania w przypadku precyzyjnych linków: precyzyjne linki z parametrami zapytania obsługują teraz parametry zapytania ze zmienioną kolejnością. Argumenty, które mają wartość domyślną lub mogą być puste, są teraz opcjonalne przy dopasowaniu precyzyjnych linków.
  • Ulepszona obsługa animacji: NavHostFragment korzysta teraz z FragmentContainerView z fragmentu 1.2.0, naprawia problemy z kolejnością nakładania elementów w animacji i wysyła wstawienia okien do fragmentów.

Wersja 2.2.0-rc04

18 grudnia 2019 r.

Usługa androidx.navigation:navigation-*:2.2.0-rc04 została zwolniona. Wersja 2.2.0-rc04 zawiera te zatwierdzenia.

Poprawki błędów.

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

Wersja 2.2.0-rc03

4 grudnia 2019

Usługa androidx.navigation:navigation-*:2.2.0-rc03 została zwolniona. Wersja 2.2.0-rc03 zawiera te zatwierdzenia.

Poprawki błędów.

  • Rozwiązaliśmy problem z analizą precyzyjnego linku, gdy używasz parametrów zapytania i argumentu jako ostatniej części ścieżki, co uniemożliwiało analizę więcej niż 1 znaku końcowego argumentu ścieżki. (b/144554689)
  • Rozwiązaliśmy problem z analizowaniem precyzyjnych linków, który powodował, że opcjonalne parametry otrzymywały "@null" zamiast null. (b/141613546)
  • NavHostFragment teraz prawidłowo przywraca wykres po zmianie konfiguracji w przypadku użycia z FragmentContainerView. (B/143752103)

Zmiany zależności

  • Nawigacja zależy teraz od Cykl życia 2.2.0-rc03, SavedState modelu cyklu życia 1.0.0-rc03, aktywności 1.1.0-rc03 i fragmentu 1.2.0-rc03 (w stosownych przypadkach).

Wersja 2.2.0-rc02

7 listopada 2019 r.

Usługa androidx.navigation:navigation-*:2.2.0-rc02 została zwolniona. Wersja 2.2.0-rc02 zawiera te zatwierdzenia.

Zmiany zależności

  • Nawigacja korzysta teraz z elementu androidx.lifecycle 2.2.0-rc02.

Wersja 2.2.0-rc01

23 października 2019 r.

Usługa androidx.navigation:navigation-*:2.2.0-rc01 została udostępniona 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.

Usługa androidx.navigation:navigation-*:2.2.0-beta01 została zwolniona. Wersja 2.2.0-beta01 zawiera te zatwierdzenia.

Nowe funkcje

  • NavDestination i jej podklasy zastępują teraz toString(), aby dostarczać bardziej przydatnych informacji podczas debugowania. (b/141264986)

Zmiany w działaniu

  • Podczas dopasowywania precyzyjnych linków dodatkowe parametry zapytania są teraz ignorowane. Nie powoduje to niepowodzenia dopasowania. (b/141482822)

Poprawki błędów.

  • Naprawiono błąd polegający na tym, że argumenty na ścieżce precyzyjnego linku były ignorowane, jeśli określono też parametry zapytania. (B/141505755)
  • Rozszerzenie Kotlin navArgs() w systemie Activity ma teraz lepszy komunikat o błędzie, gdy nie ma żadnych dodatków. (b/141408999)
  • Klasy Java wygenerowane przez bezpieczne argumenty (Directions) zawierają teraz wartości domyślne. (B/141099045)
  • Klasy Java wygenerowane przez bezpieczne argumenty (Args) zawierają teraz wartości domyślne. (B/140123727)
  • Gdy używasz interfejsu Toolbar, NavigationUI nie animuje już zmiany tekstu podczas przechodzenia między dwoma miejscami docelowymi najwyższego poziomu. (B/140848160)

Wersja 2.2.0-alfa03

18 września 2019 r.

Usługa androidx.navigation:navigation-*:2.2.0-alpha03 została zwolniona. Wersja 2.2.0-alfa03 zawiera te zatwierdzenia.

Zmiany w działaniu

  • Połączenie z użytkownikiem setViewModelStore() po połączeniu się z numerem setGraph skutkuje teraz IllegalStateException. To ustawienie należy zawsze ustawić przez NavHost w ramach wstępnej konfiguracji, aby zapewnić spójność miejsca na dane we wszystkich instancjach NavBackStackEntry w przypadku ViewModel instancji. (Aosp/1111821)

Poprawki błędów.

  • Naprawiono błąd ConcurrentModificationException w przypadku użycia instancji ViewModel dołączonych do wielu różnych grafów nawigacyjnych o zakresie ViewModelStore. (Aosp/1112257)

Wersja 2.2.0-alfa02

5 września 2019 r.

Usługa androidx.navigation:navigation-*:2.2.0-alpha02 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Precyzyjne linki z parametrami zapytania obsługują teraz parametry zapytania ze zmienioną kolejnością. Argumenty, które mają wartość domyślną lub mogą mieć wartość null, są teraz opcjonalne przy dopasowaniu precyzyjnych linków. (b/133273839)
  • Możesz teraz wywołać funkcję NavController.getBackStackEntry() i przekazać identyfikator miejsca docelowego lub wykresu nawigacyjnego na tylnym stosie. Zwrócony obiekt NavBackStackEntry udostępnia parametry LifecycleOwner, ViewModelStoreOwner (to samo zwrócone przez NavController.getViewModelStoreOwner()) i SavedStateRegistryOwner, a także argumenty używane do rozpoczęcia podróży. (aosp/1101691, aosp/1101710)

Poprawki błędów.

  • Rozwiązaliśmy problem, który powodował, że nie można było dodać elementu NavHostFragment do pliku ViewPager2 w przypadku użycia przycisku IllegalArgumentException. (B/133640271)
  • Funkcja NavInflater pozwala teraz uniknąć niepotrzebnego wywoływania funkcji getResourceName(), co skraca czas inflacji nawet o 40%. (b/139213740)

Wersja 2.2.0-alpha01

7 sierpnia 2019 r.

Usługa androidx.navigation:navigation-*:2.2.0-alpha01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

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

Zmiany interfejsu API

Poprawki błędów.

  • NavHostFragment używa teraz FragmentContainerView, naprawiając problemy z kolejnością nakładania elementów w animacji i wysyłające okna do fragmentów. (b/137310379)

Wersja 2.1.0

Wersja 2.1.0

5 września 2019 r.

Usługa androidx.navigation:navigation-*:2.1.0 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Ważne zmiany wprowadzone od wersji 2.0.0

  • Ograniczanie modeli widoków do wykresu nawigacyjnego: możesz teraz tworzyć modele widoków danych ograniczone do poziomu wykresu nawigacji za pomocą przedstawicieli właściwości by navGraphViewModels() w przypadku użytkowników Kotlin, korzystając z bibliotek -ktx lub interfejsu API getViewModelStoreOwner() dodanego do NavController. Więcej informacji znajdziesz w artykule Udostępnianie danych związanych z interfejsem między miejscami docelowymi.
  • Konta docelowe w oknach docelowych: możesz teraz tworzyć miejsca docelowe (<dialog>), które będą wyświetlać komunikat DialogFragment, gdy przejdziesz do nich navigate. NavHostFragment obsługuje domyślnie miejsca docelowe okien. Więcej informacji znajdziesz w artykule Tworzenie miejsca docelowego z fragmentu DialogFragment.
  • Nawigacja według Uri: możesz teraz navigate skorzystać z urządzenia Uri, które korzysta z <deepLink> dodanych przez Ciebie do miejsca docelowego, aby do niego nawigować. Więcej informacji znajdziesz w sekcji Nawigacja za pomocą identyfikatora URI.
  • NavHostController: interfejsy API używane specjalnie do tworzenia niestandardowych zasobów typu NavHost zostały przeniesione do NavHostController. Dzięki temu implementacje mogą połączyć swoje NavController z hostingami LifecycleOwner, OnBackPressedDispatcher i ViewModelStore.

Wersja 2.1.0-rc01

7 sierpnia 2019 r.

Usługa androidx.navigation:navigation-*:2.1.0-rc01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany interfejsu API

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

Wersja 2.1.0-beta02

19 lipca 2019 r.

Usługa androidx.navigation:*:2.1.0-beta02 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów.

  • Usunięto niezamierzoną zależność jacoco w 2.1.0-beta01. (b/137782950)

Wersja 2.1.0-beta01

17 lipca 2019 r.

Usługa androidx.navigation:*:2.1.0-beta01 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

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

Poprawki błędów.

  • Rozwiązaliśmy problem z czasem, który występował, gdy w polu findNavController() używano wielu fragmentów NavHostFragmentów z tym samym kontenerem. (B/136021571)

Wersja 2.1.0-alpha06

2 lipca 2019 r.

Usługa androidx.navigation:*:2.1.0-alpha06 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Atrybut app:navGraph używany przez fragment NavHostFragment został przeniesiony do artefaktu navigation-runtime. Niestandardowych nawigatorów, które można dodawać za pomocą kodu XML, należy używać tego atrybutu w celu integracji z panelem hosta edytora nawigacji. (B/133880955)

Zmiany interfejsu API

  • Interfejs API getViewModelStore() w systemie NavController został wycofany i zastąpiony nową metodą getViewModelStoreOwner(), która zwraca ViewModelStoreOwner. (AOSP/987010)
  • Implementację miejsc docelowych okien pływających, takich jak miejsca docelowe typu <dialog>, została uogólniona w interfejsie znaczników FloatingWindow, który jest teraz zaimplementowany we wszystkich miejscach docelowych <dialog>. Metody interfejsu użytkownika służące do interakcji z górnym paskiem aplikacji teraz ignorują miejsca docelowe FloatingWindow. (B/133600763)

Zmiany w działaniu

  • Gdy używasz miejsca docelowego <dialog>, Nawigacja prawidłowo synchronizuje swój stan z tym, co widzisz na ekranie. Dlatego Nawigacja automatycznie wyświetla teraz <dialog> miejsca docelowe, gdy dojdziesz do miejsca docelowego bez okna dialogowego lub bez aktywności, na przykład do celu <fragment>. (b/134089818)

Poprawki błędów.

  • Nawigacja wstrzymuje teraz animację, która pojawia się podczas odtwarzania działania podczas obsługi precyzyjnego linku, naprawiającego Flasha. (b/130362979)
  • Naprawiono błąd polegający na tym, że po dodaniu fragmentu początkowego stos nawigacji był niezsynchronizowany. (b/133832218)

Wersja 2.1.0-alpha05

5 czerwca 2019 r.

Usługa androidx.navigation:*:2.1.0-alpha05 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Zmiany interfejsu API

  • Interfejsy API związane z hostem w systemie NavController zostały zmienione i przeniesione do nowej podklasy, czyli NavController, NavHostController. (Aosp/966091)
  • Metoda NavController setHostOnBackPressedDispatcherOwner() została zastąpiona metodą setOnBackPressedDispatcher() usługi NavHostController. Teraz należy wywołać metodę setLifecycleOwner() przed jej wywołaniem. (Aosp/965409)
  • NavHostController zawiera teraz metodę enableOnBackPressed(boolean), która zastępuje klasę NavHostOnBackPressedManager, która została wcześniej zwrócona przez funkcję setHostOnBackPressedDispatcherOwner(). (Aosp/966091)

Poprawki błędów.

  • Rozwiązaliśmy problem, który powodował, że po nawigowaniu według identyfikatora URI stos wsteczny był nieprawidłowy. (b/132509387)
  • Precyzyjne linki obsługiwane przez NavController automatycznie uruchamiają się teraz tylko raz. (b/132754763)

Wersja 2.1.0-alfa04

16 maja 2019 r.

Usługa androidx.navigation:*:2.1.0-alpha04 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów.

  • Funkcja NavHostFragment prawidłowo respektuje zasadę app:defaultNavHost podczas przechwytywania systemowych zdarzeń przycisku Wstecz, eliminując regresję w Nawigacji 2.1.0-alpha03. b/132077777
  • DialogFragmentNavigator prawidłowo obsługuje teraz operacje popBackStack() i navigateUp(). b/132576764
  • Naprawiono błąd IllegalStateException: unknown destination during restore występujący podczas wielokrotnego poruszania się między zagnieżdżonymi wykresami. b/131733658

Wersja 2.1.0-alfa03

7 maja 2019 r.

Usługa androidx.navigation:*:2.1.0-alpha03 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Znane problemy

  • NavHostFragment nadal przechwytuje systemowy przycisk Wstecz pomimo użycia app:defaultNavHost="false" b/132077777

Nowe funkcje

  • Możesz teraz tworzyć miejsca docelowe (<dialog>), które będą wyświetlać usługę DialogFragment, gdy dołączysz do: navigate. NavHostFragment domyślnie obsługuje miejsca docelowe okien. b/80267254
  • Oprócz wywoływania funkcji navigate z identyfikatorem zasobu lub instancją NavDirections możesz teraz nawigować za pomocą instancji Uri, która wykorzystuje dodany przez Ciebie do miejsca docelowego element <deepLink>, aby przejść do właściwego miejsca docelowego. b/110412864

Zmiany w działaniu

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

Zmiany interfejsu API

  • Metoda createFragmentNavigator() metody NavHostFragment została wycofana, a jej funkcje zostały przeniesione do nowej metody onCreateNavController(), aby podkreślić, że jest to prawidłowy punkt wejścia dodawania niestandardowych nawigatorów podczas podklasyfikacji NavHostFragment. b/122802849
  • Do NavDestination dodaliśmy metodę hasDeepLink(), która pozwala sprawdzić, czy dane miejsce docelowe (Uri) może być obsługiwane przez to miejsce docelowe lub, w przypadku NavGraph, dowolne miejsce docelowe na wykresie nawigacji. b/117437718

Poprawki błędów.

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

Wersja 2.1.0-alfa02

3 kwietnia 2019 r.

Usługa androidx.navigation:*:2.1.0-alpha02 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Możesz teraz tworzyć modele widoków danych o zakresie ograniczonym do poziomu wykresu nawigacji za pomocą przedstawicieli usługi by navGraphViewModels() w przypadku użytkowników Kotlin lub za pomocą interfejsu API getViewModelStore() dodanego do NavController. b/111614463

Zmiany interfejsu API

  • Możesz teraz dodać app:targetPackage do miejsca docelowego <activity>, aby ograniczyć pasującą nazwę pakietu. Obsługuje app:targetPackage="${applicationId}" na potrzeby ograniczenia pakietu do własnego identyfikatora aplikacji. b/110975456

Poprawki błędów.

  • Wartość android:name dla miejsc docelowych <activity> nie jest już przekształcana w klasę podczas inflacji, co uniemożliwia użycie obiektów ClassNotFoundExceptions podczas korzystania z funkcji dynamicznych. b/124538597

Wersja 2.1.0-alpha01

19 marca 2019 r.

To jest pierwsza wersja alfa Nawigacji 2.1.0.

Zmiany zależności

  • Nawigacja zależy teraz od tych funkcji: androidx.core:core:1.0.1 i androidx.fragment:fragment:1.1.0-alpha05. W tej wersji wyeliminowaliśmy też zależność od androidx.legacy:legacy-support-core-utils:1.0.0. b/128632612

Zmiany interfejsu API

  • Dodaliśmy nową metodę Navigation.createNavigateOnClickListener(NavDirections) jako alternatywę dla tworzenia odbiornika kliknięć z identyfikatorem zasobu i pakietem. b/127631752
  • Interfejs FragmentNavigator.instantiateFragment został wycofany. Domyślna implementacja używa teraz FragmentFactory do tworzenia fragmentów kodu. b/119054429

Poprawki błędów

  • Nawigacja nie wysyła już wartości null Bundle, gdy do miejsca docelowego dołączono argumenty. Występuje problem, gdy używasz android:defaultValue="@null". b/128531879
  • Bezpieczne argumenty są teraz oparte na KotlinPoet 1.1.0. Usunęliśmy 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 zwolniona bez zmian od 2.0.0-rc02.

Wersja 2.0.0-rc02

6 marca 2019 r.

Nawigacja 2.0.0-rc02 udostępnia nowe artefakty z identyfikatorem grupy androidx.navigation i zmienia zależności na ich odpowiedniki na AndroidzieX.

Działanie wersji 2.0.0-rc02 jest takie samo jak w przypadku Nawigacji w wersji 1.0.0-rc02. Nie musisz wprowadzać żadnych zmian w kodzie z wersji 1.0.0-rc02 poza zaktualizowaniem zależności w celu dostosowania ich do nowych zależności.

Aby móc korzystać z Nawigacji w wersji 2.X, musisz przeprowadzić migrację do AndroidaX. Stabilna wersja Nawigacji 1.0 będzie ostatnią wersją wykorzystującą zależności bibliotek pomocy.Wszystkie przyszłe rozwiązania programistyczne w kolejnych wersjach będą oparte na AndroidzieX i będą bazujące na stabilnej wersji 2.0.

Zależności sprzed AndroidaX

W przypadku wersji Nawigacji starszych niż Android 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 bezpiecznych argumentów dodaj tę ścieżka klasy do pliku build.gradle najwyższego poziomu

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 zwolniona bez zmian od 1.0.0-rc02.

Wersja 1.0.0-rc02

26 lutego 2019 r.

Jest to druga wersja kandydująca do stabilnej wersji Nawigacji 1.0.0. Ta wersja zawiera kilka poprawek błędów.

Poprawki błędów

  • Rozwiązaliśmy problem, który powodował, że parametr popBackStack() był ignorowany, jeśli wykres główny nie miał identyfikatora b/126251695
  • navigateUp() prawidłowo obsługuje teraz powrót do zadania aplikacji po wywołaniu po skorzystaniu z precyzyjnego linku bez FLAG_ACTIVITY_NEW_TASK b/126082008
  • Rozwiązanie problemu polegającego na tym, że ActivityNavigator.applyPopAnimationsToPendingTransition nie stosował prawidłowej animacji wyjścia pop-up b/126237567
  • Kod Kotlin wygenerowany przez Safe Args prawidłowo zmienia znaczenie słów kluczowych Kotlin, takich jak in i fun, w nazwie pakietu powiązanej z klasą R. b/126020455

Wersja 1.0.0-rc01

21 lutego 2019 r.

Jest to wersja kandydująca do stabilnej wersji Nawigacji 1.0.0. Ta wersja zawiera 1 poprawkę błędu.

Poprawki błędów

  • Rozwiązaliśmy problem z korzystaniem z operacji nawigacji na podstawie fragmentów i singleTop b/124294805

Wersja 1.0.0-beta02

12 lutego 2019 r.

Ta wersja zawiera szereg drobnych ulepszeń i ważnych poprawek błędów.

Nowe funkcje

  • Możesz teraz używać 0 jako właściwości android:defaultValue w przypadku argumentów reference. b/124248602

Zmiany w działaniu

  • Dokładne dopasowania precyzyjnych linków mają teraz wyższy priorytet niż precyzyjne linki z dopasowaniami .* lub argumentu. b/123969518

Poprawki błędów

  • Metody popBackStack() i navigateUp zwracają teraz prawidłowo false po wysunięciu ostatniego miejsca docelowego w stosie wstecznym, naprawiając regresję wprowadzoną w 1.0.0-beta01. b/123933201
  • Teraz nawigacja prawidłowo ustawia ClassLoader podczas przywracania stanu zapisanej instancji. Pozwala to uniknąć problemów w przypadku używania niestandardowych klas w stanie zapisanym Navigator lub w argumentach wysłanych do NavDestination. b/123893858
  • Klasy NavArgs wygenerowane przez Safe Args nie ulegają już awarii podczas przywracania argumentu Parcelable[] ze stanu zapisanej instancji. b/123963545
  • Bezpieczne Args są teraz prawidłowo czyszczone z niepotrzebnych wygenerowanych klas Kotlin. b/124120883

Wersja 1.0.0-beta01

4 lutego 2019 r.

Jest to pierwsza wersja beta Nawigacji. Od tej pory interfejs Navigation API będzie działać stabilnie do następnej wersji, chyba że wystąpi problem krytyczny. Ta wersja zawiera poprawki błędów i zmiany w działaniu.

Zmiany w działaniu

  • Nawigacja daje teraz pewność, że domyślne wartości argumentów są traktowane identycznie w czasie działania i za pomocą bezpiecznych argumentów. W efekcie tylko argumenty z funkcją app:argType="reference" mogą mieć wartość domyślną wskazującą inny zasób (np. @color/colorPrimary). Próba użycia wartości domyślnej odwołania z innym parametrem app:argType spowoduje wystąpienie wyjątku przy analizowaniu kodu XML nawigacji. b/123551990
  • Bezpieczne argumenty korzystają teraz z wtyczki Androida do obsługi Gradle w wersji 3.3.0 aosp/888413
  • Bezpieczne argumenty są teraz oparte na Kotlin 1.3.20 aosp/888414

Poprawki błędów

  • Bezpiecznych argumentów można teraz używać w modułach bibliotek i funkcji we wszystkich wersjach Androida do obsługi Gradle. b/121304903
  • Naprawiliśmy regresję, która powodowała, że pojedyncza operacja popBackStack() przenosiła wszystkie kopie miejsca docelowego z góry stosu wstecznego, a nie do pojedynczego miejsca docelowego naraz. b/123552990
  • Rozwiązaliśmy problem, który powodował desynchronizację stanu FragmentNavigator ze stanem NavController, co powodowało błąd IllegalStateException podczas próby przywrócenia stosu wstecznego. b/123803044
  • Rozwiązaliśmy problem, który powodował, że przy korzystaniu z ProGuard z zaciemnianiem kodu strzałka wsteczna obsługiwana przez NavigationUI nie pojawiała się. b/123449431
  • Kod wygenerowany przez Bezpieczne argumenty teraz prawidłowo obsługuje użycie obiektu app:argType wskazującego statyczną klasę wewnętrzną w formacie .OuterClass$InnerClass. b/123736741
  • Kod w Javie 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-alfa11

23 stycznia 2019 r.

Jest to poprawka do wersji 1.0.0-alpha10, która rozwiązuje problem z bezpiecznymi argumentami.

Poprawki błędów

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

Wersja 1.0.0-alpha10

23 stycznia 2019 r.

Znane problemy

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

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

Nowe funkcje

  • Użytkownicy Kotlin mogą teraz używać przedstawiciela właściwości by navArgs(), aby leniwie uzyskiwać odwołanie do klasy NavArgs wygenerowanej przy użyciu bezpiecznych argumentów w elemencie Activity lub Fragment. b/122603367
  • Safe Args umożliwia teraz generowanie kodu Kotlin za pomocą wtyczki androidx.navigation.safeargs.kotlin. Kod Kotlin został stworzony specjalnie dla modułów Kotlin i z wykorzystaniem domyślnych argumentów i klas stałych na wzorzec konstruktora, który nadal jest dostępny przez poprzednią wtyczkę androidx.navigation.safeargs. b/110263087

Zmiany w działaniu

  • Dopasowujące precyzyjne linki są teraz kierowane na precyzyjne linki, które mają najwięcej pasujących argumentów. b/118393029
  • Wywołanie setGraph() na urządzeniu NavController spowoduje teraz zresetowanie stosu tylnego. b/111450672
  • Nieznane precyzyjne linki nie zgłaszają już parametru IllegalStateException, ale są ignorowane, co rozwiązuje problemy z zagnieżdżonymi lub wieloma elementami NavHostFragment. b/121340440

Zmiany najważniejsze

  • Metoda NavOptions.applyPopAnimationsToPendingTransition() stosowania animacji pop do aktywności została przeniesiona do ActivityNavigator. b/122413117
  • Bezpieczne argumenty unikają obecnie duplikowania identycznych klas w przypadku działań bez argumentów. Typ zwracany w przypadku metod braku argumentów w wygenerowanych klasach NavDirections to teraz NavDirections. b/123233147
  • Klasy wskazówek dojazdu wygenerowane przez Safe Args nie mają już publicznego konstruktora – możesz korzystać tylko z wygenerowanych metod statycznych. b/123031660
  • Klasy NavDirections wygenerowane przez Safe Args nie mają już konstruktora publicznego – powinny być generowane tylko za pomocą metod statycznych w wygenerowanych klasach Directions. b/122963206
  • Zwrócony Bundle z NavDirections' getArguments() jest teraz oznaczony jako @NonNull, a nie @Nullable. b/123243957

Poprawki błędów

  • NavDeepLinkBuilder teraz poprawnie obsługuje wiele elementów PendingIntent jednocześnie w tym samym miejscu docelowym, używając przekazanych argumentów do określenia unikatowości. b/120042732
  • NavController prawidłowo obsługuje teraz operacje popBackStack() podczas korzystania z zagnieżdżonych fragmentów NavHostFragment lub innych podrzędnych fragmentów ze stosem wstecznym. b/122770335
  • NavigationUI prawidłowo ustawia teraz opis treści przycisku w górę. b/120395362
  • Klasy wskazówek dojazdu wygenerowane przez Safe Args prawidłowo obsługują teraz działania globalne, które mają taki sam identyfikator jak działanie dla miejsca docelowego. b/122962504
  • Klasy wygenerowane przez bezpieczne argumenty NavDirections mają teraz równe wartości hashCode(), gdy equals() zwraca wartość prawda. b/123043662
  • FragmentNavigator wyświetli teraz lepszy komunikat o błędzie, jeśli spróbujesz utworzyć niestandardową wartość FragmentTransactions na: NavHostFragment FragmentManager. Zawsze należy używać parametru getChildFragmentManager(). b/112927148

Wersja 1.0.0-alpha09

18 grudnia 2018 r.

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

Postanowiliśmy nie kontynuować rozwijania artefaktu android.arch.navigation:navigation-testing. Chociaż okazało się to pomocne w przypadku testów wewnętrznych NavController, zdecydowanie zalecamy alternatywne strategie testowania, takie jak ośmieszanie instancji NavController, aby sprawdzić, czy wykonywane są prawidłowe wywołania navigate(). To podejście zostało szczegółowo omówione w rozmowie o pojedynczej aktywności podczas AndroidDevSummit 2018. Będziemy też pracować nad dodatkową dokumentacją dotyczącą testowania nawigacji.

Nowe funkcje

  • Elementy MenuItem z menuCategory="secondary" nie będą już wyskakiwać wstecz, gdy są używane z metodami NavigationUI. b/120104424
  • AppBarConfiguration pozwala teraz ustawić instancję zastępczą OnNavigateUpListener, która zostanie wywołana, gdy navController.navigateUp() zwróci false. b/79993862 b/120690961

Zmiany najważniejsze

  • Gdy używasz <argument> z argType="reference", Nawigacja nie analizuje już odwołania, tylko podaje nieprzetworzony identyfikator zasobu. b/111736515
  • Funkcja onNavDestinationSelected() domyślnie wraca teraz do początkowego miejsca docelowego wykresu nawigacyjnego, co zapewnia spójność z metodami setup. Dodaj menuCategory="secondary" do: MenuItem, aby uniknąć wypięcia tylnego stosu. aosp/852869
  • Metody fromBundle() wygenerowanych klas Args przyjmują teraz niepuste Bundle zamiast dopuszczalnych wartości Bundle aosp/845616

Poprawki błędów

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

Wersja 1.0.0-alpha08

6 grudnia 2018 r.

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

Nowe funkcje

  • Etykiety miejsc docelowych używane z metodami NavigationUI będą teraz automatycznie zastępować instancje {argName} w obiekcie android:label prawidłowym argumentem b/80267266
  • Nawigacja korzysta teraz z Biblioteki pomocy w wersji 28.0.0 b/120293333

Zmiany najważniejsze

  • Nazwa OnNavigatedListener została zmieniona na OnDestinationChangedListener b/118670572
  • Funkcja OnDestinationChangedListener przekazuje teraz także Bundle argumentów aosp/837142
  • Atrybuty app:clearTask i app:launchDocument oraz powiązane z nimi metody zostały usunięte. Użyj elementu app:popUpTo jako podstawy wykresu, aby usunąć wszystkie miejsca docelowe ze stosu wstecznego. b/119628354
  • ActivityNavigator.Extras używa teraz wzorca Builder i dodaje możliwość ustawiania dowolnych flag Intent.FLAG_ACTIVITY_ aosp/828140
  • Nazwa NavController.onHandleDeepLink została zmieniona na handleDeepLink aosp/836063
  • Wiele klas i metod, które nie są przeznaczone do podklas, takich jak NavOptions, NavInflater, NavDeepLinkBuilder i AppBarConfiguration, zostało utworzonych final aosp/835681
  • Wycofana metoda NavHostFragment.setGraph() została usunięta aosp/835684
  • Wycofana metoda NavigationUI.navigateUp(DrawerLayout, NavController) została usunięta. aosp/835684
  • Tworzenie fragmentów kodu zostało przeniesione do FragmentNavigator, co ułatwia przekazanie tworzenia fragmentów do FragmentFactory. b/119054429
  • Konstruktor dla NavGraphNavigator nie potrzebuje już Context aosp/835340
  • NavigatorProvider to teraz klasa, a nie interfejs. Działanie NavigatorProvider zwrócone przez getNavigatorProvider() nie zmieniło się. aosp/830660
  • NavDestination.navigate() został(a) usunięty(a). Zadzwoń do navigate() pod numer Navigator. aosp/830663
  • Znacząca refaktoryzacja elementu Navigator eliminująca potrzebę użycia funkcji OnNavigatorNavigatedListener oraz zamiast tego, że funkcja navigate zwróciła otwierany do niej element NavDestination.
  • Instancje Navigator nie mogą już wysyłać zdarzeń pop do NavController. Rozważ użycie OnBackPressedCallback do przechwytywania naciśnięć przycisku wstecz i wywołania navController.popBackStack(). Aosp/833716

Poprawki błędów

  • popUpTo działa teraz konsekwentnie, gdy miejsce docelowe jest elementem <navigation> b/116831650
  • Naprawiliśmy kilka błędów, które powodowały wyświetlanie się błędu IllegalArgumentException podczas korzystania z wykresów zagnieżdżonych b/118713731 b/113611083 b/113346925 b/113305559
  • Atrybut dataPattern miejsc docelowych <activity> będzie teraz wypełniać argumenty z argumentów niebędących ciągami znaków przez wywołanie toString() b/120161365

Bezpieczne argumenty

  • Bezpieczne argumenty obsługują obiekty możliwe do szeregowania, w tym wartości typu Enum. Typy typów wyliczeniowych mogą ustawiać wartość domyślną przy użyciu literału wyliczeniowego bez nazwy klasy (np. app:defaultValue="READ") b/111316353
  • Bezpieczne argumenty obsługują tablice wszystkich obsługiwanych typów: b/111487504
  • Bezpieczne argumenty ignoruje teraz podfoldery katalogów zasobów b/117893516
  • Bezpieczne argumenty dodaje w odpowiednich przypadkach adnotacje @Override b/117145301

Wersja 1.0.0-alpha07

29 października 2018 r.

Nowe funkcje

  • Nowa klasa AppBarConfiguration pozwala określić, które miejsca docelowe są uznawane za miejsca docelowe najwyższego poziomu. Więcej informacji znajdziesz w zaktualizowanej dokumentacji. b/117333663
  • Możesz teraz przekazywać argumenty do początkowego miejsca docelowego grafu b/110300470
  • Precyzyjne linki obsługują teraz schematy niestandardowe z kropkami, łącznikami i znakami plusa. b/112806402

Zmiany najważniejsze

  • Moduł navigation-testing-ktx został złożony do navigation-testing artifact i nie będzie już opublikowany.
  • Artefakt navigation-testing jest teraz zależny od standardowej biblioteki Kotlin. Interfejs API został zmieniony, aby był bardziej spójny z konwencjami Kotlina, ale nadal możesz go używać w testach napisanych w języku Java.
  • Wykresy nawigacyjne zarejestrowane w pliku manifestu metadanych nie są już obsługiwane. b/118355937
  • Akcji nie można już dołączać do miejsc docelowych <activity>. aosp/785539

Poprawki błędów

  • Precyzyjne linki teraz prawidłowo analizują parametry zapytania. b/110057514
  • Miejsca docelowe aktywności działają teraz poprawnie ze wszystkimi animacjami rozpoczęcia i zakończenia wyświetlania. b/117145284
  • Usunięto awarię, która występowała po zmianie konfiguracji podczas korzystania z niestandardowych nawigatorów. b/110763345

Bezpieczne argumenty

  • Bezpieczne argumenty są teraz stale zależne od wtyczki Androida do obsługi Gradle w wersji 3.2.1. b/113167627
  • Wskazówki dojazdu można teraz generować dla klas wewnętrznych. b/117407555
  • Rozwiązaliśmy problem z generowaniem wskazówek dojazdu na wykresie <include>. b/116542123

Wersja 1.0.0-alpha06

20 września 2018 r.

Nowe funkcje

Zmiany interfejsu API

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

Poprawki błędów

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

Bezpieczne argumenty

  • Klasy wskazówek dojazdu do miejsca docelowego nawigacji rozszerzają teraz klasyczną klasę wskazówek dojazdu z ich nadrzędnej klasy Directions (jeśli istnieje) b/79871405.
  • Klasy wskazówek i argumentów mają teraz przydatną implementację funkcji toString() b/111843389

Wersja 1.0.0-alpha05

10 sierpnia 2018 r.

Poprawki błędów

  • Napraw błąd, który powodował nieprawidłowe działanie stosu. b/111907708
  • Napraw błąd w equals() wygenerowanych klas. b/111450897
  • Napraw błąd kompilacji w bezpiecznych argumentach. b/109409713
  • Popraw konwersję z identyfikatorów zasobów na nazwy Java b/111602491
  • Naprawa komunikatów o błędach dotyczących dopuszczalności wartości null we wtyczce Safe Args.
  • Dodaj brakujące adnotacje dotyczące wartości null.

Wersja 1.0.0-alpha04

19 lipca 2018 r.

Nawigacja 1.0.0-alpha04 i powiązana z nią wtyczka do obsługi interfejsu Safe Args wprowadziliśmy w interfejsie API i w jego działaniu oraz poprawki błędów.

Zmiany interfejsu API / działania

  • NavHostFragment będzie zawsze ustawiać bieżący fragment jako główny fragment do nawigacji, dzięki czemu menedżery fragmentów podrzędnych zostaną wyskakujące przed wystrzeleniem zewnętrznego kontrolera NavController b/111345778

Bezpieczne argumenty

  • Zmiana powodująca niezgodność: app:type została zmieniona na app:argType, aby uniknąć konfliktów z innymi bibliotekami, takimi jak ConstraintLayout 2.0.0-alpha1 b/111110548
  • Komunikaty o błędach z Bezpiecznych argumentów można teraz klikać b/111534438
  • Klasy Args potwierdzają teraz, że atrybuty NonNull w rzeczywistości nie są puste b/111451769
  • Adnotacje NonNull zostały dodane do klas NavDirections i generowanych argumentów b/111455455 b/111455456.

Poprawki błędów

  • Rozwiązaliśmy problem z systemowym przyciskiem Wstecz po zastosowaniu precyzyjnych linków do miejsca docelowego fragmentu b/111515685

Wersja 1.0.0-alpha03

12 lipca 2018 r.

Nawigacja 1.0.0-alpha03 i powiązana z nią wtyczka do obsługi interfejsu Safe Args wprowadziliśmy w interfejsie API i w jego działaniu oraz poprawki błędów.

Zmiany interfejsu API / działania

  • Dodano metodę NavigationUI.setupWithNavController w przypadku paska narzędzi Toolbar b/109868820.
  • Dodano metodę NavigationUI.setupWithNavController w przypadku elementu CollapsingToolbarLayout b/110887183
  • popBackStack() zwraca teraz wartość false, gdy stos wsteczny jest pusty lub gdy podanego identyfikatora miejsca docelowego nie ma w stosie tylnym b/110893637
  • FragmentNavigator ignoruje teraz operacje nawigacji po zapisaniu stanu przez FragmentManager, aby uniknąć wyjątków „Nie można wykonać tego działania po onSaveInstanceState” w wyjątku b/110987825

Bezpieczne argumenty

  • Zmiana znaczenia: znaki inne niż alfanumeryczne w nazwach działań i argumentów zostaną zastąpione wielkimi literami w nazwach odpowiednich metod NavDirections.
    • Na przykład DemoController.index zmieni nazwę na setDemoControllerIndex b/79995048
    • Na przykład action_show_settings zmieni nazwę na actionShowSettings b/79642240
  • Zmiana powodująca niezgodność: argumenty są teraz domyślnie uznawane za niepuste. Aby zezwolić na null w przypadku ciągu znaków i argumentów parcelable, dodaj app:nullable="true" b/79642307
  • Możesz teraz używać parametru app:type="long" z wartościami domyślnymi w formacie „123L” b/79563966
  • Obsługiwane są teraz argumenty Parcelable z pełną i jednoznaczną nazwą klasy dla funkcji app:type. Jedyna obsługiwana wartość domyślna to "@null" b/79563966
  • Klasy Args implementują teraz funkcje equals() i hashCode() b/79642246
  • Wtyczki Safe Args można teraz stosować do projektów bibliotek b/80036553
  • Wtyczki Safe Args można teraz stosować do projektów funkcji b/110011752

Poprawki błędów

  • Rozwiązaliśmy problemy z nawigacją podczas korzystania z metod cyklu życia fragmentów kodu b/109916080
  • Rozwiązaliśmy problemy z wielokrotnym nawigacją po zagnieżdżonych wykresach b/110178671
  • Rozwiązaliśmy problemy z używaniem funkcji setPopUpTo z pierwszym miejscem docelowym na wykresie 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
  • Narzędzie aapt2 w pakiecie z wtyczką Androida do obsługi Gradle 3.2 w wersji beta 01 dodaje teraz reguły zachowania reguł dla każdego atrybutu android:name w plikach XML nawigacji b/79874119
  • Usunięto wyciek pamięci podczas zastępowania domyślnego fragmentu Navigator b/110900142

Wersja 1.0.0-alpha02

7 czerwca 2018 r.

Zmiany w działaniu

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

  • Obecnie Nawigacja to URLDecodes argumentów przeanalizowanych z adresów URL precyzyjnych linków. b/79982454

Poprawki błędów

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

  • W przypadku korzystania z animacji nawigacja wymaga teraz Biblioteki pomocy 27.1.1. b/80160903

  • Naprawiono błąd IllegalArgumentException, gdy był używany fragment defaultNavHost="true" jako fragment podrzędny. b/79656847

  • Naprawiono błąd StackOverflowError występujący podczas używania NavDeepLinkBuilder. b/109653065

  • Naprawiono błąd IllegalArgumentException podczas przechodzenia z powrotem do wykresu zagnieżdżonego. b/80453447

  • Naprawiono problem z pokrywającymi się fragmentami podczas korzystania z funkcji launchSingleTop. b/79407969

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

  • Interfejs NavigationUI wyróżni właściwy element, gdy zagnieżdżony wykres jest używany jako MenuItem. b/109675998

Zmiany interfejsu API

  • Atrybut clearTask działań i powiązany interfejs API w narzędziu NavOptions zostały wycofane. b/80338878

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

Wersja 1.0.0-alpha01

8 maja 2018 r.

Nawigacja to platforma do tworzenia nawigacji w aplikacji. Ta początkowa wersja to 1.0.0-alpha01.