在NavController导航图android中处理导航堆栈?

问题描述 投票:0回答:1

[工具栏上有一个设置按钮,它会打开一个片段,其中包含用于打开更多片段的选项列表。

设置页面有2个选项

  • 个人资料
  • 更改密码

用户可以导航到任何页面,并且每个页面的用户都可以看到工具栏

如果单击配置文件->配置文件片段已启动->然后单击工具栏上的设置->设置页面已启动

现在,当我按回时,我被重定向到我不想发生的Profile Fragment。它应该重定向到设置片段之前的最后访问页面,因为配置文件和密码片段是设置片段的子片段

这是我的设置片段流的导航图

 <fragment
    android:id="@+id/settingsFragment"
    android:name="com.mountmeru.view.settings.SettingsFragment"
    android:label="fragment_settings"
    tools:layout="@layout/fragment_settings">
    <action
        android:id="@+id/action_settingsFragment_to_profileFragment"
        app:destination="@id/profileFragment" />
    <action
        android:id="@+id/action_settingsFragment_to_resetPasswordFragment"
        app:destination="@id/resetPasswordFragment" />
</fragment>

这是我导航到个人资料和密码片段的方式

 view.findNavController().navigate(
        R.id.action_settingsFragment_to_profileFragment)

 view.findNavController().navigate(
        R.id.action_settingsFragment_to_resetPasswordFragment)
android navigation fragment android-architecture-navigation android-jetpack-navigation
1个回答
0
投票

在ProfileFragment的导航图中,您可以使用:

<fragment
    android:id="@+id/profileFragment"            
    ...>

    <action
        android:id="@+id/action_profileFragment_to_settingsFragment"
        app:destination="@+id/settingsFragment"
        app:popUpTo="@id/profileFragment"
        app:popUpToInclusive="true" />

</fragment>

您可以找到有关popUpTo和pupUpToInclusive here的更多信息。

您也可以在代码中完成此操作(无需更改导航图):

findNavController()
        .navigate(R.id.action_profileFragment_to_settingsFragment,
                null,
                NavOptions.Builder()
                    .setPopUpTo(R.id.profileFragment,
                     true).build()
        )
© www.soinside.com 2019 - 2024. All rights reserved.