我正在制作一个具有MainActivity(A)的应用程序,该应用程序是导航活动。该活动可以启动活动(B),并从那里我可以导航到活动(C)。然后,当我导航到活动(D)时,我想完成除MainActivity(A)之外的所有活动。所以基本上,如果我从活动回来(A),我会去同一个活动实例(A)。所以基本上A> B> C,然后当(D)启动时,堆栈是A> D。完成MainActivity和新活动之间的所有活动
0
A
回答
0
使用setFlags
方法给这个意图FLAG_ACTIVITY_CLEAR_TOP
。
这将检查你的筹码,看是否MainActivity
的实例已经存在,而且如果这样做,会带来该活动的前部和清除所有它上面的活动,而不是重新启动MainActivity
,并把它放在顶部叠加。
另一种方式是手工在每一个activity.Like调用完成():
Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
0
两个选项:
1)使用MainActivity
为 “调度员”。当C要推出d,它应该做这样的:
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("launchD", true);
startActivity(intent);
此代码将清除的MainActivity
顶部的所有活动,并导致onNewIntent()
要在MainActivity
调用。
在MainActivity
,覆盖onNewIntent()
:堆栈清零后
@Override
protected void onNewIntent(Intent intent) {
if (intent.hasExtra("launchD")) {
// Need to launch Activity D
Intent launchIntent = new Intent(this, D.class);
startActivity(launchIntent);
}
}
MainActivity
现在推出d。按D中的BACK将返回到MainActivity
。
2)选自C启动d照例:
Intent intent = new Intent(this, D.class);
startActivity(intent);
此时,堆栈A-> B-> C-> d
在d,重写onBackPressed()
:
@Override
public void onBackPressed() {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
在这种情况下,在D中按下BACK将导致D,C和B从堆栈中删除,用户将返回到MainActivity
。
注意:使用标志FLAG_ACTIVITY_CLEAR_TOP
和FLAG_ACTIVITY_SINGLE_TOP
的组合确保了MainActivity
现有实例将被重用。 Android不会创建新的实例。
相关问题
- 1. 完成所有活动
- 2. 启动和活动完成后活动
- 3. 完成所有打开的活动并从BroadcastReceiver启动新的活动
- 4. 完成Basic4Android中的所有活动
- 5. Android - 完成中间活动
- 6. 所有活动的活动
- 7. 活动mainactivity没有回应
- 8. 活动组中的完成活动
- 9. 完成其他活动的活动
- 10. 完成某些活动之上的所有活动,但仅当某个活动在堆栈上时
- 11. 是否有FLAG_ACTIVITY _ ****将前一个活动放在前面并完成堆栈之间的所有其他活动?
- 12. 自动完成和生活?
- 13. Activity.finish()没有完成活动
- 14. 活动重新启动完成()
- 15. 从其他活动完成活动
- 16. 从非活动完成活动
- 17. Android:从其他活动完成活动
- 18. 开始活动,不完成活动
- 19. 从其他活动完成活动
- 20. 如何完成所有AsynTask完成时的活动
- 21. Android活动完成
- 22. 活动未完成
- 23. 活动未完成
- 24. Android完成之前的导航活动
- 25. Android:启动之前活动的新实例,然后完成
- 26. Android活动完成更新以前的活动
- 27. 完成所有任务的活动的所有实例?
- 28. 滑动之间的活动
- 29. 活动和另一个活动之间的动画过渡
- 30. 完成交易后完成所有活动
如果活动A未被称为MainActivity会怎么样?另外对于你来说,第二种解决方案如果我不想关闭中介活动,直到我开始活动D – Hooman
你不应该只是亲手挑选你想销毁的几个活动。总之,尝试创建'活动'对象然后调用完成()方法从另一个activity.Like这[link](http://stackoverflow.com/questions/10379134/finish-an-activity-from-another-activity) –