перейти к фрагменту из другого графика, не являясь пунктом назначения - PullRequest
1 голос
/ 30 января 2020

На моем первом графике у меня есть следующее:

<?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>

Я хочу перейти от "tificationFragment "к" detailsFragment "напрямую, без указания пункта назначения, включая второй стек графов

1 Ответ

1 голос
/ 16 февраля 2020

В соответствии с документацией вложенного графа :

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

Существует одно исключение из этого, когда вы перемещаетесь с использованием 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.

...