Android:删除backstack中的活动

时间:2012-10-08 07:17:12

标签: android

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

6 个答案:

答案 0 :(得分:5)

使用FLAG_ACTIVITY_CLEAR_TOP这将解决您的问题

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

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

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

一样使用它
Intent intent = new Intent(getApplicationContext(),
        yourActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);

并且,看看这个问题:

Activity with Flag FLAG_ACTIVITY_CLEAR_TOP (android)

编辑:我以为你想从D搬到你的家庭活动,想要从堆栈中删除所有活动

你的堆栈就像家庭活动,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级

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

假设在背压上你需要使用finish()。向后移动,即C. - > B - >甲

答案 4 :(得分:0)

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

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

答案 5 :(得分:-1)

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

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

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

希望这会有所帮助:D