博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android开发笔记】返回上层Activity的正确打开方式
阅读量:5749 次
发布时间:2019-06-18

本文共 1940 字,大约阅读时间需要 6 分钟。

技术支持 

 

首先,在网上看到有人这么写:

1 @Override 2     public boolean onOptionsItemSelected(MenuItem item) { 3         switch (item.getItemId()) { 4             case android.R.id.home: 5                 this.getActivity().finish(); 6                 return true; 7             default: 8                 return super.onOptionsItemSelected(item); 9         }10     }

这样直接Finish()的写法貌似可行?

NONONO,这种写法只适用于你足够确定在关闭子Activity前,父Activity会一直存活着。

而在更复杂的状况下(比如子Activity是从推送中启动的),然并卵。

 

所以接下来,我来给大家示范一下正确打开上一层Activity的正确姿势(摩拳擦掌

 

Step. 1  首先在Manifest中关联父子关系

  使用"android.support.PARENT_ACTIVITY"这货来关联:

1 
3
5

 

Step. 2  在子Activity中启用向上导航按钮

@Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);          // 这句必须写,不写不调用onOptionsItemSelected         setHasOptionsMenu(true);         // 启用向上导航按钮         if (NavUtils.getParentActivityName(getActivity()) != null) {             getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);         }     }

 

  

这里的if用来判断子Activity是否含有父Activity,要是没做第一步,就要跪了

 

Step. 3  onOptionsItemSelected中启动父Activity

1  @Override 2     public boolean onOptionsItemSelected(MenuItem item) { 3         switch (item.getItemId()) { 4             case android.R.id.home: 5                 // 点击返回按钮,退回上一层Activity 6                 if (NavUtils.getParentActivityName(getActivity()) != null) { 7                     // 启动父Activity 8                     NavUtils.navigateUpFromSameTask(getActivity()); 9                 }10                 return true;11             12             default:13                 return super.onOptionsItemSelected(item);14         }15     }

 

到这一步,我们就可以愉快的启动父Activity~

但你会发现,怎么父Activity启动的并不是之前存在的实例,而是新实例化一个?

这并不符合我们的需求啊,所以说关键是接下来一步。

 

Step. 4  设置launchMode

因为安卓的默认启动Activity方式是new一个,即使存在一个实例,但还是要new,new,new

所以我们需要做出修改,在Manifest的父Avtivity属性中添加一条:

android:launchMode="singleTop"

这样就万事OK了,(大概是)正确的打开方式~

 

转载于:https://www.cnblogs.com/persona5/p/4662875.html

你可能感兴趣的文章
一张图道尽程序员的出路
查看>>
redis 常用命令
查看>>
LVS+Keepalived高可用负载均衡集群架构
查看>>
烂泥:kvm安装windows系统蓝屏
查看>>
iPhone开发面试题--葵花宝典
查看>>
EdbMails Convert EDB to PST
查看>>
POJ 2184
查看>>
存储过程简单实例
查看>>
大话 程序猿 眼里的 接口
查看>>
struts2用了哪几种模式
查看>>
replace函数结合正则表达式实现转化成驼峰与转化成连接字符串的方法
查看>>
ubuntu 初学常用命令
查看>>
WCF客户端与服务端通信简单入门教程
查看>>
判断是否含有中文
查看>>
MyEclipse Web开发教程:XML & XML架构(一)
查看>>
linux文件权限与属性的更改
查看>>
Jquery绑定事件
查看>>
android 资源种类及使用
查看>>
Explorer程序出错
查看>>
java之抽象工厂
查看>>