Навигация – это взаимодействие, которое позволяет пользователям перемещаться по разным разделам приложения.
Компонент Navigation в Android Jetpack включает библиотеку Navigation, плагин Safe Args Gradle и инструменты, которые помогают реализовать навигацию в приложении. Компонент Navigation обрабатывает различные сценарии навигации – от простых нажатий кнопок до более сложных шаблонов, таких как панели приложений и панель навигации.
Основные понятия
В таблице ниже приведены основные понятия, связанные с навигацией, и типы, которые используются для их реализации.
Концепция |
Назначение |
Тип |
|---|---|---|
Хост |
Элемент интерфейса, содержащий текущий пункт назначения. То есть, когда пользователь перемещается по приложению, приложение по сути меняет места назначения в хосте навигации и за его пределами. |
|
График |
Структура данных, которая определяет все пункты назначения навигации в приложении и то, как они связаны друг с другом. |
|
Контроль |
Центральный координатор для управления навигацией между пунктами назначения. Контроллер предлагает методы для навигации между пунктами назначения, обработки ссылок на контент, управления обратным стеком и многого другого. |
|
Место назначения |
Узел в графе навигации. Когда пользователь переходит к этому узлу, хост показывает его контент. |
Обычно создается при построении графа навигации. |
Маршрут |
Уникальный идентификатор целевого сервиса и всех необходимых для него данных. Вы можете использовать маршруты для навигации. Маршруты помогают добраться до пункта назначения. |
Любой сериализуемый тип данных. |
Преимущества и функции
Компонент навигации предоставляет ряд других преимуществ и функций, в том числе следующие:
- Анимация и переходы. Стандартизированные ресурсы для анимации и переходов.
- Ссылки на контент. Реализует и обрабатывает ссылки на контент, которые направляют пользователя непосредственно к месту назначения.
- Шаблоны интерфейса. Поддерживает такие шаблоны, как панель навигации и нижняя панель навигации, требуя минимальных дополнительных усилий.
- Типобезопасность. Поддерживается передача данных между целевыми страницами с типобезопасностью.
- Поддержка ViewModel. Позволяет ограничить область действия
ViewModelграфом навигации, чтобы передавать данные, связанные с интерфейсом, между пунктами назначения графа. - Транзакции для работы с фрагментами. Полная поддержка и обработка транзакций для работы с фрагментами.
- Назад и вверх. По умолчанию правильно обрабатывает действия "Назад" и "Вверх".
Варианты фреймворков
Компонент Navigation поддерживает два основных фреймворка для реализации графа навигации в зависимости от архитектуры пользовательского интерфейса приложения:
- Compose. Если ваше приложение полностью создано с помощью Jetpack Compose, используйте Navigation Compose. Пункты назначения в графе – это composable-функции.
- Фрагменты. Если в вашем приложении используются компоненты View или сочетание View и Compose, используйте компонент Navigation на основе фрагментов. Пункты назначения в вашем графе – это фрагменты, которые могут содержать стандартные представления, контент Compose или их комбинацию.
Для приложений, переходящих с View на Compose, рекомендуется продолжать использовать компонент Navigation на основе фрагментов, преобразуя отдельные экраны в Compose. После того как все фрагменты будут заменены на composable-функции, вы сможете перенести граф навигации в Navigation Compose.
Как настроить среду
Чтобы добавить в проект поддержку навигации, включите в файл 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.10.2" // 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.10.2" // 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") }
Информацию о том, как добавить в проект другие компоненты архитектуры, вы найдете в статье Добавление компонентов в проект.
Дальнейшие действия
Дополнительную документацию и ресурсы, связанные с компонентом Navigation, можно найти по ссылкам ниже.
Подробные руководства
Дополнительную информацию о том, как реализовать хост навигации и NavController, а также о том, как они взаимодействуют с Compose и другими фреймворками пользовательского интерфейса, можно найти в следующих руководствах:
- Создание контроллера навигации. Описывает, как создать
NavController. - Создание графа навигации. Подробные инструкции по созданию хоста навигации и графа навигации.
- Переход к пункту назначения. Показывает, как использовать
NavControllerдля перемещения между пунктами назначения в графе.
Практические работы
- Навигация в Jetpack Compose
- Фрагменты и компонент навигации
- Как создать адаптивное приложение с динамической навигацией
Видео
- Навигация
- 10 рекомендаций по переходу на архитектуру с одним действием
- Single activity: Why, when, and how (Android Dev Summit '18)
- Android Jetpack: управление навигацией в интерфейсе с помощью контроллера навигации (Google I/O, 2018 г.)