问题:应用程序A当允许外部的应用程序B,直接启动它的某些Activity时,就要适当的处理BACK和UP的导航行为。此时BACK和UP键就有区别了。
解决方案:
Android支持库中的NavUtils和TaskStackBuilder类可以很容易地在程序中构建和生成合适的导航栈。这两个类的功能是在Android4.1及以后得版本原生的功能,如何要在稍早的版本上使用,可以使用提供的兼容库API,这样实际上也是调用原生的方法。
BACK和UP:
Android导航有两种方式:一类是用户按下back建,另一类是在ActionBar(ToolBar)上按下home图标,也就是up动作。对于我们开发人员来说,经常会混淆他们,或者说不会去区分。
从概念上讲:1)back键是让用户回到上一个浏览的界面(相对于当前界面),如果上一个界面属于另外一个程序,那么就会回到另外的程序 。2)up动作是返回到当前界面的父界面,也就是应用程序的界面栈。
用图来说明之间的区别:
步骤:1.点击A程序界面的三个Button中的任何一个,跳转到B程序的界面c,显示相应的text
2.此时,点击Back键会回到A程序,点击Up键跳到界面c的父界面b
3.在界面b,点击Back和Up键都会返回到b的父界面a
说明:B程序有三个界面,a界面是b界面的父界面,b界面是c界面的父界面(a-->b-->c)
实现机制:
上面是A界面效果和代码
清单文件说明:
定义这种导航的第一步就是确定每个Activtity之间的父子关系。在Android4.1中,引入了android:parentActivityName属性来创建这种关系。要想在以前的版本中也使用这种功能,需要使用支持库定义的<meta-data>值来为每个Activtity定义父界面。在示例中采用了两种方式为每个Activity定义了父子关系,既可以运行本地的api上,也可以运行在支持库上。
在DetailsActivity中还有一个自定义的<intent-filter>,它允许外部的应用程序来启动DetailsActivity。
Demo地址: http://pan.baidu.com/s/1gfefm4j