You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态添加的Navigation Drawer Item选中后无法高亮问题求助

解决Navigation Drawer动态添加菜单项无法高亮的问题

嘿,这个问题我之前也踩过坑!核心原因很简单:你动态添加的菜单项没有加入到XML里那个设置了android:checkableBehavior="single"的分组中——只有属于这个分组的菜单项,才能继承“单选+选中高亮”的行为。

具体解决步骤:

  1. 给XML中的单选分组添加ID(推荐)
    先修改main_drawer.xml,给那个设置了单选行为的group加个明确的ID,方便后续代码直接获取:

    <group android:id="@+id/nav_checkable_group" android:checkableBehavior="single">
        <item android:id="@+id/nav_home" android:icon="@drawable/ic_table_chart_black_24dp" android:title="@string/menu_topic_home" />
        <item android:id="@+id/nav_plan" android:icon="@drawable/ic_table_chart_black_24dp" android:title="@string/menu_plan" />
    </group>
    
  2. 在代码中获取这个单选分组
    拿到NavigationView的菜单后,直接通过ID找到这个分组:

    mNavigationView = findViewById(R.id.nav_view);
    Menu navigationMenu = mNavigationView.getMenu();
    MenuGroup checkableGroup = navigationMenu.findGroup(R.id.nav_checkable_group);
    

    如果不想修改XML,也可以通过已有的菜单项间接获取分组:

    MenuGroup checkableGroup = navigationMenu.findItem(R.id.nav_home).getGroup();
    
  3. 将动态菜单项加入该分组
    修改你动态添加菜单项的代码,把add()方法的第一个参数(分组ID)换成刚才获取的分组ID,而不是原来的0。另外建议用View.generateViewId()生成唯一的item ID,避免和现有菜单项ID冲突:

    for(int inx = 0; inx < myMenuItems.size() ; inx ++) {
        int uniqueItemId = View.generateViewId();
        navigationMenu.add(checkableGroup.getId(), uniqueItemId, Menu.NONE, myMenuItems.get(inx))
            .setIcon(R.drawable.ic_table_chart_black_24dp)
            .setOnMenuItemClickListener(this);
    }
    
  4. 优化选中逻辑(可选)
    因为分组已经设置了single的checkableBehavior,选中一个项时会自动取消其他项的选中状态,所以你的onMenuItemClick可以简化,还别忘了关闭抽屉:

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        // 这里写你的Fragment切换逻辑
        
        mNavigationView.setCheckedItem(item.getItemId());
        // 关闭侧边抽屉
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
    

这样修改后,动态添加的菜单项就能和XML里的Home、Plan一样,选中时正常高亮啦!

内容的提问来源于stack exchange,提问作者SimpleGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 09:57:37