提供向上的导航
所有不是从主屏幕(“home”屏幕)进入app的,都应该给用户提供一种方法,通过点击action bar中的Up按钮。可以回到app的结构层次中逻辑父屏幕。本课程向你说明如何正确地实现这一操作。
Figure 1. action bar中的Up按钮.
从Android 4.1 (API level 16)开始,你可以通过指定元素中的android:parentActivityName属性来声明每一个activity的逻辑父activity。
如果你的app需要支持Android 4.0以下版本,在你的app中包含并添加<meta-data>
元素到中。然后指定父activity的值为android.support.PARENT_ACTIVITY
,并匹配android:parentActivityName的值。
例如:
在父activity这样声明后,你可以使用 API进行向上导航操作,就像下一面这节。
要使用action bar的app图标来完成向上导航,需要调用setDisplayHomeAsUpEnabled():
要在用户点击app图标时向上导航,你可以使用类中的静态方法navigateUpFromSameTask()。当你调用这一方法时,系统会结束当前的activity并启动(或恢复)相应的父activity。如果目标activity在任务的后退栈中(back stack),则目标activity会像定义的那样,提到栈顶。提到栈顶的方式取决于父activity是否处理了对onNewIntent()的调用。
例如:
但是,只能是当你的app拥有当前任务(current task)(用户从你的app中发起这一任务)时才有用。如果你的activity是从别的app的任务中启动的话,向上导航操作就应该创建一个属于你的app的新任务,并需要你创建一个新的后退栈。
如果你的activity提供了任何允许被别的app启动的intent filters,那么你应该实现回调,在用户从别的app任务进入你的activity后,点击Up按钮,在向上导航之前你的app用相应的后退栈开启一个新的任务。
在这么做之前,你可以先调用shouldUpRecreateTask()来检查当前的activity实例是否在另一个不同的app任务中。如果返回true,就使用创建一个新任务。或者,你可以向上面那样使用navigateUpFromSameTask()方法。