假设我有一个包含名为A,B,C,D的活动的应用程序。现在,考虑A已经作为根活动启动,并且B已经从A启动,并且C已经从B启动并且D已经从C启动。现在我在活动D中有一个名为“Remove”的按钮。如果假设,我在活动D中按下“删除”按钮,然后活动B和活动C应该从历史堆栈中移除。 On从活动中按回来键D应该显示活动A而不是C。我不知道如何实现这一点。任何人都可以帮我解决这个问题吗?如何清除堆栈历史中的特定活动?
回答
我不知道,你可以直接编程方式从历史记录中删除活动,但如果你使用startActivityForResult()
代替startActivity()
,然后根据您的活动返回的值,然后你可以立即finish()
前身活动模拟行为你要。通过在所有活动中使用此方法,您可以将此行为级联到活动堆栈以允许您从活动D转到活动A.
我知道这不是您的情况,但将来如果您以前知道你开始了你不希望前任留下的活动,你可以在startActivity()
之后立即致电finish()
。
请参见“新的屏幕的寿命”一节Common Tasks and How to do Them in Android
我@RivieraKid同意,但我认为的另一种方式: 当您按下“删除”您的自定义标志设置为true。
重写返回键事件:
public void onBackPressed() {
if (!remove){
super.onBackPressed();
}else{
Intent goToA = new Intent((this,ActivityA.class););
goToA.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(goToA);
}
}
你觉得这个你想要做什么?
祝你好运。
我认为这会做你想做的。在清单文件中,只需将“noHistory”属性添加到“B”和“C”活动中,在“D”中按下后退按钮时不需要重新访问该活动。
<activity android:name="com.acme.activityA"></activity>
<activity android:name="com.acme.activityB"
android:noHistory="true"></activity>
<activity android:name="com.acme.activityC"
android:noHistory="true"></activity>
<activity android:name="com.acme.activityD"></activity>
RivieraKid有最好的答案(和凉爽登录),但为了完整,我想提一提,你也可以设置FLAG_ACTIVITY_NO_HISTORY标志的意图,使新推出的活动,不出现在历史中。见http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NO_HISTORY
另一种方法是创建一个类来访问活动并关闭它们。 实施例:
活动:
- ACT1
- ACT2
- ACT3
Control类:
public class ActivitiesControl {
public static act1 vAct1 = null;
public static act2 vAct2 = null;
public static act3 vAct3 = null;
}
在每个活动的OnCreate设置: ActivitiesControl.vAct1 = this;
and onDestroy(): ActivitiesControl。vAct1 = null;
当你想毁了一些活动,从stackHistory删除您只要致电:
ActivitiesContro.vAct1.finish();
我不知道这是否是最好的方法,但是对我来说有效。
当您启动应用程序。所有活动默认在同一个任务中启动。所以后面的堆栈如下所示。
任务:A-> B-> C->在这种情况下后退堆栈的顶部是指向“d”
现在d 时,如果你想为“A”再次进入前点。 刚刚宣布参加活动的“A”的属性
android:launchMode="singleTask"
在AndroidManifest.xml中
现在,当您按下活动“d” 的“删除按钮”刚开始的活动像往常一样为你做。后退堆栈被清除 活动“B”和“C”的,你会得到从活动“A”
记住这将从内存 关闭和破坏你的活动d即使你不叫干净启动finish()
明确地在“D”中
- 1. 清除活动历史堆栈
- 2. 如何清除堆栈历史记录?
- 3. 清除History.js的历史堆栈
- 4. Android:清除堆栈中的第二个活动(或清除特定活动)
- 5. 使用eventBus清除特定活动的堆栈活动
- 6. 活动堆栈未清除
- 7. 清除活动堆栈android
- 8. 清除活动堆栈
- 9. Android活动历史堆栈问题
- 10. 从历史堆栈中删除的活动
- 11. 清除整个历史堆栈并在Android上启动新的活动
- 12. 如何查找堆栈历史记录中的总活动?
- 13. 从堆栈中清除活动
- 14. 在Android中清除活动堆栈
- 15. 如何获取活动历史堆栈的列表?
- 16. 活动堆栈自动清除?
- 17. 如何从堆栈中删除特定的活动?
- 18. jquery的历史,检查历史堆栈
- 19. Android:清除活动历史记录
- 20. 如何在活动下面清除活动堆栈
- 21. 如何清除android中的所有历史活动?
- 22. 清除活动堆栈并在android
- 23. 给Cleartop后活动堆栈未清除
- 24. 如何清除堆栈中的当前活动?
- 25. 如何清除Android中的活动堆栈?
- 26. 如何清除android中的活动堆栈?
- 27. 如何清除服务中的活动堆栈?
- 28. 如何清除Android中的所有现有活动堆栈
- 29. 如何清除堆栈中的所有活动?
- 30. 如何通过url启动我的活动后清除堆栈?
有关在startActivity()之后立即调用finish()以便当前活动不在堆栈中的注释非常有用。谢谢。 – dazed 2015-12-13 16:24:32