弹出图startDestination片段以进行全局操作-Android导航组件

时间:2020-01-08 14:31:14

标签: android navigation androidx android-jetpack android-architecture-navigation

我有一个多图导航应用程序,我想使用根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标志,如何为全局动作获得相同的行为?

1 个答案:

答案 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中指定的目的地也应从后堆栈中删除