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

[操作系统]【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了,(大概是)正确的打开方式~

 




跟团去西藏旅游多少钱几月去西藏旅游最好去西藏的旅游团价格去西藏旅游必去景点去西藏旅游要多少钱2015嘉兴端午民俗文化节活动有哪些? 封开龙山五一有什么好玩活动?封开县岭南奇境五一门票优惠吗? 五一红色娘子军纪念园有什么活动?琼海娘子军五一门票优惠吗? 封开龙山门票包含什么?封开县岭南奇境有套票吗? 邂逅凤凰山 奢华温泉一日游 2015樟木头观音山万人相亲会在哪里举行?东莞观音山相亲大会时间? 空气清新 溱湖湿地公园的早晨 樟木头观音山相亲会活动介绍?东莞观音山相亲大会电话? 天降长假哪里去 江苏四大赏枫绝佳地盘点 落霞与白鹭齐飞 厦门九大最美日落观赏地 天降长假哪里去 旅游达人最爱海南八大旅行地推荐 湖北鲜为人知的风情古镇推荐 去泰国曼谷那里买衣服好看?泰国曼谷那里买衣服便宜? 马尔代夫旅游贵吗?梦幻岛怎样? 泰国旅游什么最有特色? 去马尔代夫旅行要准备什么? 0402YA910JAT2A Datasheet 0402YA910JAT2A Datasheet LD035C332KAB2A Datasheet LD035C332KAB2A Datasheet 06033A1R0BAT2A Datasheet 06033A1R0BAT2A Datasheet 长春跟团香港两日游价格 长春跟团香港两日游价格 长春跟团香港两日游价格 四平去港澳3日游 四平去港澳3日游 四平去港澳3日游 牡丹江去港澳5日游 牡丹江去港澳5日游 牡丹江去港澳5日游