如何使用导航架构组件避免碎片重新生成?

时间:2020-09-26 11:32:12

标签: android kotlin navigation-drawer android-architecture-navigation back-stack

我在抽屉中有4个片段,我们称它们为片段 A,B,C,D 。我使用导航架构将片段与抽屉绑定。

片段A是我的入口点,从那里我可以导航到抽屉中的任何位置。

假设我采用的路径 A> B> C> B> C

如果我从C退回,它将转到B,然后再次到C,然后到B,最后到A,但是我不想要那样。

当我从C按下“后退”按钮时,我希望它先回到B再回到A,而不重新创建已经在后退堆栈中的片段。有人可以帮忙实现此目标吗?

1 个答案:

答案 0 :(得分:1)

当我按C的后退按钮时,我希望它回到B 然后A而不重新创建已经在后面的片段 堆栈。

导航到目的地时,可以从后堆栈中弹出目的地的旧实例。只需将包含流行元素的内容添加到导航图中的所有action中即可。

<!-- Add this in the actions navigating to B -->
app:popUpTo="@id/B" 
app:popUpToInclusive="true"

说明

上面的弹出行为将要做的是,当您从诸如 C> B 导航时,它将弹出所有内容,直到从堆栈中返回B(包括B),并添加最新的B实例。在后面的堆栈上。

A> B> C> B> C 将具有后退堆栈:

A
A, B
A, B, C
A, B
A, B, C

注意: 这里固有的假设是,在您的示例中这不是有效的情况。 A> B> C> D> B> C 导致对 C> B> D> A 的回溯。请注意,在上述解决方案中,当您导航到第二个B时,它也会从堆栈中弹出D!