在安卓中恢复活动(Resume activity)

23

我有一个包含3个活动的应用程序。

我有一个主要活动。它调用第二个活动,然后再调用第三个活动。我想在不进入onCreate的情况下返回到主活动。

这是第三个活动的代码:

startActivity(new Intent(TerceraActiviry.this, Main.class));

使用 launchMode singleTop。 - njzk2
singleTop 只有在活动栈的顶部已经存在一个实例时才会重用同一个实例,而在这种情况下它不会被重用。 - kingraam
4个回答

65
如果你的Activity仍在运行,这段代码将使其前置而不会进入onCreate
Intent openMainActivity = new Intent(TerceraActiviry.this, Main.class);
openMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityIfNeeded(openMainActivity, 0);

2
谢谢。我花了很多小时搜索这个解决方案,而你只用了几分钟就解决了。 - Sárzena
2
我认为第一行多了一个 ")"。 - Sahdeep Singh

4

为了返回到之前的Activity,你需要结束当前正在显示的Activity,可以使用以下代码:

finish();

如果该活动是为了获取一个结果而启动的,那么应该像这样提供一个结果:
Intent intent = new Intent();
intent.putExtra(KEY_RESPONSE, responseData);
setResult(RESULT_OK, intent);
finish();

你应该在调用的Activity上使用以下代码来接收结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  switch (requestCode) {
    // Test for the code you have used to start the Activity
  }
}

希望这能有所帮助,祝好。

我发现如果你不打算返回当前活动,finish()是最好的选择。谢谢! - Srini

1

您需要的启动模式标志是 clearTop。这将返回到先前的主活动实例并清除第二个和第三个活动堆栈。例如,要从代码中执行此操作:

Intent intent = new Intent(TerceraActiviry.this, Main.class));
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

这将调用主活动的onCreate函数。 - Gabriel

1

你应该使用 startActivityForResult 而不是 startActivity。

更多信息请参考安卓开发文档 这里


我不同意 - 这仍然会创建一个新的活动实例。 - kingraam
如果您使用startActivityForResult启动第二个和第三个活动,则可以通过设置RESULT_OK并调用finish()方法(分别)返回到第一个活动。从而将控制权传递回已经存在的主活动。 - Gan
公正的观点 - 根据问题的背景,您似乎在建议他用 startActivityForResult 替换 startActivity,但这并没有帮助到他。 - kingraam
这就是为什么我提供了一个链接,因为这是一个非常基础的问题,链接中提供了更详细的答案。 - Gan

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