弹出全局操作的图形 startDestination 片段 - Android 导航组件
pop up to graph startDestination fragment for a global action - Android navigation components
我有一个多图导航应用程序,我想使用根 main_graph.xml
中定义的 global action
在图之间切换
<?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>
因为我试图在图之间切换,所以我想在将全局操作导航到目标图时从源图 (main_graph) 加载的片段中清除返回堆栈 (explore_graph).预期的行为是导航到目标图的 startDestination
片段,只在后台堆栈中保留该片段。
对于正常操作(同一图中的操作),我可以使用 popUpTo
标志,如何为全局操作获得相同的行为?
经过多次尝试,我找到了解决办法。基本想法是将后台堆栈弹出到“拥有”全局操作的图形。在我的例子中 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
中指定的目标也应从返回堆栈中删除。
我有一个多图导航应用程序,我想使用根 main_graph.xml
global action
在图之间切换
<?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>
因为我试图在图之间切换,所以我想在将全局操作导航到目标图时从源图 (main_graph) 加载的片段中清除返回堆栈 (explore_graph).预期的行为是导航到目标图的 startDestination
片段,只在后台堆栈中保留该片段。
对于正常操作(同一图中的操作),我可以使用 popUpTo
标志,如何为全局操作获得相同的行为?
经过多次尝试,我找到了解决办法。基本想法是将后台堆栈弹出到“拥有”全局操作的图形。在我的例子中 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
中指定的目标也应从返回堆栈中删除。