我正在制作一个具有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. 完成所有打开的活动并从BroadcastReceiver启动新的活动
- 3. 完成Basic4Android中的所有活动
- 4. Android - 完成中间活动
- 5. 活动组中的完成活动
- 6. 自动完成和生活?
- 7. 活动重新启动完成()
- 8. 开始活动,不完成活动
- 9. Android:从其他活动完成活动
- 10. 从其他活动完成活动
- 11. 从非活动完成活动
- 12. 如何完成所有AsynTask完成时的活动
- 13. Android完成之前的导航活动
- 14. Android活动完成更新以前的活动
- 15. 完成所有任务的活动的所有实例?
- 16. 什么活动会成为MainActivity?
- 17. 完成交易后完成所有活动
- 18. 在活动之间保持locationListener活动
- 19. 如何在“活动B”之后完成“活动A”? (完成一个活动,因为其他)
- 20. 如何完成从儿童活动退出时的所有活动
- 21. 如何在从AppWidgetProvider启动新活动之前关闭所有活动android
- 22. onBackPressed()完成我的活动
- 23. 完成的活动记录
- 24. 在活动之间滑动
- 25. 如何完成除主要活动以外的所有活动并致电其他活动
- 26. 在活动之间保持活动的线程和视图
- 27. 隐藏没有完成的活动()
- 28. 完成老活动,并开始一个新的,反之亦然
- 29. 完成不工作 - 活动
- 30. 无法完成活动
如果活动A未被称为MainActivity会怎么样?另外对于你来说,第二种解决方案如果我不想关闭中介活动,直到我开始活动D – Hooman
你不应该只是亲手挑选你想销毁的几个活动。总之,尝试创建'活动'对象然后调用完成()方法从另一个activity.Like这[link](http://stackoverflow.com/questions/10379134/finish-an-activity-from-another-activity) –