cnaka 发表于 2015-07-22 17:57

返回上层Activity的正确打开方式

首先,在网上看到有人这么写:@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. 3onOptionsItemSelected中启动父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了,(大概是)正确的打开方式~

renxiao2003 发表于 2015-08-12 10:33

如果返回是NULLt怎么处理。
页: [1]
查看完整版本: 返回上层Activity的正确打开方式