在活动之间切换并删除之前(仅一个)打算历史堆栈

时间:2017-01-18 12:25:06

标签: android

我正在编写一个类似导航的应用程序:

启动应用 - > A(主页) - > B - > C - > d

(活动B,C,D都有相同的导航抽屉,它可以让用户在B,C,D之间切换页面。)

但是,当我按下活动B,C,D时出现问题。

有一个例子:

enter image description here

如果我按回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;
        }
    });
}

3 个答案:

答案 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();
}