自定义任务栈:BACK和UP键的区别

问题:应用程序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动作是返回到当前界面的父界面,也就是应用程序的界面栈。


用图来说明之间的区别:

back/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界面
程序A代码

                                                                                               上面是A界面效果和代码


程序B的清单文件 

清单文件说明:

         定义这种导航的第一步就是确定每个Activtity之间的父子关系。在Android4.1中,引入了android:parentActivityName属性来创建这种关系。要想在以前的版本中也使用这种功能,需要使用支持库定义的<meta-data>值来为每个Activtity定义父界面。在示例中采用了两种方式为每个Activity定义了父子关系,既可以运行本地的api上,也可以运行在支持库上。

         在DetailsActivity中还有一个自定义的<intent-filter>,它允许外部的应用程序来启动DetailsActivity。


程序B的a界面
程序B的b界面
程序B的c界面

Demo地址:  http://pan.baidu.com/s/1gfefm4j

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,455评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,537评论 0 17
  • 爱好 心情缺一不可! 娜:物换星移,也许只有照片可以记录某一刻某些事。当你十年之后再看到它时,也许就会勾起你一丝丝...
    慕苜芯阅读 253评论 2 2
  • 藤,被种在一棵高而瘦的树的旁边 树下杂草丛生,它就生长在那里 光阴荏苒 渐渐地,藤周围的杂草开始枯萎 让人知道它还...
    没有叶子的树阅读 930评论 8 5