返回与向上-预期行为

时间:2018-08-23 18:49:55

标签: android navigation back

导航设计指南说明:

  

当先前查看的屏幕也是当前屏幕的层次结构父级时,按“后退”按钮与按“上移”按钮具有相同的结果-这是常见的情况。   up vs back - navigation guide

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

我遵循了此android documentaion,以添加到活动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的状态已保存,并且NavigationDrawer打开。但是,如果我使用向上导航,则活动A的onCreate()被调用,并且它失去了状态(抽屉关闭等)。

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

当我用简单的NavUtils.navigateUpFromSameTask(this)代替finish()时,它的行为与按回去的行为相同-保持活动A的状态。

自然,我更喜欢使用finish的方式。那么预期的行为是什么?向导是否相互矛盾或缺少某些东西?

2 个答案:

答案 0 :(得分:3)

不幸的是,Google将文档保留的时间超过了相关的时间,甚至会发布两个彼此直接矛盾的文档。

对于“向上”按钮,您的链接显示

  

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

     

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

但是,还有this article,它表示

  

当系统的“后退”按钮无法退出您的应用程序时(例如,您在执行自己的任务而不是在启动目标位置时),“向上”按钮的功能应与系统的“后退”按钮相同。

那么...您应该信任哪一个?

我断言您应该信任第二个。第一个发布于多年前;我不知道它的确切年龄,但是您可以说它很旧,因为屏幕截图都使用Holo主题。另一方面,第二个是Android体系结构组件的一部分,因此也是相当新的。通常,我会使用最新的文档。

此外,我认为Google多年来一直说“错误”是说“向上”按钮与“返回”按钮的工作方式有所不同。作为花很多时间思考我的应用程序导航的人,我看到了它们的来源,但是当Up做一些“不同”的事情时,现实世界的用户总是会感到困惑。

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

答案 1 :(得分:0)

我认为建议向上图标和系统后退按钮之间保持一致的政策变化是一个好主意。但是建议您应该: “按时间倒序浏览屏幕历史” 是不是太粗糙了,至少应该澄清一下他们所说的“屏幕”是什么意思。 例如。当您有底部导航栏时,后退按钮/向上图标应该会带您回到标签部分中的层次结构,然后再跳转到之前访问过的部分。并且在重新访问选项卡部分(可能会深入到较低级别的屏幕)时,您应该保留之前的状态。