微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以编程方式添加的导航抽屉项在选中时不会突出显示

如何解决以编程方式添加的导航抽屉项在选中时不会突出显示

我已经创建了一个导航抽屉。

菜单XML”位于 main_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<menu ...
    tools:showIn="navigation_view">
    <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>
</menu>

导航视图以XML添加- main_activity.xml

<androidx.drawerlayout.widget.DrawerLayout
    ... >

<FrameLayout ...> </FrameLayout>

    <com.google.android.material.navigation.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"
            app:headerLayout="@layout/nav_header_main"
            app:menu="@menu/main_drawer"/>
    
    </androidx.drawerlayout.widget.DrawerLayout>

除了您在XML中看到的Home和Plan这两个菜单项以外,很少使用以下代码以编程方式在导航菜单添加菜单

mNavigationView = findViewById(R.id.nav_view)
Menu navigationMenu = mNavigationView.getMenu();                
for(int inx = 0; inx < myMenuItems.size() ; inx ++) {
    navigationMenu
       .add(0,inx,myMenuItems.get(inx))
       .setIcon(R.drawable.ic_table_chart_black_24dp)
       .setonMenuItemClickListener(this);
}

在侦听器(这是主要活动)中,代码如下:

@Override
public boolean onMenuItemClick(MenuItem item) {
     
     // Fragment setting code here

     item.setChecked(true);
     mNavigationView.setCheckedItem(item.getItemId());
}

使用此代码菜单出现并显示如下(注意,当前主页已选中,并突出显示[重要])

enter image description here

现在,当我选择另一个菜单项(以编程方式添加一个,然后将其选中,但未突出显示

enter image description here

有任何线索吗?

解决方法

您必须指定MenuItem对象isCheckable。像这样:

MenuItem item = navigationMenu
       .add(0,inx,myMenuItems.get(inx))
item.isCheckable = true
...
,

如果我没记错的话,您有一组可检查的菜单项,并且想要向其中添加新项。因此,首先,您应该为该组分配一个唯一的ID,以便可以找到它以添加新项目。

<?xml version="1.0" encoding="utf-8"?>
<menu ...
    tools:showIn="navigation_view">

    <group android:id="@+id/group1"  // <--- assigning an id
        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>
</menu>

然后,当您要添加新菜单项时,将组ID传递给add方法,并启用其可检查性:

navigationMenu
    .add(R.id.group1,Menu.NONE,myMenuItems.get(inx))  // <--- pass the group's id
    .setIcon(R.drawable.ic_table_chart_black_24dp)
    .setCheckable(true)                               // <--- enable item's checkability
    .setOnMenuItemClickListener(this);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。