Android 如何通过侧菜单移动到其他模块时完成所有活动
我会解释我的问题: 我有4个主菜单可以从仪表板页面访问,例如:Android 如何通过侧菜单移动到其他模块时完成所有活动,android,android-activity,side-menu,Android,Android Activity,Side Menu,我会解释我的问题: 我有4个主菜单可以从仪表板页面访问,例如: 菜单A 菜单B 菜单C 菜单D 每个菜单中都有子菜单,因此菜单树看起来像(所有菜单都是独立的活动): 菜单A->SubA-1->SubA-2 菜单B->SubB-1->SubB-2 菜单C->SubC-1->SubC-2 菜单D->SubD-1->SubD-2 当我进入菜单A时,依次进入SubA-1和SubA-2。现在我在SubA-2里面。 我从SubA-2转到菜单B 从菜单B进入SubB-1。现在我在SubB-1里面。当我
- 菜单A
- 菜单B
- 菜单C
- 菜单D
- 菜单A->SubA-1->SubA-2
- 菜单B->SubB-1->SubB-2
- 菜单C->SubC-1->SubC-2
- 菜单D->SubD-1->SubD-2
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
如果你需要更多关于这个案例的信息,你可以在下面的评论中加入
更新:
如果用户来自MenuB,则不允许他们返回menuA。但他们仍然
A如果来自subA-1(菜单A的子菜单),则返回菜单A
谢谢。试试这个,它要求API级别>=11。
Intent i = new Intent(OldActivity.this, NewActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
当您要A->SubA-1时,必须像这样设置标志
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
因此,它不会将您的活动添加到堆栈中
当您要SubA-2->B时,您必须设置flag
flag\u ACTIVITY\u NO\u HISTORY
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
在B活动中,按Backpress键将simple intent设置为Dashboard活动
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(this, DashboardActivity.class));
}
之所以会发生这种情况,是因为安卓
活动
有一个默认功能,其中当您意图而不指定意图类型时,默认情况下会将活动放在后台。为了避免这种情况,您只需像这样清除startActivity
上的第一个backbackback
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
但我认为,当您使用子菜单类型的应用程序时,最好使用片段而不是活动。尝试以下方法:
Intent i=new Intent(getApplicationContext(), MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
finishAffinity();
return;
}
finish();
您可以完成不希望用户返回的菜单活动。例如,在您的菜单中,在调用startActivity之后,立即调用finish()。当用户点击“上一步”按钮时,他们将无法进入“活动”菜单,因为它已从堆栈中删除。您是否尝试过覆盖我已经尝试过Backpress()并开始工作(我使用intent调用新的仪表板活动)。这样好吗?我知道新的活动成本很昂贵。我错了吗?@Patrick是的,没关系,这样做并在返回仪表板时清除backbackback,我建议在子菜单中使用fragment,仪表板将是唯一的活动。查看我的答案仪表板页面如何?它也会关门吗?因为我希望我的仪表板仍处于活动状态。仪表板页面如何?它也会关门吗?因为我希望我的仪表板仍然处于活动状态。不,只要你不从其他活动中打开它,它就不会影响你的仪表板。如果我从SUbA-1按“后退”按钮,怎么样?我会转到菜单A吗?不会,它会转到仪表板活动,因为我们从堆栈中清除了菜单A。不是这样的。如果用户返回菜单A,如果用户返回SubA-1,我没有问题。如果它们从菜单B移动到菜单A或A的子菜单,则不允许这样做。