带有底部导航视图和导航组件的后退导航

Back navigation with bottom navigation view and navigation component

我有一个带有 3 个入口点(片段 A、B 和 C)的底部导航视图,每个入口点都可以移动到其他片段(A->D、B->E、C->F)。为了导航,我使用了架构导航组件。 我希望当用户在 A、B 或 C 中并且他按下后退按钮时应用程序退出。如果他在D、E或F,他应该分别去A、B或C。

根据文档,在菜单和导航图中具有相同的 ID 是设置视图和导航组件的方法。

我知道我可以覆盖导航并自己处理它来实现我想要的,或者覆盖后退按钮。但我想知道是否有一种无需手动处理即可实现所需行为的方法(毕竟,这就是使用导航组件的意义所在)。有办法吗?

此外,我想在 material 设计中使用 Android 实现所需的行为吗?我的理解是,但我在 material 设计文档中找不到它。我尝试了几个应用程序,我看到了不同的行为(twitter、地图和 gmail 不会退出应用程序,但任务或继续),所以我认为这两种行为都是可以接受的。

Principles of Navigation 是由 Material 和 Android UX 团队在 Google 专门构建的应用程序设计方式,以防止混淆后退按钮将执行:

This [start] destination is also the last screen the user sees when they return to the launcher after pressing the Back button.

这可确保用户知道在您应用的任何其他屏幕上时,后退按钮不会将他们踢出应用。相反,该起始目的地作为一个标志 post 向用户表明按下系统后退按钮 将他们踢回启动器。

因此,绝对期望在使用 NavigationUI 助手时,您将始终通过图表的起始目的地(即您的 A 屏幕)退出。

导航有一个单独的概念,称为 top level destinations,它仅控制是否显示应用栏上的向上箭头。这允许多个顶级目的地(例如您的 A、B 和 C)从用户的角度出现在同一层级,同时仍然匹配系统返回通过起始目的地退出的原则。