2

我有 4 个活动,让它成为 A->B->C->D。在每个 A、B、C 活动中,用户需要输入数据,如果用户数据正确,所有数据都将发送到 C 活动中的服务器,他将移动到 D 活动和从堆栈中删除的所有活动 A、B、C。如果数据正确,我需要让用户重新输入数据,即在背面按下它必须移动 C->B->A。我的问题是当用户进入 D 活动时如何删除 A、B、C 活动。

4

6 回答 6

5

使用 FLAG_ACTIVITY_CLEAR_TOP 这将解决您的问题

http://developer.android.com/reference/android/content/Intent.html

如果设置,并且正在启动的活动已经在当前任务中运行,那么不会启动该活动的新实例,而是关闭它上面的所有其他活动,并且此 Intent 将被传递到(现在顶部)作为新意图的旧活动。

例如,考虑一个由以下活动组成的任务:A、B、C、D。如果 D 调用 startActivity() 并带有一个解析为活动 B 的组件的 Intent,那么 C 和 D 将完成并且 B 接收给定的 Intent ,导致堆栈现在是:A,B。

像使用它一样

Intent intent = new Intent(getApplicationContext(),
        yourActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);

另外,看看这个问题:

带有标志 FLAG_ACTIVITY_CLEAR_TOP 的活动 (android)

编辑:我以为您想从 D 移至您的家庭活动并希望从堆栈中删除所有活动

你的堆栈就像 homeactivity , A , B , C , D 所以我给了你这个解决方案,因为这将删除你的家庭活动之上的堆栈中的所有活动。但是你想在去 D 的时候清理堆栈,你可以使用

FLAG_ACTIVITY_TASK_ON_HOME

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_TASK_ON_HOME

或 FLAG_ACTIVITY_CLEAR_TASK

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TASK

但这些都适用于 api 级别 11

于 2012-10-08T07:27:39.777 回答
2

正确答案对我来说也很有趣,但我可以提供一个解决方案:例如,您从 O 开始活动 A:O->A->B->C->D。在活动 O 上,您可以放入 android manifestandroid:launchMode="singleTop" 然后,当数据正常时,您可以使用标志“FLAG_ACTIVITY_CLEAR_TOP”启动活动 O - 它从堆栈 A、B、C 中删除,并将被称为方法onNewIntent (Intent intent) http://developer.android.com /reference/android/app/Activity.html#onNewIntent(android.content.Intent ) 在O,你可以在这里启动activity D。

于 2012-10-08T07:33:04.390 回答
0

当您想将 D 活动移到那里时,您需要检查您的条件,如果您的条件满足,那么您需要进入您的下一个活动(即 D)。在这种情况下,您需要使用以下代码。

Intent intent = new Intent(this,D.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

假设在后台你需要使用finish()。向后移动,即 C -> B -> A。

于 2012-10-08T07:29:01.590 回答
0

您可以使用 startActivityForResult 启动活动,并从例如活动 D 调用 setResult,在 C 活动中您可以侦听活动结果,以及与此结果相关的是否完成活动,或者从 C 活动调用 setResalt ...

于 2012-10-08T07:22:21.403 回答
0

尝试这段代码并进行一些修改:

Intent intent = new Intent(this, D.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // To clean up all activities
startActivity(intent);
于 2012-10-08T07:32:38.007 回答
-1

尝试在此处查找 Activity 的公共方法 startActivity(Intent i) 和 finish()

在使用方面,它应该看起来像这样。

Intent i = new Intent(MainActivity.this, MainActivity.class);
startActivity(i);
finish();

希望这会有所帮助:D

于 2012-10-08T07:34:31.860 回答