首页 > 解决方案 > 更新导航抽屉中当前突出显示的片段

问题描述

当我从导航抽屉中打开一个新片段时,它会正确突出显示它,但是当我按下后退按钮时,它不会更新突出显示的元素,所以我正在考虑使用navigationView.setCheckedItem();,但这需要一个 int,我不知道该放什么因为我不知道我是否可以以某种方式使用后堆栈。

目前 onBackPressed 只有

    public void onBackPressed() {
    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    }else{
        super.onBackPressed();
    }
}

我究竟做错了什么?

编辑:我通过在每个片段中做我能想象的最糟糕的事情之一来解决:

@Override
public void onResume() {
    super.onResume();
    auIsInFront = true;
}

@Override
public void onPause() {
    super.onPause();
    auIsInFront = false;
}

然后在MainActivity

@Override
public void onBackPressed() {
    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    }else{
        super.onBackPressed();
        NavigationView navigationView = findViewById(R.id.nav_view);
        if (isInFront){
            navigationView.setCheckedItem(R.id.nav_home);
        }else if (standardIsInFront){
            navigationView.setCheckedItem(R.id.nav_standard);
        }else if (auIsInFront){
            navigationView.setCheckedItem(R.id.nav_au);
        }
    }
}

我知道这很可怕,但这是我唯一能想到的

标签: javaandroid

解决方案


正如文档所说, setCheckedItem 将视图 ID 作为参数。你应该像这样使用它:

navigationView.setCheckedItem(R.id.yourMenuItem);

现在您想创建一些变量来保留最后一个活动/菜单项,然后更改 highlith。例子:

int lastMenuID;
public void onBackPressed() {
  DrawerLayout drawer = findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
      drawer.closeDrawer(GravityCompat.START);
    }else{
      int thisID = /*[this menu item]*/;
      navigationView.setCheckedItem(lastMenuID);
      lastMenuID = thisID;
      super.onBackPressed();
    }
  }

推荐阅读