Навигация

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

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

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

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

Концепция

Цель

Тип

Хозяин

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

График

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

NavGraph

Контроллер

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

NavController

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

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

NavDestination

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

Маршрут

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

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

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

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

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

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

Параметры фреймворка

Компонент «Навигация» поддерживает две основные платформы для реализации графа навигации, в зависимости от архитектуры пользовательского интерфейса вашего приложения:

  • Compose : Если ваше приложение полностью создано с помощью Jetpack Compose, используйте Navigation Compose. Пункты назначения в вашем графе являются компонуемыми объектами.
  • Фрагменты : Если ваше приложение использует Views или их комбинацию, используйте компонент навигации на основе фрагментов. Пунктами назначения в вашем графе являются фрагменты, которые могут содержать стандартные Views, контент Compose или их комбинацию.

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

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

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

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

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

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

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

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

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

Кодлабс

Видео

Образцы