回到前两个活动?

30
我有这个活动序列: Avtivity01 => Avtivity02 => Avtivity03 在点击一个按钮后,您可以从Avtivity01转到Avtivity02
在点击一个按钮后,您可以从Avtivity02转到Avtivity03
-
我想在点击一个按钮后直接从Activity03转到Activity01
-
注意:
我不想使用Intent,因为我希望Activity01就像我从Activity02按返回按钮一样。
请问如何实现?

4
在从Activity2转换到Activity3时,通过调用finish方法从Activity堆栈中移除Activity2。 - sat
在Activity2的哪个方法中调用finish()方法? - Rasel
1
如果将其删除,我将无法在“Activity03”上按返回按钮时访问它。 - iTurki
@Rasel,在调用Activity3的方法中,使用startActivity(Activity3); finish(); - sat
@iturki -- 哎呀!好的,我误解了你的意思,你想要从Activity3返回到Activity1!当点击一个按钮时,你将需要使用Intents。 - sat
6个回答

52

为什么不能使用 Intent?当您单击按钮时,可以使用 FLAG_ACTIVITY_CLEAR_TOP编辑:如果要保留 Activity 的原始实例,可以将此标志与 FLAG_ACTIVITY_SINGLE_TOP 结合使用。

您是否希望能够从 Activity03 按钮返回到 Activity02?如果您总是希望返回到 Activity01,则可以在清单中的 Activity02 上使用 android:noHistory="true",然后在 Activity03 上调用 finish()


我想保留Activity02,这样当我在Activity02中按返回按钮时,我可以回到它。此外,我想直接从Activity03访问Activity01。我不能使用Intent,因为它会像新的一样启动Activity01。我希望它能够像之前打开过一样启动(即好像我从activity02点击了返回按钮)。现在应该清楚了。 - iTurki
是的,你可以像我说的那样使用“Intent”。这就是它的用法。该标志可以结束所有在你启动的活动之上的活动。 - Glendon Trullinger
它没有!它从头开始启动Activity01。 - iTurki
我已经阅读了链接并使用了双重标志,结果是相同的。 - iTurki
这是正确的答案。当然不要忘记在清单文件中添加此代码 android:launchMode="singleTop" - SadeQ digitALLife
显示剩余2条评论

7

您可以使用意图(intent)并使用标志(flags)来防止返回同一屏幕,从而返回到您需要的一个或多个屏幕之前。

Intent gotoScreenVar = new Intent(goFromScreenCls.this, goToScreenCls.class);

gotoScreenVar.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(gotoScreenVar);

6
我是同样遇到了这个问题,
简短的答案是在意图中添加这行代码。
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

简短回答如下:

我有MainActivitySecondActivityThirdActivity三个活动,我想做的是从MainActivity打开SecondActivity,然后从SecondActivity打开ThirdActivity,并且我想在ThirdActivity中单击一个按钮,关闭SecondActivityThirdActivity,而不会调用新的MainActivity,我希望它能够像返回到它一样运行,而不是创建一个新的活动。而且最重要的是,在ThirdActivity中要保持返回按钮的正常功能,以便我可以在需要更改SecondActivity中的某些选择时返回SecondActivity。因此,在启动ThirdActivity后,我不能在SecondActivity中调用finish();或使用android:noHistory="true"等其他解决方案,因为这些解决方案会杀死SecondActivity,我无法通过返回按钮返回它。

所以,这个标志对我解决了问题:FLAG_ACTIVITY_REORDER_TO_FRONT

FLAG_ACTIVITY_REORDER_TO_FRONT

如果在传递给Context.startActivity()的Intent中设置了该标志,如果已经在运行,则将启动的活动带到其任务历史记录堆栈的前面。

请参考此处

所以,当我在ThirdActivity中单击按钮时,我尝试使用以下代码返回到MainActivity。希望这可以帮助您。

Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

2

这篇文章 很好。它将帮助你解决问题。顺便说一下,你可以使用FLAG_ACTIVITY_REORDER_TO_FRONT来解决问题。


-2

您可以覆盖Activity3上的返回按钮单击

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        startActivity(Activity3.this,Activity1.class);
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

仔细阅读问题。在Activity03中,我想保留返回按钮的行为。我只想在上面放一个按钮,点击它可以执行两次返回操作。 - iTurki
你不能只是通过那个按钮调用Activity1吗? - Rasel
它将作为一个新的活动开始。我希望它能够“像我从Activity02点击了返回按钮”一样开始。 - iTurki

-2

只需一行代码即可实现。
在调用第三个活动后,调用finish()函数即可。

例如:
在您的Activity02中

Intent thirdActivity = new Intent(this,Activity03.class);
startActivity(thirdActivity);
finish();

我需要保留Activity02。请阅读问题下面的评论。 - iTurki

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