导航架构组件 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 在返回堆栈中的主要内容,如果未能解决你的问题,请参考以下文章
导航架构组件 - 如何使用导航控制器设置/更改自定义后退或汉堡图标?
launchmode =“singletask”的xml等效标志
Android 导航架构组件 - 导航架构组件是不是意味着仅使用单个活动?