Android 在活动之间切换并删除上一个(仅一个)历史堆栈
我正在编写一个具有如下导航功能的应用程序: 启动应用程序->A(主页)->B->C->D (活动B、C、D都有相同的导航抽屉,可以让用户在B、C、D之间切换页面。) 但是,当我在活动B、C、D中按back时出现问题Android 在活动之间切换并删除上一个(仅一个)历史堆栈,android,Android,我正在编写一个具有如下导航功能的应用程序: 启动应用程序->A(主页)->B->C->D (活动B、C、D都有相同的导航抽屉,可以让用户在B、C、D之间切换页面。) 但是,当我在活动B、C、D中按back时出现问题 有一个例子: 如果我在B中按back,则返回主页 如果我在C中按back,那么返回到B 如果我按回D,然后再按回C 但这不是我想要的 我想让流程如下(无论用户是浏览B/C/D,当他们按back时,然后返回主页) i、 e A(主页)->B->(按后退)->A A(主页)->B-
有一个例子: 如果我在B中按back,则返回主页 如果我在C中按back,那么返回到B 如果我按回D,然后再按回C 但这不是我想要的
我想让流程如下(无论用户是浏览B/C/D,当他们按back时,然后返回主页) i、 e A(主页)->B->(按后退)->A A(主页)->B->C->(按后退)->A A(主页)->B->C->D->(按后退)->A A(主页)->B->C->D->B->D->(按后退)->A A(主页)->B->C->B->D->(按后退)->A 换句话说,我想使B、C、D在导航层次结构中处于同一级别
这是我在B、C、D之间切换活动的代码 B,C,D都有这段代码 以下代码在活动B中:
private void switchActivity(){
NavigationView mNavigationView = (NavigationView) findViewById(R.id.navigationView);
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
Intent intent = new Intent();
if(menuItem.getTitle().toString().equals("B")) {
intent = getIntent();
finish();
}
if(menuItem.getTitle().toString().equals("C")) {
intent.setClass(getApplicationContext(), CActivity.class);
}
if(menuItem.getTitle().toString().equals("D")) {
intent.setClass(getApplicationContext(), DActivity.class);
}
startActivity(intent);
return true;
}
});
}
快速解决方案是在manifest.xml中的B、C、D活动上使用
noHistory=true
。这样,他们都将返回活动AonBackPress()
参见文档快速解决方案是在manifest.xml中的B、C、D活动上使用
noHistory=true
。这样,他们都将返回活动AonBackPress()
请参阅文档在每个活动中覆盖以下方法
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
在每个活动中重写以下方法
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
试试这个可能会有帮助
private void switchActivity(){
NavigationView mNavigationView = (NavigationView) findViewById(R.id.navigationView);
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
if(menuItem.getTitle().toString().equals("B")) {
startActivity(new Intent(getApplicationContext(),BActivity.class));
finish();}
if(menuItem.getTitle().toString().equals("C")) {
startActivity(new Intent(getApplicationContext(), CActivity.class));
finish();}
if(menuItem.getTitle().toString().equals("D")) {
startActivity(new Intent(getApplicationContext(), DActivity.class));
finish();}
return true;
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(getApplicationContext(),AActivity.class))
finish();
}
试试这个可能会有帮助
private void switchActivity(){
NavigationView mNavigationView = (NavigationView) findViewById(R.id.navigationView);
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
if(menuItem.getTitle().toString().equals("B")) {
startActivity(new Intent(getApplicationContext(),BActivity.class));
finish();}
if(menuItem.getTitle().toString().equals("C")) {
startActivity(new Intent(getApplicationContext(), CActivity.class));
finish();}
if(menuItem.getTitle().toString().equals("D")) {
startActivity(new Intent(getApplicationContext(), DActivity.class));
finish();}
return true;
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(getApplicationContext(),AActivity.class))
finish();
}
这正是我想要的,但是当我通过onBackPressed()方法返回主页时,我必须清除前面的标志。所以我添加了:intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK | intent.FLAG_ACTIVITY_CLEAR_TASK);它完全符合我的预期。谢谢,所以我想要的是muchIt,但是当我通过onBackPressed()方法返回主页时,我必须清除前面的标志。所以我添加了:intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK | intent.FLAG_ACTIVITY_CLEAR_TASK);它完全符合我的预期。谢谢你,我已经试过了。但它会出现另一个问题,即:在B、C、D中有ListView。当用户单击列表项并按back时,它将返回主页,而不是返回ListView页面(B、C、D)。对不起,问题中没有解释清楚。我已经试过了。但它会出现另一个问题,即:在B、C、D中有ListView。当用户单击列表项并按back时,它将返回主页,而不是返回ListView页面(B、C、D)。对不起,我没有在问题中解释清楚。