Navigation

Navigation bezieht sich auf die Interaktionen, mit denen Nutzer in Ihrer App zwischen den verschiedenen Inhalten navigieren können.

Die Navigation-Komponente von Android Jetpack umfasst die Navigation Bibliothek, das Safe Args Gradle-Plug-in, und Tools, mit denen Sie die App-Navigation implementieren können. Die Navigation-Komponente verarbeitet verschiedene Navigationsanwendungsfälle, von einfachen Schaltflächenklicks bis hin zu komplexeren Mustern wie App-Leisten und der Navigationsleiste.

Wichtige Konzepte

Die folgende Tabelle bietet eine Übersicht über die wichtigsten Konzepte in der Navigation und die Haupttypen, die Sie zur Implementierung verwenden.

Konzept

Zweck

Typ

Host

Ein UI-Element, das das aktuelle Navigationsziel enthält. Wenn ein Nutzer durch eine App navigiert, werden die Ziele im Navigationshost im Wesentlichen ausgetauscht.

Grafik

Eine Datenstruktur, die alle Navigationsziele in der App und ihre Verbindungen definiert.

NavGraph

Controller

Der zentrale Koordinator für die Verwaltung der Navigation zwischen Zielen. Der Controller bietet Methoden zum Navigieren zwischen Zielen, zum Verarbeiten von Deeplinks, zum Verwalten des Back-Stacks und mehr.

NavController

Ziel

Ein Knoten im Navigationsdiagramm. Wenn der Nutzer zu diesem Knoten navigiert, zeigt der Host dessen Inhalt an.

NavDestination

Wird in der Regel beim Erstellen des Navigationsdiagramms erstellt.

Route

Identifiziert ein Ziel und alle dafür erforderlichen Daten eindeutig.

Sie können über Routen navigieren. Routen führen Sie zu Zielen.

Jeder serialisierbare Datentyp.

Vorteile und Funktionen

Die Navigation-Komponente bietet eine Reihe weiterer Vorteile und Funktionen, darunter:

  • Animationen und Übergänge:Bietet standardisierte Ressourcen für Animationen und Übergänge.
  • Deeplinks:Implementiert und verarbeitet Deeplinks, die den Nutzer direkt zu einem Ziel führen.
  • UI-Muster:Unterstützt Muster wie Navigationsleisten und Bottom-Navigation mit minimalem zusätzlichem Aufwand.
  • Typsicherheit: Unterstützt die Übergabe von Daten zwischen Zielen mit Typsicherheit.
  • ViewModel-Unterstützung:Ermöglicht das Festlegen des Gültigkeitsbereichs eines ViewModel auf ein Navigationsdiagramm, um UI-bezogene Daten zwischen den Zielen des Diagramms freizugeben.
  • Fragmenttransaktionen:Unterstützt und verarbeitet Fragmenttransaktionen vollständig.
  • Zurück und nach oben:Verarbeitet Aktionen zum Zurückkehren und zum Aufrufen der übergeordneten Ebene standardmäßig korrekt.

Framework-Optionen

Die Navigation-Komponente unterstützt zwei primäre Frameworks für die Implementierung Ihres Navigationsdiagramms, je nach UI-Architektur Ihrer App:

  • Compose: Wenn Ihre App vollständig mit Jetpack Compose erstellt wurde, verwenden Sie Navigation Compose. Ziele in Ihrem Diagramm sind Composables.
  • Fragmente: Wenn Ihre App Views oder eine Kombination aus Views und Compose verwendet, verwenden Sie die fragmentbasierte Navigation-Komponente. Ziele in Ihrem Diagramm sind Fragmente, die Standard-Views, Compose-Inhalte oder eine Kombination aus beidem hosten können.

Für Anwendungen, die von Views zu Compose migrieren, empfiehlt es sich, die fragmentbasierte Navigation-Komponente weiterhin zu verwenden und einzelne Bildschirme in Compose zu konvertieren. Sobald alle Fragmente durch Composables ersetzt wurden, können Sie das Navigationsdiagramm zu Navigation Compose migrieren.

Umgebung einrichten

Wenn Sie die Navigationsunterstützung in Ihr Projekt einbeziehen möchten, fügen Sie der Datei build.gradle Ihrer App die folgenden Abhängigkeiten hinzu:

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")
}

Informationen zum Hinzufügen anderer Architekturkomponenten zu Ihrem Projekt finden Sie unter Komponenten zu Ihrem Projekt hinzufügen.

Nächste Schritte

Weitere Dokumentation und Ressourcen zur Navigation-Komponente finden Sie in den folgenden Ressourcen.

Ausführliche Anleitungen

Weitere Informationen zum Implementieren eines Navigationshosts und eines NavController sowie Details zur Interaktion mit Compose und anderen UI-Frameworks finden Sie in den folgenden Anleitungen:

Codelabs

Videos

Beispiele