0

我将解释我的问题:

我有 4 个可以从仪表板页面访问的主菜单,例如:

  • 菜单 A
  • 菜单 B
  • 菜单 C
  • 菜单 D

每个菜单里面都有 sub menu ,所以菜单树看起来像(ALL Menu 是一个独立的 Activity):

  • 菜单 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 -> Menu B -> SubA-2 -> SubA-1 -> Menu A

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

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

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

更新 :

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

谢谢你。

4

5 回答 5

0

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

于 2017-07-07T05:38:48.183 回答
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中为仪表板活动设置简单的意图

@Override
public void onBackPressed() {
    super.onBackPressed();
    startActivity(new Intent(this, DashboardActivity.class));
}
于 2017-07-07T05:30:44.023 回答
0

try this it requires API level >= 11.

Intent i = new Intent(OldActivity.this, NewActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
于 2017-07-07T05:29:32.510 回答
0

发生这种情况的原因是因为 AndroidActivity有一个默认功能,当您意图而不指定意图类型时,默认情况下会将活动放在后台堆栈中。为了避免你只是startActivity像这样简单地清除除了第一个之外的backstack

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

但是我认为当你在做一个子菜单类型的应用程序时,最好使用片段而不是活动。

于 2017-07-07T05:34:44.670 回答
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();
于 2017-07-07T05:36:27.770 回答