技术支持 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了,(大概是)正确的打开方式~

【Android开发笔记】返回上层Activity的正确打开方式的更多相关文章

  1. iOS开发小技巧--相机相册的正确打开方式

    iOS相机相册的正确打开方式- UIImagePickerController 通过指定sourceType来实现打开相册还是相机 UIImagePickerControllerSourceTypeP ...

  2. 《ArcGIS Runtime SDK for Android开发笔记》——(12)、自定义方式加载Bundle格式缓存数据

    随着ArcGIS 10.3的正式发布,Esri推出了新的紧凑型缓存格式以增强用户的访问体验.新的缓存格式下,Esri将缓存的索引信息.bundlx包含在了缓存的切片文件.bundle中.具体如下图所示 ...

  3. 云开发 VSCode 插件 Cloudbase Toolkit 的正确打开方式

    什么是 Cloudbase Toolkit Tencent CloudBase Toolkit 是云开发的 VS Code(Visual Studio Code)插件.该插件可以让您更好地在本地进行云 ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》

    开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>——(1).And ...

  5. [置顶] Android开发笔记(成长轨迹)

    分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...

  6. Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计

    Volley是由Google开源的.用于Android平台上的网络通信库.Volley通过优化Android的网络请求流程,形成了以Request-RequestQueue-Response为主线的网 ...

  7. Android开发笔记--hello world 和目录结构

    原文:Android开发笔记--hello world 和目录结构 每接触一个新东西 都有一个hello world的例子. 1.新建项目 2.配置AVD AVD 没有要新建个,如果不能创建 运行SD ...

  8. Android开发之漫漫长途 Ⅱ——Activity的显示之Window和View(2)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  9. Android开发之漫漫长途 Ⅱ——Activity的显示之Window和View(1)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

随机推荐

  1. p2279&bzoj1217 消防局的设立

    传送门(洛谷) 传送门(bzoj) 题目 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来 连接这些基地,并且每两个基地都能够通过道路到达, ...

  2. Umbraco遇到的问题解决

    在本地VS2015运行公司的Corporate website时,有几个页面出现错误如下: 但事实是那个,这几个View都是存在的.弄了半天也没有能够解决.后来看到这个blog: https://ou ...

  3. ubuntu-12.04.5安装cacti笔记

    坑啊,磨磨蹭蹭按了一个星期.按了3个版本. 第一次:cacti-0.8.7e.tar.gz 安装完之后,Host: Localhost->Memory Usage...四张图始终出不了.点击进去 ...

  4. 33、生鲜电商平台-定时器,定时任务quartz的设计与架构

    说明:任何业务有时候需要系统在某个定点的时刻执行某些任务,比如:凌晨2点统计昨天的报表,早上6点抽取用户下单的佣金. 对于Java开源生鲜电商平台而言,有定时推送客户备货,定时计算卖家今日的收益,定时 ...

  5. Dijkstra 路径规划 C#

    示例无向图如下:(起始点为v0) 邻接矩阵为: 注意:其中没有连接的边和自己到自己的点权值用10000表示. 代码: static void Main(string[] args) { , , , , ...

  6. Docker:容器与主机时间不同步问题解决

    在Docker容器运行后,可能会发现容器时间与宿主机时间不一致,一般会差8个小时.这样会造成在容器中运行的web程序打出的日志时间与实际时间不一致,如果web程序中有定时任务也会造成影响等,需要对宿主 ...

  7. 上传文件到linux乱码问题

    由于linux系统编码一般设置为utf-8,而中文windows下通常默认编码是gbk,因此经常需要将文件名或文件内容编码进行转换,文件名编码转换软件:convmv yum install convm ...

  8. POJ1013 Counterfeit Dollar

    题目来源:http://poj.org/problem?id=1013 题目大意:有12枚硬币,其中有一枚假币.所有钱币的外表都一样,所有真币的重量都一样,假币的重量与真币不同,但我们不知道假币的重量 ...

  9. Composite模式(组合设计模式)

    Composite 设计模式? 在计算机的文件系统中,有"文件夹"的概念(在有些操作系统(Linux操作系统)中,也称为"目录").文件夹里面既可以放入文件,也 ...

  10. 分层图 (可以选择K条路的权为0,求最短路)

    分层图可以处理从图中选取k条边使其边权变为0,求最短路 Description 在你的强力援助下,PCY 成功完成了之前的所有任务,他觉得,现在正是出去浪的大好时光.于是,他来到高速公路上,找到一辆摩 ...