如何通过sidemenu移动到其他模块时完成所有活动

时间:2017-07-07 05:26:23

标签: 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里面。当我按下后退按钮时,我将移动这样的序列: SubB-1 - >菜单B - > SubA-2 - > SubA-1 - >菜单A

如何避免菜单按下后按钮时仍然调用的活动(但不建议阻止后退按钮)?我用它但不能很好地工作:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

如果您需要有关案例的更多信息,可以在下面的评论中添加。

  

更新:

     

如果用户来自MenuB,则不允许用户返回menuA。但他们仍然   如果它们来自subA-1(菜单A的子菜单),则返回菜单A.

谢谢。

5 个答案:

答案 0 :(得分:0)

试试这个要求API等级> = 11。

Intent i = new Intent(OldActivity.this, NewActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);

答案 1 :(得分:0)

当你要去 A - > SubA-1 你必须像这样设置标志

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

因此它不会在您的堆栈中添加您的活动。

当你要去 SubA-2 - > B 您必须设置标记FLAG_ACTIVITY_NO_HISTORY

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

在您的B活动onbackpress中设置简单的Dashboard活动意图

@Override
public void onBackPressed() {
    super.onBackPressed();
    startActivity(new Intent(this, DashboardActivity.class));
}

答案 2 :(得分:0)

之所以发生这种情况,是因为Android Activity有一个默认函数,当你有意并且没有指定意图类型时,它会默认将活动放在backstack中。为了避免这种情况,你只需简单地清除backstack,除了startActivity上的第一个这样的

Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

但我认为在进行子菜单类型应用时,最好使用片段而不是活动。

答案 3 :(得分:0)

试试这个:

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();

答案 4 :(得分:0)

您可以完成您不希望用户返回的菜单活动。例如,在您的菜单A活动中,在您调用startActivity之后,请调用finish()。当用户点击后退按钮时,他们将无法进入菜单A活动,因为它已从堆栈中杀死。