java - 更新导航抽屉中当前突出显示的片段
问题描述
当我从导航抽屉中打开一个新片段时,它会正确突出显示它,但是当我按下后退按钮时,它不会更新突出显示的元素,所以我正在考虑使用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);
}
}
}
我知道这很可怕,但这是我唯一能想到的
解决方案
正如文档所说, 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();
}
}
推荐阅读
- vba - CDec:带小数的参数字符串的国际语法
- javascript - 如何使用 puppeteer 从选择列表中单击元素
- google-apps-script - 如何使用工作表中的邮件?
- r - 相关矩阵表
- apache-spark - PySpark:ModuleNotFoundError:没有名为“app”的模块
- swift - 初始成功验证后可能使用错误凭据访问服务器
- python - 如何在使用 python cx_Freeze 的程序卸载列表中显示图标?
- php - 如何提取数组的键并将它们推送到字符串数组?
- php - 我无法使用 selenium 登录星巴克
- java - 为在 yarn 模式下运行的每个 spark 作业配置 log4j