【问题标题】:Return to last fragment through ActionBar通过ActionBar返回最后一个fragment
【发布时间】:2013-12-09 13:41:40
【问题描述】:

我的 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?谢谢

【问题讨论】:

  • 您要返回MainActivity 并突出显示Fragment2?如果是这样,您的问题和问题标题还不够清楚......
  • 是的,这就是我想做的。有什么想法吗?

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


【解决方案1】:

在 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));

以及您需要设置的任何其他内容。通过传递您当前正在构建的Intent 和请求代码,以startActivityForResult() 开始DetailsActivity。比如:

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);
}

【讨论】:

  • 感谢您的回复。但我的情况有点不同。例如,我的 MainActivity 中有 3 个片段(Fragment1、Fragment2 和 Fragment3)。 Fragment2 中有一个列表视图。当我单击 Fragment2 中的列表项时,将显示 DetailActivity。 DetailActivity 中会有一个后退按钮。当我点击返回时。它将返回 Fragment1 而不是 Fragment2,因为 Fragment1 是 MainActivty 中的第一个 Fragment。如果我使用你的方法,我只会在 Fragment2 中获得 onActivityResult 回调。你有什么建议?谢谢。
  • onActivityResult 应该放在MainActivity 而不是片段中
  • 让我试一试。谢谢
  • @bagusflyer:运气好吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多