如何解决以编程方式添加的导航抽屉项在选中时不会突出显示
我已经创建了一个导航抽屉。
“菜单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());
}
使用此代码,菜单出现并显示如下(注意,当前主页已选中,并突出显示[重要])
现在,当我选择另一个菜单项(以编程方式添加的一个,然后将其选中,但未突出显示)
有任何线索吗?
解决方法
您必须指定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 举报,一经查实,本站将立刻删除。