Ликбез По Навигационной Составляющей: Для Тех, Кто Пропустил Все Уроки

Эта история для тех, кто еще не знаком с компонентом навигации.

Здесь мы пройдемся по основным элементам библиотеки и посмотрим, как все это выглядит. Сейчас вы находитесь в первой части большого материала о Компоненте навигации в многомодульном проекте.

Если вы уже знакомы с основами, то рекомендую перейти к частям:

  • Как работает плагин Safe Args и что он делает .

  • Работа с компонентом навигации в многомодульном проекте совместно с SafeArgs .

  • Решение для iOS-подобной многостековой навигации
TLDR: Чтобы организовать навигацию в приложении с помощью Компонента навигации, необходимо:
  1. Создать график;
  2. Добавьте к нему экраны;
  3. Добавьте переходы между ними;
  4. При необходимости добавьте вложенные графики;
  5. Поместите весь этот хаос в NavHost;
  6. Укажите переходы в коде.



Основные компоненты навигации



Ликбез по навигационной составляющей: для тех, кто пропустил все уроки

1. Граф навигации — основная единица навигации.

Это граф, вершины которого — экраны, а ребра — переходы между ними.

График создается в отдельном XML-файле в папке res/navigation. Чтобы не ввести navController в заблуждение, нужно в столбце указать его начальную точку (startDestination) 2. Назначение представляет собой единицу пользовательского интерфейса на графике (Fragment/Activity/Dialog/NestedGraph).

3. Действие обозначает переход между пунктами назначения графа.

Он может быть как направленным (с одного экрана на другой), так и глобальным (не иметь вершины, из которой происходит переход).

4. Вложенный граф — это вложенный граф.

Если один график мал или очень велик, вы можете разделить его на несколько и повторно использовать один график в другом, используя команду ярлык.

5. NavHost — контейнер, в котором будет происходить навигация.

Для корректной работы нужно указать контейнеру, что это NavHostFragment и передать граф навигации.

Это выглядит так:

  
  
  
  
  
  
   

<androidx.fragment.app.FragmentContainerView android:id="@+id/navHost" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:defaultNavHost="true" app:navGraph="@navigation/nav_main" />

6. NavController — объект, отвечающий за навигацию.

Оно появится далее в пункте о переходах.

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

Переходы между экранами

Переходы между экранами можно осуществлять через Action или DeepLink. Переход с помощью действия На что это похоже:

<action android:id=”@+id/action_to_user_details” app:destination=”@id/userDetailsFragment” app:enterAnim=”@anim/add_fragment_animation” app:exitAnim=”@anim/pop_fragment_animation” app:popEnterAnim=”@anim/pop_enter_animation” app:popExitAnim=”@anim/pop_exit_animation”>

Переход вызова:

navController.navigate( R.id.action_to_user_details, Bundle().

apply {putString(USER_ID, userId)} )

Получение аргументов на «другом конце»:

private val userID by lazy { arguments!![USER_ID] }

Переход с использованием глубокой ссылки На что это похоже:

<deepLink app:uri=”app://customUriЭparameter={parameterName }” />

Переход вызова:

navController.navigate( Uri.parse(“ app://customUriЭparameter=$reason ”) )

Получение аргументов на «другом конце»:

private val refundId by lazy { arguments?.

getString(“parameter”, null) }

Вот и все! Довольно просто и понятно — вот что делает компонент навигации таким привлекательным.

Теперь давайте углубимся в как работает плагин Safe Args и что он делает и давайте начнем работа с компонентом навигации в многомодульном проекте совместно с SafeArgs И Многостековая навигация в стиле iOS .

Теги: #Android #Разработка Android #Разработка мобильных приложений #компонент навигации #навигация для Android

Вместе с данным постом часто просматривают: