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