我有一个多图导航应用程序,我想使用根global action
定义的main_graph.xml
在图之间切换
<?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/main_graph"
app:startDestination="@id/loadingFragment">
<include app:graph="@navigation/learn_graph" />
<action
android:id="@+id/action_global_learn_graph"
app:destination="@id/learn_graph"
app:launchSingleTop="true"
/>
</navigation>
由于我试图在图之间进行切换,因此在将全局操作导航到目标图(explore_graph)时,我想从源图(main_graph)加载的片段中清除后堆栈。预期的行为是导航到目标图的startDestination
片段,仅将该片段保留在后堆栈中。
对于正常动作(同一图中的动作),我可以使用popUpTo
标志,如何为全局动作获得相同的行为?
答案 0 :(得分:3)
经过多次尝试,我找到了解决方案。基本思想是将后退堆栈弹出到“拥有”全局动作的图形上。在我的情况下,main_graph
是所有者,所以我这样做:
<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/main_graph"
app:startDestination="@id/loadingFragment">
<include app:graph="@navigation/learn_graph" />
<action
android:id="@+id/action_global_learn_graph"
app:destination="@id/learn_graph"
app:popUpTo="@+id/main_graph"
app:launchSingleTop="true" />
</navigation>
此外,您必须将app:launchSingleTop
标志设置为true
,以使目标图的实例在您的后堆栈中唯一
您还可以包括app:popUpToInclusive="true"
,以指示app:popUpTo
中指定的目的地也应从后堆栈中删除。