更新导航抽屉中当前突出显示的片段

时间:2018-08-10 22:47:49

标签: java android

当我从导航抽屉中打开一个新片段时,它正确地突出显示了它,但是当我按下“后退”按钮时,它并没有更新突出显示的元素,因此我考虑使用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);
        }
    }
}

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

1 个答案:

答案 0 :(得分:0)

正如documentation所说,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();
    }
  }