使用底部导航视图和导航组件实现后退导航

3
我有一个底部导航视图,它有3个入口点(片段A、B和C),每个入口点都可以移动到其他片段(A->D,B->E,C->F)。为了导航,我正在使用架构导航组件。
我希望当用户在A、B或C中,并按下返回按钮时,应用程序会退出。如果他在D、E或F中,则应分别转到A、B或C。
根据文档,在菜单和导航图中拥有相同的ID是设置视图和导航组件的方法。
我知道我可以覆盖导航并自己处理它以实现我想要的效果,或者覆盖后退按钮。但我想知道是否有一种方法可以在不必手动处理它的情况下实现所需的行为(毕竟,这就是使用导航组件的目的)。有没有办法做到这一点?
此外,我想要实现的是Android材料设计中的期望行为吗?我理解它是,但我在材料设计文档中找不到它。我尝试了几个应用程序,看到不同的行为(Twitter、地图和Gmail不退出应用程序,但Tasks或Keep会退出),因此我认为这两种行为都是可接受的。

导航原则清楚地表明,您应始终退出图形的起始目的地(例如您的 A 屏幕)。您是否特别想知道如何遵循导航原则? - ianhanniballake
嗯,在这种情况下,我们正在讨论同一根级别上的几个屏幕,这就是为什么我希望它们都退出的原因。正如我所提到的,当从一个列表切换到另一个列表时,任务(tasks)和保持(keep)(从任务切换到提醒)-谷歌应用程序-确实做到了这一点。 - lotdrops
1个回答

2
导航原则是由 Google 的 Material 和 Android UX 团队专门设计的,旨在防止用户混淆后退按钮的作用:
“这个起始目的地也是用户按下后退按钮返回启动器后看到的最后一个屏幕。”
这确保了用户知道当他们在应用程序的任何其他屏幕上时,后退按钮不会将他们退出应用程序。相反,起始目的地作为指示牌,告诉用户按系统后退按钮将把他们带回启动器。
因此,当使用 NavigationUI 助手时,总是通过图形的起始目的地(即您的 A 屏幕)退出是绝对可以预期的。
导航有一个单独的概念,称为顶级目的地,它仅控制应用栏上的“向上箭头”是否显示。这允许多个顶级目的地(例如您的A、B和C)从用户的角度看出现在同一层次结构级别上,同时仍符合系统返回通过起始目的地的原则。

谢谢你的回答。那么,为了确保我正确理解,Tasks和Keep中实现的行为是否违反了导航原则?在Tasks中,如果您从一个列表切换到另一个列表并按返回键,则会退出应用程序。而在Keep中,如果您从笔记切换到提醒事项并按返回键,则会退出应用程序。 - lotdrops
个人而言,将谷歌应用程序视为某种光辉的例子通常是一个误导性的想法(它们都是独立的团队,具有独立的目标和优先事项)。任务的起始目的地(即它们的“片段A”)是任务列表。用另一个实例替换A仍意味着它们通过其起始目的地退出应用程序(这与底部导航栏完全不同,是您的用例的完全不同情况)。Keep在其笔记屏幕上确实有一个强大的起始目的地,因此在提醒、存档和其他标签之间保持一致似乎是对他们的良好反馈。 - ianhanniballake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接