我会解释我的问题:
我有4个主菜单可以从仪表板页面访问,例如:
在每个菜单中都有子菜单,因此菜单树看起来像(所有菜单是一个独立的活动):
当我访问菜单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.
谢谢。
答案 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活动,因为它已从堆栈中杀死。