我有两组活动,假设每组3个活动,(A1,B1,C1 || A2,B2,C2)我从A1启动我的App,然后-> B1-> C1在这里我想从C1跳到-> A2在A2处,如果我按回去,它应该存在该应用程序,而不是退回给C1,然后从A2导航到-> B2-> C2。
因此,基本上我想更改启动的Activity,就像我在一个App中有两个App,而当我切换到第二个App时,我必须清除Activity Stack。那可能吗?有任何想法吗?
在我看来,您已经回答了自己的问题。你写了:
因此,基本上我想更改启动的Activity,就像我在一个App中有两个App,而当我切换到第二个App时,我必须清除Activity Stack。
我会这样:
创建一个DispatcherActivity启动应用程序时启动的活动。此活动是您任务的根源活动,并负责启动A1或A2,具体取决于…并且不finish()对其自身进行调用(即:它将被A1或A2覆盖,但仍位于活动堆栈的根目录中)。
DispatcherActivity
finish()
在中A1,捕获“后退”键,并告诉DispatcherActivity这样退出:
A1
@Override public void onBackPressed() { Intent intent = new Intent(this, DispatcherActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addExtra("exit", "true"); startActivity(intent); }
这将清除任务堆栈,直到根活动(DispatcherActivity),然后DispatcherActivity根据此意图重新开始。
在中C1,启动A2,执行以下操作:
C1
A2
Intent intent = new Intent(this, DispatcherActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addExtra("A2", "true"); startActivity(intent);
在中DispatcherActivity,onCreate()您需要根据意图中的额外内容来确定要做什么,如下所示:
onCreate()
Intent intent = getIntent(); if (intent.hasExtra("exit")) { // User wants to exit finish(); } else if (intent.hasExtra("A2")) { // User wants to launch A2 Intent a2Intent = new Intent(this, A2.class); startActivity(a2Intent); } else { // Default behaviour is to launch A1 Intent a1Intent = new Intent(this, A1.class); startActivity(a1Intent); }
在A2,陷阱“返回”键,并告诉DispatcherActivity使用相同覆盖的退出onBackPressed()作为A1。
onBackPressed()
注意:我只是输入此代码,所以我还没有编译它,所以它可能不是完美的。你的旅费可能会改变 ;-)