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