【问题标题】:How to choose which fragment to open from specific activity?如何从特定活动中选择打开哪个片段?
【发布时间】:2016-08-24 13:01:06
【问题描述】:

我的 mainActivity 包含 5 个片段,您可以使用选项卡进行切换。开始时显示的主选项卡是第三个(中间的那个)。我在片段 #1 中有一个按钮,可以打开 activityTwo。我应该在 activityTwo 中的 onBackPressed 方法中添加什么,以便它通过选定的选项卡 #1 将我带回 mainActivity。我目前有这个,但它会打开 mainActivity 并显示主选项卡(#3)

@Override
public void onBackPressed() {
    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    startActivity(intent);
    ActivityTwo.this.finish();
}

如何让它显示标签 #1 而不是标签 #3?

【问题讨论】:

  • 使用一个意图,它可能是一个布尔值检查按钮是否被按下,在你将适配器设置为#3之前检查它是否被按下..如果是然后转到选项卡# 1 |如果您打算为其他活动设置更多按钮,则可以在您的意图中使用一个数字,每次从您打开每个活动的片段中分配它

标签: android android-fragments


【解决方案1】:

您的第一个活动应该仍在活动堆栈上,因此您不应再次调用startActivity。相反,您可以使用 setResult 将值传递回您的第一个活动:

// Inside your second activity
@Override
public void onBackPressed() {
    setResult(RESULT_OK);
    finish();
}

然后,从您的第一个活动开始,将 startActivity 替换为 startActivityForResult,并使用请求代码(您想要的任何整数,只要它是唯一的):

startActivityForResult(intent, YOUR_REQUEST_CODE);

然后覆盖onActivityResult:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     if (requestCode == YOUR_REQUEST_CODE) {
         if (resultCode == RESULT_OK) {
            // Code to select tab 1 here
            // mTabLayout.getTabAt(0).select();
         }
     }
 }

【讨论】:

  • 所以我需要在onBackPressed中将结果设置为OK,以便在返回mainActivity时可以设置。而且我应该使用带有意图和请求代码的 startActivityForResult 而不是 startActivity?
  • @N.Park 是的,没错。我编辑了我的答案以使其更清楚。
【解决方案2】:

我认为您正在使用 view pager ,因此当您从活动 2 返回时,请使用 viewPager.setCurrentItem(page);

page 将是您的标签号,(在这种情况下它将是 2,因为它以 0 开头)。希望这会有所帮助,如果没有,请进一步澄清。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多