返回堆栈和导航

时间:2021-02-24 15:52:26

标签: android kotlin navigation audacity

我正在使用 Kotlin 指南按照 Udacity Android 制作一个 Trivia 应用程序。

在导航图中有三个目标屏幕; TitleFragment、GameFragment、GameOverFragment 和 GameWonFragment。 (包含代码图片)

在构建导航图时,我们通过设置popUpTo行为属性来设置系统后退键。

指南说我们要设置 popUpTo(包含)属性,用于将 GameFragment 连接到 GameOverFragment 和 GameWonFragment 的操作,这将通过在系统返回按钮点击时弹出包括 GameFragment 在内的片段返回到 TitleFragment。 我明白了

但是指南再次告诉我们将 GameOverFragment 和 GameWonFragment 中的 action 标记和 popUpTo 属性设置为 GameFragment。这次我们湿了 popUpTo 属性(独占),用于在系统返回键点击时弹出 TitleFragment。

两个设置都在做同样的事情;将我们带到系统返回键命中时的 TitleFragment。那么,为什么要设置2次呢?

1 个答案:

答案 0 :(得分:0)

正如 Documentation 所说:

<块引用>

使用操作导航时,您可以选择弹出其他 返回堆栈之外的目的地。例如,如果您的应用程序具有 初始登录流程,一旦用户登录,您应该弹出所有 返回堆栈中与登录相关的目的地,以便返回 按钮不会将用户带回登录流程。

要在从一个目的地导航到另一个目的地时弹出目的地, 将 app:popUpTo 属性添加到关联元素。 app:popUpTo 告诉导航库弹出一些目的地 返回堆栈作为对navigate() 调用的一部分。属性 value 是应保留的最近目的地的 ID 堆栈。

您还可以包含 app:popUpToInclusive="true" 以指示 app:popUpTo 中指定的目的地也应该从 返回堆栈。

当使用 popUpTo 时,从当前目的地到 popUpTo 中带有 id 的目的地的所有目的地都将被删除,除了带有 id 的目的地将保留在返回堆栈中。 并且当使用 popUpToInclusive = true 时,所有的目的地以及在 popUpTo 中带有 id 的目的地将从后堆栈中删除!

这个在官方documentation中有更清楚的详细解释。

享受吧!