Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在活动之间切换并删除上一个(仅一个)历史堆栈_Android - Fatal编程技术网

Android 在活动之间切换并删除上一个(仅一个)历史堆栈

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-

我正在编写一个具有如下导航功能的应用程序:

启动应用程序->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->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
。这样,他们都将返回活动A
onBackPress()


参见文档

快速解决方案是在manifest.xml中的B、C、D活动上使用
noHistory=true
。这样,他们都将返回活动A
onBackPress()


请参阅文档

在每个活动中覆盖以下方法

@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)。对不起,我没有在问题中解释清楚。