Навигация

Навигация относится к взаимодействиям, которые позволяют пользователям перемещаться по различным частям контента вашего приложения, входить в них и выходить из них.

Компонент навигации Android Jetpack включает библиотеку навигации , подключаемый модуль Safe Args Gradle и инструменты, которые помогут реализовать навигацию в приложении. Компонент «Навигация» обрабатывает разнообразные варианты использования навигации: от простых нажатий кнопок до более сложных шаблонов, таких как панели приложений и панель навигации.

Ключевые понятия

В следующей таблице представлен обзор ключевых концепций навигации и основных типов, которые вы используете для их реализации.

Концепция

Цель

Тип

Хозяин

Элемент пользовательского интерфейса, содержащий текущий пункт назначения навигации. То есть, когда пользователь перемещается по приложению, приложение по существу меняет места назначения на хост навигации и обратно.

График

Структура данных, которая определяет все пункты назначения навигации в приложении и то, как они соединяются друг с другом.

NavGraph

Контроллер

Центральный координатор управления навигацией между пунктами назначения. Контроллер предлагает методы навигации между пунктами назначения, обработки глубоких ссылок, управления обратным стеком и многого другого.

NavController

Место назначения

Узел в графе навигации. Когда пользователь переходит к этому узлу, хост отображает его содержимое.

NavDestination

Обычно создается при построении графа навигации.

Маршрут

Уникально идентифицирует пункт назначения и все необходимые для него данные.

Вы можете перемещаться по маршрутам. Маршруты доставят вас к местам назначения.

Любой сериализуемый тип данных.

Преимущества и особенности

Компонент «Навигация» предоставляет ряд других преимуществ и функций, в том числе следующие:

  • Анимации и переходы: предоставляет стандартизированные ресурсы для анимации и переходов.
  • Глубокие ссылки: реализуют и обрабатывают глубокие ссылки, которые направляют пользователя непосредственно к месту назначения.
  • Шаблоны пользовательского интерфейса: поддерживает такие шаблоны, как панели навигации и нижняя навигация, с минимальной дополнительной работой.
  • Безопасность типов: включает поддержку передачи данных между пунктами назначения с безопасностью типов .
  • Поддержка ViewModel: позволяет ограничить ViewModel навигационным графом для обмена данными, связанными с пользовательским интерфейсом, между пунктами назначения графа.
  • Транзакции фрагментов: полностью поддерживает и обрабатывает транзакции фрагментов.
  • Назад и вверх: по умолчанию корректно обрабатываются действия назад и вверх.

Настройте свою среду

Чтобы включить поддержку навигации в свой проект, добавьте следующие зависимости в файл build.gradle вашего приложения:

классный

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

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

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

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

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

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

Котлин

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

dependencies {
  val nav_version = "2.8.4"

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

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

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

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

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

Информацию о добавлении других компонентов архитектуры в проект см. в разделе Добавление компонентов в проект .

Следующие шаги

Дополнительную документацию и ресурсы, связанные с компонентом навигации, см. в следующих ресурсах.

Подробные руководства

Дополнительные сведения о том, как реализовать навигационный узел и NavController , а также подробности о том, как они взаимодействуют с Compose и другими платформами пользовательского интерфейса, см. в следующих руководствах:

Кодлабы

Видео

Образцы