ActionBar 支持 Navigation Up的功能,Navigation UP 是指返回 逻辑上的上一页。它和Back键的返回的含义是不一样的。Back键是根据用户浏览页面的顺序进行返回的,返回的是上一个浏览的页面的。而Navigation Up 所说的逻辑上的上一页,是根据软件的页面层次来决定的,是逻辑上的上一页。比如页面1显示 列表,页面2 显示 列表项的详情,页面3 显示的是列表项详情里的某一项的具体详情。我们可以利用Navigation UP 让页面3 返回页面1,因为页面3 返回 页面 1 ,这在页面的逻辑功能上是需要的。为什么这么说呢,如果我们的页面的层次太多,用户要返回第一页,只能通过Back键从第N 页逐页返回。从应用的逻辑功能的角度来讲,我们需要 让页面从第N页直接返回第一页,这样可以提高应用的用户体验。实际应用中,Navigation UP 返回的页面有可能是上一个浏览的页面,也有可能不是,我们需要根据软件的逻辑功能来进行设计。
ActionBar 的Navigation UP 功能 是通过让 Activity 指定 ParentActivity 来实现的,主要有以下几个关键的地方
1. 在Activity 中添加设置
getActionBar().setDisplayHomeAsUpEnabled(true);
2.在配置文件中设置 activity 的ParentActivity,例如
<activity android:name="name.lushuai.android.application.study.ui.actionbar.NavigationUpActivity"
android:label="@string/title_activity_navigation_up" android:parentActivityName="name.lushuai.android.application.study.ui.actionbar.StandardActionBarActivity" >
</activity>
ActionBar 的Navigation Up 的具体UI 效果 如下
一般情况下,就是一个返回箭头+ICON,当然可以通过设置ActionBar 来控制ICON 和 标题。
当点击 返回箭头部分,activity 通过getParentActivityIntent()miSDK>=11)这个方法获取返回的Intent,然后 startActivity(intent)返回 parent Activity.
正如上面所说,如果页面的逻辑上的parent Activity 不止一个,那么就必须通过重写 Activity 的 getParentActivityIntent() 或者 onCreateSupportNavigateUpTaskStack()来实现。
本质上讲,ActionBar 的 Navigation UP 的功能是通过 改变 Activity 所在栈的Activity 的顺序以及Activity 所在 Task 来实现的。这些与Activity 的启动模式以及 Activity Task ,Intent 的 Flag 属性相关。