通过ActionBar返回最后一个片段

时间:2013-12-02 17:17:53

标签: android android-fragments android-actionbar android-tabs

我的ActionBar中有3个选项卡,分别用于3个不同的片段:Fragment1,Fragment2和Fragment 3. Fragment2中有一个ListView,当单击列表视图中的一行时,它将启动一个新活动。我在AndroidManifest.xml中添加了以下内容:

   <activity
        android:name=".DetailsActivity"
        android:label="@string/app_name"
        android:parentActivityName=".MainActivity" >

        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>

但是当我单击ActionBar中的后退按钮时,这将返回Fragment1而不是Fragment2,因为Fragment1是我的MainActivity中的第一个片段。任何人都可以建议我如何返回Fragment2而不是Fragment1?感谢

1 个答案:

答案 0 :(得分:0)

在MainActivity中,我假设您正在使用以下内容初始化onCreate中的标签:

ActionBar actionBar = getActionBar(); //or getSupportActionBar() for app.compat.v7
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.addTab(actionBar.newTab().setText(getString(R.string.tab1));
actionBar.addTab(actionBar.newTab().setText(getString(R.string.tab2));

以及您需要设置的任何其他内容。通过传递您当前正在构建的DetailsActivity和请求代码,使用startActivityForResult()启动Intent。类似的东西:

protected void startDetailsActivity() {
    Intent intent = new Intent(this, DetailsActivity.class);
    startActivityForResult(intent, 100);
}

然后当MainActivity重新弹出时,覆盖onActivityResult,如果requestCode是您用来启动的DetailsActivity,请将当前标签位置设置为1:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == 100) {
        getActionBar().setSelectedNavigationItem(1);
        // or for compat: getSupportActionBar().setSelectedNavigationItem(1);
    }
    super.onActivityResult(requestCode, resultCode, data);
}