Назначения диалогов, глубокие ссылки и вложенные графики

Компонент навигации Jetpack - это преобразующая библиотека, которая окажет огромное влияние на то, как разработчики пишут код для навигации между экранами.

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

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

С учетом сказанного, давайте начнем.

Назначения диалогов

Чтобы объяснить назначение диалоговых окон, мы возьмем BottomSheetDialogFragment в качестве примера. Допустим, у нас есть список фильмов, когда вы нажимаете на фильм. Нам нужно показать детали диалогового окна нижнего листа.

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

Без промедления создадим фрагмент диалогового окна нижнего листа с именем MovieDetailsDialog:

Это простой диалог нижнего листа, в котором мы использовали viewBinding для связывания макета. Следующим шагом является создание пункта назначения на навигационном графике для этого диалогового окна. Вместо того, чтобы использовать здесь общий фрагмент, нам нужно использовать тег dialog:

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

Это все. Теперь вы на шаг ближе к переходу вашего приложения от традиционной навигационной системы к совершенно новому навигационному компоненту Jetpack.

Глубокие ссылки

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

Что такое глубокая ссылка?

Глубинные ссылки аналогичны ссылкам или URL-адресам, которые мы используем ежедневно. Каждая ссылка или URL-адрес используются для перехода пользователя к определенному месту назначения. Например, давайте посмотрим на следующий URL:

https://www.examplemovies.com/avengers?part=3

Обычно в Интернете по этому URL загружаются avengers part3 сведения о фильме. То же самое и в мобильных приложениях. В Android мы используем концепцию фильтров намерений, чтобы связать определенный экран с определенной ссылкой. Чтобы узнать об основах работы с глубокими ссылками, перейдите к этой статье.

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

Мы можем создать глубокую ссылку на пункт назначения с помощью редактора навигации. Перейдите на вкладку «Дизайн» и щелкните панель «Атрибуты» в правой части студии. Затем вы увидите параметр «Глубинные ссылки» со знаком плюса для создания глубинной ссылки на выбранный вами пункт назначения:

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

Вы можете создать явную ссылку на контент как часть уведомления или ярлыка приложения. После того, как мы создали ссылку на контент, место назначения диалогового окна на графике будет выглядеть следующим образом:

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

Мы можем использовать NavDeepLinkBuilder для создания ожидающего намерения и использовать его для навигации:

Вложенные графы

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

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

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

Мы можем создавать отдельные графики для каждого модуля в приложении. Например, если мы возьмем развлекательное приложение, мы можем создать отдельные графики для процесса входа в систему, входа в систему, телешоу, фильмов и т. Д. На основе функциональности графика.

Каким бы полезным это ни казалось, нам нужно следовать нескольким правилам, чтобы использовать вложенные графы. Первое и самое важное правило - вложенные графы должны быть инкапсулированы внутри корневого графа. Их нельзя использовать по отдельности.

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

Группируйте пункты назначения во вложенные графы

  • В редакторе навигации вам сначала нужно выбрать все места назначения, которые вы собираетесь поместить во вложенный график. Мы можем сделать это, нажав и удерживая клавишу Shift и щелкнув места назначения.
  • Затем нам нужно щелкнуть правой кнопкой мыши и выбрать «Переместить к вложенному графику» ›« Новый график ». Это создаст вложенный график и переместит выбранные места назначения. Посмотри:

  • Дважды щелкните вложенный график, чтобы отобразить его назначения.
  • Мы можем инициировать назначения вложенного графа из корневого графа, как показано ниже:

Бонус

Чтобы узнать больше о библиотеках Jetpack, прочтите следующие статьи:

Чтобы узнать больше о расширенной разработке Android, прочтите следующие статьи:

Это все. Надеюсь, вы узнали что-то полезное. Спасибо за прочтение.