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

Posted

技术标签:

【中文标题】导航架构组件 singleTask 或 singleInstance 在返回堆栈中【英文标题】:Navigation Architecture Component singleTask or singleInstance in back stack 【发布时间】:2019-07-15 15:19:05 【问题描述】:

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

【问题讨论】:

你找到答案了吗? @JashanPJ 不,我刚刚使用了这个解决方案github.com/STAR-ZERO/navigation-keep-fragment-sample 【参考方案1】:

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

例如,您有片段 Home、Login 和 Register。

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

<action
    android:id="@+id/action_navigation_register_to_navigation_login"
    app:destination="@id/navigation_login"
    app:popUpTo="@id/navigation_login" />

堆栈可视化:

             Register
             ____
Login  ==>   Login   ==>   Login
____         ____          ____
Home         Home          Home

【讨论】:

以上是关于导航架构组件 singleTask 或 singleInstance 在返回堆栈中的主要内容,如果未能解决你的问题,请参考以下文章

导航架构组件 - 如何使用导航控制器设置/更改自定义后退或汉堡图标?

带有导航组件的 Android 深层链接无法按预期工作

launchmode =“singletask”的xml等效标志

Android 导航架构组件 - 导航架构组件是不是意味着仅使用单个活动?

解开Android应用程序组件Activity的"singleTask"之谜

导航架构组件 - 导航抽屉