Nawigacja

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.

NavGraph

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.

NavController

Miejsce docelowe

Węzeł na wykresie nawigacji. Gdy użytkownik przejdzie do tego węzła, host wyświetli jego zawartość.

NavDestination

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 ViewModel na 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:

Codelabs

Filmy

Przykłady