Android NavigationView实现多菜单项同时选中的方法
嗨,我看你是想实现NavigationView里多个菜单项同时选中的效果,但现在每次选新的项,之前的选中状态就没了对吧?问题其实出在两个地方:布局里的checkableBehavior配置,还有Java代码里的选中逻辑处理。
我给你一步步说怎么改:
1. 调整XML布局的可选中行为
你原来的group标签用了android:checkableBehavior="single",这个属性是设置组内只能单选的!要改成all,这样同一个组里的菜单项就允许同时被选中了。
修改后的菜单XML代码如下:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/nav_group1" android:checkableBehavior="all"> <item android:id="@+id/nav_item1" android:checkable="true" android:title="Item 1" /> <item android:id="@+id/nav_item2" android:checkable="true" android:title="Item 2" /> <item android:id="@+id/nav_item3" android:checkable="true" android:title="Item 3" /> </group> <group android:id="@+id/nav_group2" android:checkableBehavior="all"> <item android:id="@+id/nav_item4" android:checkable="true" android:title="Item 4" /> <item android:id="@+id/nav_item5" android:checkable="true" android:title="Item 5" /> <item android:id="@+id/nav_item6" android:checkable="true" android:title="Item 6" /> </group> </menu>
2. 修改Java代码的选中逻辑
你之前直接调用menuItem.setChecked(true),会触发NavigationView默认的单选逻辑,自动取消其他项的选中状态。我们需要改成切换当前项的选中状态,并且返回false,告诉系统不要插手选中状态的管理,由我们自己控制:
mNavigationView = (NavigationView) findViewById(R.id.navigation_view); mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { // 点击时切换当前项的选中状态 menuItem.setChecked(!menuItem.isChecked()); // 返回false,避免系统自动重置选中状态 return false; } });
这样改完之后,你就能像想要的那样,同时选中多个菜单项了——点击项的时候会切换它的选中状态,之前选中的项不会被取消。如果需要跨group也支持多选,这个设置同样生效,因为每个group都配置了checkableBehavior="all"。
内容的提问来源于stack exchange,提问作者Henste93
相关产品推荐
相关产品推荐

