Android:多个选中的菜单项出现问题

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="

这是我的应用程序的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="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"