微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

返回堆栈和导航

如何解决返回堆栈和导航

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

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

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

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

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

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

解决方法

正如 Documentation 所说:

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

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

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

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

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

享受吧!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。