android 添加到打开方式,【Android开发笔记】返回到上一个Activity的正确打开方式...

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

1 @Override2 public booleanonOptionsItemSelected(MenuItem item) {3 switch(item.getItemId()) {4 caseandroid.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

2 android:label="@string/app_name" >

3

4 android:value=".ParentActivity" />

5

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

1 @Override2 public voidonCreate(Bundle savedInstanceState) {3 super.onCreate(savedInstanceState);4

5 //启用向上导航按钮

6 if (NavUtils.getParentActivityName(getActivity()) != null) {7 getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);8 }9 }

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

Step. 3onOptionsItemSelected中启动父Activity

1 @Override2 public booleanonOptionsItemSelected(MenuItem item) {3 switch(item.getItemId()) {4 caseandroid.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了,(大概是)正确的打开方式~

原文:http://www.cnblogs.com/persona5/p/4662875.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值