Nawigacja to interakcje, które umożliwiają użytkownikom poruszanie się po różnych elementach treści w aplikacji, wchodzenie do nich i wychodzenie z nich.
Komponent nawigacji Android Jetpack obejmuje bibliotekę nawigacji, wtyczkę Safe Args Gradle, i narzędzia ułatwiające implementację nawigacji w aplikacji. Komponent nawigacji obsługuje różne przypadki użycia nawigacji, od prostych kliknięć przycisków po bardziej złożone wzorce, takie jak paski aplikacji i panel nawigacji.
Kluczowych pojęć
W tabeli poniżej znajdziesz omówienie kluczowych pojęć związanych z nawigacją oraz głównych typów, których używasz do ich implementacji.
Pomysł |
Cel |
Typ |
|---|---|---|
Host |
Element interfejsu, który zawiera bieżące miejsce docelowe nawigacji. Oznacza to, że gdy użytkownik porusza się po aplikacji, aplikacja zasadniczo zamienia miejsca docelowe w hoście nawigacji. |
|
Wykres |
Struktura danych, która określa wszystkie miejsca docelowe nawigacji w aplikacji i sposób ich połączenia. |
|
Kontroler |
Centralny koordynator zarządzający nawigacją między miejscami docelowymi. Kontroler udostępnia metody nawigacji między miejscami docelowymi, obsługi precyzyjnych linków, zarządzania stosem wstecznym i inne. |
|
Miejsce docelowe |
Węzeł na wykresie nawigacji. Gdy użytkownik przejdzie do tego węzła, host wyświetli jego zawartość. |
Zwykle tworzony podczas konstruowania wykresu nawigacji. |
Trasa |
Jednoznacznie identyfikuje miejsce docelowe i wszystkie wymagane przez nie dane. Możesz poruszać się za pomocą tras. Trasy prowadzą do miejsc docelowych. |
Dowolny typ danych, który można serializować. |
Korzyści i funkcje
Komponent nawigacji zapewnia wiele innych korzyści i funkcji, w tym:
- Animacje i przejścia: udostępnia standardowe zasoby animacji i przejść.
- Precyzyjne linki: implementuje i obsługuje precyzyjne linki, które kierują użytkownika bezpośrednio do miejsca docelowego.
- Wzorce interfejsu: obsługuje wzorce takie jak panele nawigacji i dolny pasek nawigacji przy minimalnym dodatkowym nakładzie pracy.
- Bezpieczeństwo typów: obejmuje obsługę przekazywania danych między miejscami docelowymi z zachowaniem bezpieczeństwa typów.
- Obsługa ViewModel: umożliwia określenie zakresu
ViewModelna wykresie nawigacji, aby udostępniać dane związane z interfejsem między miejscami docelowymi na wykresie. - Transakcje fragmentów: w pełni obsługuje i przetwarza transakcje fragmentów.
- Wstecz i w górę: domyślnie prawidłowo obsługuje działania wstecz i w górę.
Opcje frameworka
Komponent nawigacji obsługuje 2 główne frameworki do implementowania wykresu nawigacji, w zależności od architektury interfejsu aplikacji:
- Compose: jeśli Twoja aplikacja jest w całości zbudowana za pomocą Jetpack Compose, użyj Navigation Compose. Miejsca docelowe na wykresie to komponenty.
- Fragmenty: jeśli Twoja aplikacja używa widoków lub połączenia widoków i Compose, użyj komponentu nawigacji opartego na fragmentach. Miejsca docelowe na wykresie to fragmenty, które mogą zawierać standardowe widoki, treści Compose lub połączenie obu tych elementów.
W przypadku aplikacji migrujących z widoków do Compose zalecamy dalsze używanie komponentu nawigacji opartego na fragmentach podczas konwertowania poszczególnych ekranów na Compose. Gdy wszystkie fragmenty zostaną zastąpione komponentami, możesz przeprowadzić migrację wykresu nawigacji do Navigation Compose.
Konfigurowanie środowiska
Aby uwzględnić obsługę nawigacji w projekcie, dodaj te zależności do pliku build.gradle aplikacji:
Groovy
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21' } dependencies { def nav_version = "2.9.8" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" // JSON serialization library, works with the Kotlin serialization plugin. implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3" }
Kotlin
plugins { // Kotlin serialization plugin for type safe routes and navigation arguments kotlin("plugin.serialization") version "2.0.21" } dependencies { val nav_version = "2.9.8" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") // JSON serialization library, works with the Kotlin serialization plugin implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") }
Więcej informacji o dodawaniu innych komponentów architektury do projektu znajdziesz w artykule Dodawanie komponentów do projektu.
Dalsze kroki
Więcej dokumentacji i materiałów związanych z komponentem nawigacji znajdziesz w tych zasobach.
Szczegółowe przewodniki
Więcej informacji o tym, jak zaimplementować hosta nawigacji i NavController, oraz o tym, jak współdziałają one z Compose i innymi frameworkami interfejsu, znajdziesz w tych przewodnikach:
- Tworzenie kontrolera nawigacji: opisuje, jak utworzyć
NavController. - Tworzenie wykresu nawigacji: opisuje, jak utworzyć hosta nawigacji i wykres nawigacji.
- Przechodzenie do miejsca docelowego: pokazuje, jak używać
NavControllerdo przechodzenia między miejscami docelowymi na wykresie.
Codelabs
- Jetpack Navigation
- Fragmenty i komponent nawigacji
- Tworzenie aplikacji adaptacyjnej z dynamiczną nawigacją
Filmy
- Poruszanie się po nawigacji
- 10 sprawdzonych metod przejścia na pojedynczą aktywność
- Pojedyncza aktywność: dlaczego, kiedy i jak (Android Dev Summit '18)
- Android Jetpack: zarządzanie nawigacją w interfejsie za pomocą kontrolera nawigacji (Google I/O '18)