我正在编写一个类似导航的应用程序:
启动应用 - > A(主页) - > B - > C - > d
(活动B,C,D都有相同的导航抽屉,它可以让用户在B,C,D之间切换页面。)
但是,当我按下活动B,C,D时出现问题。
有一个例子:
如果我按回B,然后回到家。
如果我按回C,然后回到B.
如果我按回D,然后回到C.
但这不是我想要的。
我想让流程如下(无论用户是否正在浏览B / C / D,当他们按下,然后返回家中)
即
A(主页) - > B - > (按回) - >甲
A(主页) - > B - > C - > (按回) - >甲
A(主页) - > B - > C - > D - > (按回) - >甲
A(主页) - > B - > C - > D - > B - > D - > (按回) - >甲
A(主页) - > B - > C - > B - > D - > (按回) - >甲
换句话说,我想让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;
}
});
}
答案 0 :(得分:0)
快速而快速的解决方案是在manifest.xml中的B,C,D活动上使用noHistory=true
。有了这些,他们都会回到活动A onBackPress()
。
查看文档https://developer.android.com/guide/topics/manifest/activity-element.html#nohist
答案 1 :(得分:0)
在每项活动中覆盖以下方法
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
答案 2 :(得分:0)
尝试这可能有帮助
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();
}