技术支持 http://stackoverflow.com/questions/12276027/how-can-i-return-to-a-parent-activity-correctly

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

 @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.getActivity().finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}

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

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

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

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

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

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

 <activity android:name=".ChildActivity"
android:label="@string/app_name" >
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value=".ParentActivity" />
</activity>

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

  @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 点击返回按钮,退回上一层Activity
if (NavUtils.getParentActivityName(getActivity()) != null) {
// 启动父Activity
NavUtils.navigateUpFromSameTask(getActivity());
}
return true; default:
return super.onOptionsItemSelected(item);
}
}

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

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

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

Step. 4  设置launchMode

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

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

android:launchMode="singleTop"

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

最新文章

  1. Python 2/3 安装与运行环境设置
  2. Linux安全基础:vi的使用
  3. hibernateTools插件安装
  4. C#与时间有关的一些方法
  5. RecycleView在eclipse的初体验
  6. Windows7下QT5开发环境搭建 分类: QT开发 2015-03-09 23:44 65人阅读 评论(0) 收藏
  7. Arduino &quot;Card failed, or not present&quot;(即找不到SD卡)错误解决方案
  8. POJ 2912 Rochambeau
  9. idhttp post 上传或下载时显示进度条
  10. PHP - 抓取电视剧资源
  11. 深入理解计算机系统之旅(四)处理器(CPU)的体系结构
  12. Quartz入门案例与介绍(与spring整合)
  13. HTTP响应状态码含义参考
  14. addTarget:self 的意思是说,这个方法在本类中
  15. 富文本编辑器UEditor自定义工具栏(三、自定义工具栏功能按钮图标及工具栏样式简单修改)
  16. java面向对象总结(一)
  17. idea 引入web、配制tomcat
  18. 在gitlab新建空项目,将本地的git仓库的内容上传
  19. 再次回归 Spark-- 转
  20. kubernetes有状态集群服务部署与管理

热门文章

  1. Luogu 4556 雨天的尾巴
  2. Struts简单入门实例
  3. Improved RGB-D-T based Face Recognition 论文笔记
  4. windows配置换行符
  5. 消息队列--RabbitMQ(一)
  6. PHP开源系统学习之fluxbb_1
  7. 数学建模美赛O奖论文总结
  8. JAVA对象创建的过程
  9. limit 检索记录行
  10. Java实例练习——java实现自动生成长度为10以内的随机字符串(可用于生成随机密码)