5

我有一个带有主导航图的应用程序模块和一个带有它自己的导航图的功能模块。功能导航包含在主导航图中。所以功能片段和导航图对应用模块导航图一无所知。我需要在主图中将堆栈从功能片段 A 弹出到片段 B。实现这一目标的最佳方法是什么?

4

2 回答 2

2

参考https://developer.android.com/guide/navigation/navigation-design-graph

您可以使用全局操作从 Fragment A 弹出到 app 模块中的 startDestination Fragment。

在您的功能模块导航图中,添加:

<!-- Action back to destination which launched into this in_game_nav_graph-->
      <action android:id="@+id/action_pop_out_of_game"
              app:popUpTo="@id/using_your_app_nav_graph_id_here"
              app:popUpToInclusive="true" />

然后,您可以从应用导航图中定义的 startDestination 导航到 Fragment B。

于 2021-04-28T03:49:41.333 回答
0

在带有 NavHostFragment 的 Activity 中,只需将堆栈弹回您要返回的片段即可。当然,这只有在您使用相同的 Activity 来管理主要和功能片段时才有效。

NavController controller = Navigation.findNavController(this, R.id.nav_host_fragment);
controller.popBackStack(R.id.the_id_of_fragment_defined_in_nav_graph, false);

假设导航图代码如下所示:

<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/nav_graph"
app:startDestination="@id/mainMenuFragment">
    <fragment
    android:id="@+id/mainMenuFragment"
    android:name="com.package.MainMenuFragment"
    android:label="MainMenuFragment"
    tools:layout="@layout/main_menu_fragment">
    <action
        android:id="@+id/open_feature"
        app:destination="@id/feature_graph" />
    </fragment>
    <include app:graph="@navigation/feature_graph" />
</navigation>
于 2021-09-01T13:49:04.383 回答