Android:在backstack中删除活动

Android:在backstack中删除活动,android,Android,我有4个活动,让它是A->B->C->D。在每个A,B,C活动中,用户需要输入数据。所有数据都将发送到C活动中的服务器。如果用户数据正确,他将转到D活动和所有活动A,B,C从堆栈中删除。如果数据正确,我需要给用户重新输入数据,即返回,按它必须移动C->B->A。我的问题是当用户输入D活动时如何删除A、B、C活动。您可以使用startActivityForResult启动活动,并从例如活动D调用setResult,在C活动中,您可以侦听活动结果,以及与此结果相关的是否完成活动,或者从C活动调用se

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

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

使用标志\u活动\u清除\u顶部这将解决您的问题

如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是关闭其上的所有其他活动,并且此意图将作为新意图传递给(现在位于顶部的)旧活动

例如,考虑一个由活动组成的任务:A、B、C、D。如果D调用StaseActivity(),其意图分解为活动B的组件,则C和D将完成,B接收给定的意图,导致堆栈现在是:A,B</P> 像这样使用它

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

startActivity(intent);
还有,看看这个问题:

编辑:我以为您希望从D移到主活动,并希望从堆栈中删除所有活动

您的堆栈将类似于homeactivity,A、B、C、D 所以我给了你们这个解决方案,因为这将删除你们家庭活动顶部堆栈中的所有活动。 但是你想在去D的时候夹住这堆东西 你可以用

在主页上标记活动任务

或标记\u活动\u清除\u任务


但是,对于api级别11,这两种方法都适用。当您想要将D活动移动到该级别时,需要检查 条件,如果您的条件满足,则您需要进入 进入下一个活动(即D)。在这种情况下,您需要使用 以下代码

Intent intent = new Intent(this,D.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
假设在反压时需要使用finish()。向后移动,即C
->B->A.

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

Intent intent = new Intent(this, D.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // To clean up all activities
startActivity(intent);

正确的答案对我来说也很有趣,但我可以提供一个解决方案: 例如,您从O:O->A->B->C->D开始活动A。 在“活动O”中,您可以放入android清单
android:launchMode=“singleTop”

然后,当数据正常时,您可以使用标志“flag\u activity\u CLEAR\u TOP”启动活动O,它将从堆栈A、B、C中移除,并将在O中调用方法
onNewIntent(Intent Intent)
),您可以在其中启动活动D。

尝试查找活动的公共方法startActivity(Intent i)和finish()

在使用方面,它应该是这样的

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

希望这有帮助:D

当D活动位于堆栈顶部且A、B、C位于堆栈底部时,我如何使用FLAG_ACTIVITY_CLEAR_TOP?我认为你的想法会奏效,但我不想向后移动,即使用O活动来清除后堆栈。有没有更好的主意?另一个想法:使用
startActivityForResult()
在每个活动A、B、C和
onResult中
call finish()好的,C将被删除,但是当用户在D活动中按下后退按钮时,如果您从C调用setResult,它将通过B->Ano,在B onActivityResult中调用setResult and finish(),在调用finish()中。当用户进入D活动时(即,如果条件满足)我不希望A、B、C活动出现在stackintent.addFlags(Intent.FLAG\u activity\u CLEAR\u TASK);此行将清除所有堆栈。因为我尝试过,它看起来像是FLAG\u activity\u CLEAR\u TASK,这在Android 2.2 SDK中不存在。当用此标志重置任务时,您可以尝试FLAG\u activity\u CLEAR\u。这并没有回答问题。