使用导航视图的子菜单不会被选中

时间:2015-08-01 09:43:15

标签: android material-design androiddesignsupport navigationview

我正在使用android设计支持库来创建抽屉布局。

在我的NavigationView我有包含子菜单的菜单组。

这是我的菜单文件。

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_home"
            android:icon="@drawable/ic_dashboard"
            android:title="Home" />
        <item
            android:id="@+id/nav_messages"
            android:icon="@drawable/ic_event"
            android:title="Messages" />
        <item
            android:id="@+id/nav_friends"
            android:icon="@drawable/ic_headset"
            android:title="Friends" />
        <item
            android:id="@+id/nav_discussion"
            android:icon="@drawable/ic_forum"
            android:title="Discussion" />

        <item android:title="Sub Menus">
            <menu>
                <item
                    android:id="@+id/sub_one"
                    android:icon="@drawable/ic_dashboard"
                    android:title="Sub item 1" />
                <item
                    android:id="@+id/sub_two"
                    android:icon="@drawable/ic_forum"
                    android:title="Sub item 2" />
            </menu>
        </item>
    </group>

我的项目单击侦听器

navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {

                        Log.d("Item Click : ", menuItem.getTitle().toString());
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        return true;
                    }
                });

但是我的问题是只有前四个主菜单项被正确检查,而子菜单点击事件也可以,但它们不会被检查。相反,之前的主菜单仍会被选中。

2 个答案:

答案 0 :(得分:4)

我有同样的问题,但只是注意到一个解决方案。它不漂亮但对我有用。

似乎看起来像checkableBehavior =“single”的单个组会进行交互,但他们会这样做。一次只检查一个项目,但我也使用两个菜单。看看这个:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group> 
    <item android:title="title">
        <menu>
            <group android:checkableBehavior="single">
                <item
                    android:id="@+id/navigation_item_1"
                    android:title="title"/>
                <item
                    android:id="@+id/navigation_item_2"
                    android:title="title"/> 
                <item
                    android:id="@+id/navigation_item_3"      
                    android:title="title"/>
            </group>
        </menu>
    </item>
    <item android:title="@string/title">
        <menu>
            <group android:checkableBehavior="single">
                <item
                    android:id="@+id/navigation_sub_item_1"
                    android:title="title"/> 
                <item
                    android:id="@+id/navigation_sub_item_2"
                    android:title="title"/>
            </group>
        </menu>
    </item>
</group>

但它不适用于默认的xml状态checked =“true”。在这种情况下,它不会取消选中此项目,但会检查单个可检查组中的第二个项目。 :d

答案 1 :(得分:1)

它将您的子项目作为一个项目,并尝试突出显示整个项目。您希望单个行为作为子项的组。见下文:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_home"
        android:icon="@drawable/ic_dashboard"
        android:title="Home" />
  <item
        android:id="@+id/nav_check"
        android:icon="@drawable/ic_cloud_queue_black_24dp"
        android:title="Check" />
</group>

<!-- Sub items -->

<item android:title="Other">
  <menu>
    <group android:checkableBehavior="single">
      <item
            android:id="@+id/nav_settings"
            android:icon="@drawable/ic_settings_white_24dp"
            android:title="settings" />
      <item
          android:icon="@drawable/ic_forum"
          android:title="forum" />
    </group>
  </menu>
</item>