web-dev-qa-db-ja.com

開始先であることなく別のグラフからフラグメントに移動します。

私の最初のグラフでは、次の手順があります。

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

私の2番目のグラフでは、次の手順があります。

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

2番目のグラフスタックを含めて、開始先であることなく、「NotificationFragment」から「詳細フラグメント」に直接ナビゲートしたいです。

7
Ahmad Abdullah

それに従って 入れ子になったグラフのドキュメント

[ネストしたグラフ]ネストされたグラフの外側にある宛先レベルのカプセル化を提供します。ネストしたグラフ内の宛先のいずれかに直接アクセスできません。

あなたが RIを使用してナビゲートする任意の宛先には、それに1つの例外があります。

アクションまたは宛先IDを使用したナビゲーションとは異なり、宛先が表示されているかどうかにかかわらず、グラフ内の任意の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)
_

_<deepLink>_とnavigateが一致するものである限り、あなたのURIが何であるかは関係ありません。あなたが持っている引数はURLでエンコードされる必要があります。

13
ianhanniballake