Back vs. Up - 预期行为

her*_*lon 3 navigation android back

导航设计指南解释了:

当先前查看的屏幕也是当前屏幕的分层父级时,按“返回”按钮与按“向上”按钮的结果相同——这是常见的情况。 向上与向后 - 导航指南

我有一个 MainActivity A,它在触摸 NavigationDrawer 中的导航条目时打开另一个活动 B。在 AndroidManifest 中,Activity A 被设置为 Activity B 的父级:android:parentActivityName=".MainActivity"

我按照这个android 文档添加了到活动 B 的导航。它展示了如何onOptionsItemSelected在活动 B 中实现:

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)
Run Code Online (Sandbox Code Playgroud)

}

当我从活动 B 回按时,活动 A 的状态被保存并打开了 NavigationDrawer。但是,如果我使用向上导航,onCreate()则会调用活动 A 并且它失去了状态(抽屉已关闭等)。

这不是引用的“相同结果”。

当我NavUtils.navigateUpFromSameTask(this)用一个简单的替换finish()它时,它具有与按下相同的行为 - 保持活动 A 的状态。

当然,我更喜欢使用完成的方式。那么预期的行为是什么?指南是否相互矛盾或遗漏了什么?

Ben*_* P. 5

一个不幸的现实是,谷歌将文档搁置的时间超过了相关性,甚至会发布两个直接相互矛盾的不同文档。

在向上按钮的情况下,您的链接显示

向上按钮出现在应用栏中,用于根据屏幕之间的层次关系在应用内导航。[...]

后退按钮出现在系统导航栏中,用于按时间倒序浏览用户最近使用过的屏幕历史记录。它通常基于屏幕之间的时间关系,而不是应用程序的层次结构。

然而,也有这篇文章,它说

当系统后退按钮不会退出您的应用程序时,例如当您执行自己的任务而不是在开始目的地时,向上按钮的功能应与系统后退按钮相同。

那么……你应该相信哪一个?

我断言你应该相信第二个。第一个是几年前发布的;我不知道它的确切年龄,但你可以说它很旧,因为截图都使用了 Holo 主题。另一方面,第二个是 Android 架构组件的一部分,因此要更新得多。一般来说,我会使用最新的文档。

此外,我认为谷歌多年来说向上按钮应该与后退按钮不同的说法是错误的。作为在我的应用程序中花了很多时间思考导航的人,我知道它们来自哪里,但是当 Up 做了一些“不同”的事情时,现实世界的用户总是感到困惑。

因此,finish()当用户按下“向上”按钮时,我会继续执行您的活动,而不必担心您找到的那两篇文章。