导航设计指南解释:
当以前查看的屏幕也是当前屏幕的分层父屏幕时,按"后退"按钮与按"向上"按钮的结果相同,这是常见的情况。 向上与向后 - 导航指南
我有一个主活动 A,它在触摸导航抽屉中的导航条目时打开另一个活动 B。活动 A 设置为在 AndroidManifest:android:parentActivityName=".MainActivity"
中活动 B 的父级
。我按照这个安卓文档添加了对活动 B 的导航。它显示了如何在活动 B 中实现onOptionsItemSelected
:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
// Respond to the action bar's Up/Home button
NavUtils.navigateUpFromSameTask(this)
return true
}
}
return super.onOptionsItemSelected(item)
}
当我从活动 B 按回时,活动 A 的状态已保存,导航抽屉已打开。但是,如果我使用向上导航,则会调用活动 A 的onCreate()
并且它失去了状态(抽屉关闭等(。
这不是引用的"相同结果"。
当我用简单的finish()
替换NavUtils.navigateUpFromSameTask(this)
时,它具有与按下返回相同的行为 - 保留活动 A 的状态。
当然,我更喜欢使用完成的方式。那么预期的行为是什么?指南是否相互矛盾或遗漏了什么?
不幸的是,谷歌将文档保留的时间超过了相关时间,甚至会发布两个直接相互矛盾的不同文档。
对于"向上"按钮,您的链接显示
"向上"按钮显示在应用栏中,用于根据屏幕之间的层次结构关系在应用内导航。[...]
"后退"按钮显示在系统导航栏中,用于按时间倒序浏览用户最近使用的屏幕历史记录。它通常基于屏幕之间的时态关系,而不是应用的层次结构。
但是,也有这篇文章,它说
当系统"后退"按钮无法退出应用时(例如,当你正在执行自己的任务而不是在开始目标上时(,"向上"按钮的功能应与系统"后退"按钮相同。
那么......你应该相信哪一个呢?
我断言你应该相信第二个。第一个是几年前发布的;我不知道它的确切年龄,但你可以说它很旧,因为屏幕截图都使用 Holo 主题。另一方面,第二个是Android架构组件的一部分,因此相对较新。一般来说,我会选择最新的文档。
此外,我认为谷歌这些年来说向上按钮应该与后退按钮不同是错误的。作为一个花了很多时间在我的应用程序中思考导航的人,我知道他们来自哪里,但是当Up做一些"不同"的事情时,现实世界的用户总是感到困惑。
因此,当用户按下"向上"按钮时,我会继续finish()
您的活动,而不必担心您找到的那两篇文章。
我认为更改策略以建议向上图标和系统后退按钮之间的一致性是一个好主意。但是,您应该建议: "按时间倒序浏览屏幕历史记录" 太粗糙了,或者至少应该澄清他们所说的"屏幕"是什么意思。 例如。当您有一个底部导航栏时,后退按钮/向上图标应该在跳转到之前访问的部分之前备份选项卡部分中的层次结构。在重新访问选项卡部分(可以向下钻取到较低级别的屏幕(时,您应该保留以前的状态。