导航架构组件 singleTask 或 singleInstance 在返回堆栈中

Ars*_*ius 9 navigation android android-fragments android-sdk-tools android-jetpack

我有一个 BottomNavigationView,我想用它在三个或四个不同的片段之间导航。如果我实例化了一个片段,我不想再为同一个片段做一次,我只想重用它。NavOptions 类提供 launchSingleTop 属性以避免创建新实例,如果这种实例已经在返回堆栈的顶部。但是对于导航控制器中的片段返回堆栈的 singleTask 或 singleInstance 选项如何?如果我不需要创建新的片段实例,如果它已经在后台堆栈中,而我只想把它放在最上面?如何使用 Jetpack 的导航架构组件实现这一点?

Ber*_*hus 0

我刚刚偶然发现了这个问题,终于找到了解决方案。您可以使用popUpTo它来实现它。

例如,您有主页、登录和注册片段。

从片段主页,您导航到“登录”,然后导航到“注册”,然后再次导航到“登录”。为了防止重复的登录片段,您应该设置popUpTo="@id/login_fragment"该操作。

<action
    android:id="@+id/action_navigation_register_to_navigation_login"
    app:destination="@id/navigation_login"
    app:popUpTo="@id/navigation_login" />
Run Code Online (Sandbox Code Playgroud)

堆栈可视化:

             Register
             ____
Login  ==>   Login   ==>   Login
____         ____          ____
Home         Home          Home
Run Code Online (Sandbox Code Playgroud)