你的位置:首页 > 操作系统

[操作系统]【Android开发笔记】返回到上一个Activity的正确打开方式


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

 

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

 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 <activity android:name=".ChildActivity"2      android:label="@string/app_name" >3    <meta-data android:name="android.support.PARENT_ACTIVITY"4          android:value=".ParentActivity" />5 </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

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

 




去云南旅游要多少钱去云南旅游最佳路线去云南旅游最佳时间云南旅游线路报价云南旅游攻略大全黄腾峡山水乐园好玩吗?清远黄腾峡山水乐园怎么样? 霞客古渡景区电话?上林霞客古渡团购优惠多少? 清远黄腾峡山水乐园几点开门?黄腾峡山水乐园开门时间? 上林霞客古渡葵园门票多少钱?霞客古渡葵花什么时候开? 惠州三月赏花的好地方?广东惠州赏花攻略? 去东瀛风情的樱花之都邂逅浪漫樱花 永记生态园薰衣草开了吗?惠州永记生态园薰衣草几月份最好看? 永记生态园有薰衣草吗?惠州永记生态园薰衣草什么时间开? 带数字的重庆镇街乡地名 万圣节一起开启津城寻鬼之旅——X街区-综合娱乐体验馆 第九届深圳(大梅沙)国际风筝节是什么时候?有什么好玩的? 福建名菜有什么? 巴厘岛好玩吗? 泰国曼谷机场有ATM机吗?泰国银行营业到几点? 马尔代夫伊露岛好玩吗? 巴厘岛在哪里?它是哪个国家的? AQ147A120FAJME Datasheet AQ147A120FAJME Datasheet 12061C392KAT2A Datasheet 12061C392KAT2A Datasheet 0402YA8R2DAT2A Datasheet 0402YA8R2DAT2A Datasheet 四平跟团香港两日游价格 四平跟团香港两日游价格 四平跟团香港两日游价格 内蒙古香港两日游 内蒙古香港两日游 内蒙古香港两日游 四平跟团港澳五日游 四平跟团港澳五日游 四平跟团港澳五日游