Согласно документации для глубоких ссылок :
Когда пользователь открывает ваше приложение через явную глубокую ссылку, задний стек заданий очищается и заменяется назначением для глубоких ссылок,При вложенных графах начальное назначение с каждого уровня вложенности, то есть начальное назначение с каждого элемента в иерархии, также добавляется в стек.
Поэтому, когдаВаша глубокая ссылка на fragment_discover_landing
, обратный стек mobile_navigation
, fragment_home
, затем fragment_discover_landing
.Поскольку fragment_reading_lists
не является startDestination
графика, он не добавляется в задний стек и, следовательно, OnDestinationChangedListener
, который setupWithNavController
использует для выбора соответствующей вкладки, никогда не видит этого места назначения.
Если вы хотите, чтобы fragment_reading_lists
находился в вашем заднем стеке, он должен быть startDestination вложенного графа, содержащего ваш fragment_discover_landing
пункт назначения:
<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/mobile_navigation"
app:startDestination="@id/fragment_home">
<fragment
android:id="@+id/fragment_home"
android:name="com.my.app.fragments.HomeFragment"
android:label="@string/nav_home"
tools:layout="@layout/home_fragment">
<action
android:id="@+id/action_fragment_home_to_fragment_browse_categories"
app:destination="@id/fragment_browse_categories" />
</fragment>
<fragment
android:id="@+id/fragment_browse_categories"
android:name="com.my.app.fragments.BrowseCategoriesFragment"
android:label="@string/discover_default_header"
tools:layout="@layout/browse_categories_fragment" />
<!-- Make sure to change your menu.xml to use @+id/reading_lists -->
<navigation
android:id="@+id/reading_lists"
app:startDestination="@+id/fragment_reading_lists">
<fragment
android:id="@+id/fragment_reading_lists"
android:name="com.my.app.fragments.ReadingListHubFragment"
android:label="@string/nav_readinglists"
tools:layout="@layout/readinglists_landing">
<action
android:id="@+id/action_fragment_reading_lists_to_fragment_discover_landing"
app:destination="@id/fragment_discover_landing" />
</fragment>
<fragment
android:id="@+id/fragment_discover_landing"
android:name="com.my.app.fragments.DiscoverLandingFragment"
android:label="@string/nav_discover_landing"
tools:layout="@layout/discover_landing_fragment">
<action
android:id="@+id/fragment_discover_landing_back_action"
app:popUpTo="@id/fragment_reading_lists"
app:popUpToInclusive="false" />
<argument
android:name="category"
android:defaultValue="Latest"
app:argType="string" />
<argument
android:name="searchText"
app:argType="string" />
<argument
android:name="searchMode"
android:defaultValue="false"
app:argType="boolean" />
<deepLink
android:id="@+id/discover_landing_category"
app:uri="myApp://discover/category?name={category}" />
</fragment>
</navigation>
<fragment
android:id="@+id/fragment_browse_library"
android:name="com.my.app.fragments.BrowseLibraryFragment"
android:label="@string/nav_library"
tools:layout="@layout/fragment_mylibrary_all" />
<fragment
android:id="@+id/fragment_downloads"
android:name="com.my.app.fragments.DownloadsFragment"
android:label="@string/nav_downloads"
tools:layout="@layout/fragment_mylibrary_offline" />
</navigation>
Обратите внимание, что согласно Design навигациядокументация графиков :
[вложенные графики] также обеспечивают уровень инкапсуляции - пункты назначения вне вложенного графа не имеют прямого доступа ни к одному из пунктов назначения во вложенном графе.
Таким образом, это может иметь побочный эффект, так что ваш fragment_discover_landing
не будет виден ни одному месту назначения за пределами fragment_reading_lists
. Эта проблема отслеживает навигацию по глубокой ссылке, которая позволит вам получить доступ к пункту назначения из любой точки вашего приложения по добавленной к нему URL-ссылке, но она пока недоступна.