如何从特定活动选择要打开的片段?

3

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

在设置适配器之前,使用一个意图来检查按钮是否已被按下,它可以是一个布尔值。如果已经按下,则转到选项卡#1。如果您计划为其他活动添加更多按钮,则可以在意图中使用一个数字,每次从打开每个活动的片段分配它。请确保在设置适配器之前检查按钮是否已被按下。 - Antonios Tsimourtos
2个回答

3

您的第一个活动应该仍然在活动堆栈中,因此不应再次调用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
@N.Park 是的,没错。我编辑了我的回答让它更加清晰明了。 - Andrew Sun

0

我认为你正在使用视图翻页器,所以当你从第二个活动返回时,请使用viewPager.setCurrentItem(page);

其中page将是您的选项卡编号(在这种情况下它将是2,因为它从0开始)。希望这可以帮助您,如果不能,请再澄清一下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接