Android:多个选中的菜单项出现问题
这是我的应用程序的beahviour(当然,只有Android:多个选中的菜单项出现问题,android,Android,这是我的应用程序的beahviour(当然,只有1是正确的): 当然,我现在只想检查一项 我将项目分为两组(要添加分隔符,请参见我的上一个问题:) 这是nav_menu.xml: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="
1
是正确的):
当然,我现在只想检查一项
我将项目分为两组(要添加分隔符,请参见我的上一个问题:)
这是nav_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single"
android:id="@+id/group1" >
<item
android:id="@+id/home"
android:checked="false"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/list_home" />
<item
android:id="@+id/list_event"
android:checked="false"
android:icon="@drawable/ic_list_black_24dp"
android:title="@string/list_event" />
</group>
<group
android:checkableBehavior="single"
android:id="@+id/group2" >
<item
android:id="@+id/settings"
android:checked="false"
android:icon="@drawable/ic_settings_black_24dp"
android:title="@string/settings" />
</group>
</menu>
非常感谢您必须实现一个自定义适配器、自定义/模型、自定义功能,以便在单击时取消选中其他项
我建议你使用。它是一个材料导航抽屉实现,它已经实现了所有这些逻辑。如果你不想使用lib,你应该检查它是如何在这个库代码上完成的,并适应你的需要。这可能会帮助你:尝试从xml中删除标记android:checkableBehavior=“single”,并分别为每个项设置android:checkable=“true”,然后在“活动”和onNavigationItemSelected事件中声明MenuItem对象。如果以前声明的MenuItem对象不为null,则将其选中值设置为false,然后将收到的当前选定MenuItem作为参数保存到以前声明的MenuItem对象 这将在偶数子项上设置选中的选择
if (prevMenuItem != null) {
prevMenuItem.setChecked(false);
}
menuItem.setChecked(true);
mDrawerLayout.closeDrawers();
prevMenuItem = menuItem;
return true;
我发现这个解决方案如果您使用的是
组
和android:checkableBehavior=“single”
,那么您所需要做的就是在导航视图中将单个项设置为选中项(而不仅仅是使用项选中的项。setChecked(true)
):
现在,无论您选择还是模拟选择一个项目,它一次只会检查一个项目。将两个组放在一个集合的单个组中
android:checkableBehavior="single"
创建一个父组工作和快速实施的可能副本
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
//item.setChecked(true); //Won't work, will leave previous item checked too.
navigationView.setCheckedItem(id); //this will check single item
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
android:checkableBehavior="single"