导航架构组件中back stack中的singleTask或singleInstance模式

10
我有一个BottomNavigationView,希望用它来在三到四个不同的fragment之间进行导航。如果我已经实例化了其中一个fragment,我不想再次为相同的fragment创建新实例,而是希望重复使用它。 NavOptions类提供了launchSingleTop属性,以避免在回退堆栈的顶部已经存在这种实例的情况下创建新实例。但是,对于导航控制器中的fragment回退堆栈,singleTask或singleInstance选项如何处理呢?如果我不需要为已经在回退堆栈中的fragment创建新实例,而只是想将其置于顶部,该怎么做?如何使用Jetpack的Navigation Architecture Component实现这一点?

你找到了答案吗? - Jashan PJ
1
@JashanPJ 不是,我只是使用了这个解决方案 https://github.com/STAR-ZERO/navigation-keep-fragment-sample - Arsenius
1个回答

0

我刚刚遇到了这个问题,并且最终找到了一个解决方案。您可以使用popUpTo来实现。

例如,你有 Home,Login,和 Register 三个碎片。

从 Home 碎片开始,你跳转到 Login,然后再到 Register,并最后回到 Login。为了防止重复的 Login 碎片,你应该在操作中设置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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接