перейти к фрагменту из другого графика, не являясь начальным пунктом назначения
На моем первом графике у меня есть следующее:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/firstGraph"
app:startDestination="@id/listFragment">
<fragment
android:id="@+id/listFragment"
android:name="com.example.ListFragment">
<action
android:id="@+id/action_list_to_details"
app:destination="@id/detailsFragment" />
</fragment>
<fragment
android:id="@+id/detailsFragment"
android:name="com.example.DetailsFragment">
</fragment>
</navigation>
На втором графике у меня есть следующее:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/secondGraph"
app:startDestination="@id/dashboardFragment">
<include app:graph="@navigation/firstGraph" />
<fragment
android:id="@+id/dashboardFragment"
android:name="com.example.DashboardFragment">
<action
android:id="@+id/action_dashboard_to_notification"
app:destination="@id/notificationFragment"/>
</fragment>
<fragment
android:id="@+id/notificationFragment"
android:name="com.example.NotificationsFragment">
<action
android:id="@+id/action_notification_to_details"
app:destination="@id/firstGraph"/>
</fragment>
</navigation>
Я хочу перейти от "notificationFragment" к "detailsFragment" напрямую, не являясь начальным пунктом назначения, включая второй стек графов
1 ответ
Согласно документации вложенного графа:
[Вложенные графы] также обеспечивают уровень инкапсуляции - пункты назначения за пределами вложенного графа не имеют прямого доступа ни к одному из пунктов назначения внутри вложенного графа.
Есть одно исключение из этого, когда вы перемещаетесь с использованием URI, эффективно ссылаясь на любой пункт назначения:
В отличие от навигации с использованием идентификаторов действий или пунктов назначения, вы можете перейти к любому URI на графике независимо от того, отображается ли пункт назначения. Вы можете перейти к пункту назначения на текущем графике или к пункту назначения на совершенно другом графике.
Поэтому вы можете добавить к своему графику неявную ссылку на контент:
<fragment
android:id="@+id/detailsFragment"
android:name="com.example.DetailsFragment">
<deepLink app:uri="android-app://your.package.name/details" />
</fragment>
Затем перейдите к этому месту назначения через URI:
val uri = Uri.parse("android-app://your.package.name/details")
navController.navigate(uri)
Неважно, какой у вас URI, если <deepLink>
и к чему вы переходите navigate
соответствие. Любые аргументы, которые у вас есть, должны быть закодированы в URL-адресе.