我在抽屉中有4个片段,我们称它们为片段 A,B,C,D 。我使用导航架构将片段与抽屉绑定。
片段A是我的入口点,从那里我可以导航到抽屉中的任何位置。
假设我采用的路径 A> B> C> B> C
如果我从C退回,它将转到B,然后再次到C,然后到B,最后到A,但是我不想要那样。
当我从C按下“后退”按钮时,我希望它先回到B再回到A,而不重新创建已经在后退堆栈中的片段。有人可以帮忙实现此目标吗?
答案 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!