Android 如何通过侧菜单移动到其他模块时完成所有活动

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里面。当我

我会解释我的问题:

我有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里面。当我按下后退按钮时,我将按如下方式移动序列: SubB-1->菜单B->SubA-2->SubA-1->菜单A

如何避免在按下后退按钮时仍调用菜单活动(但不建议阻止后退按钮)?我使用此功能,但效果不理想:

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的子菜单,则不允许这样做。