2

I am using android design support library to create drawer layout.

In my NavigationView I have menu group which contains sub menu.

Here is my menu file.

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

My item click listener

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;
                    }
                });

However my problem is only first four main menu items get checked properly while submenu click event also works but they don't get checked. Instead previous main menu remains checked.

Azim Ansari
  • 1,378
  • 11
  • 20
  • its is issue in design support lib check this, https://code.google.com/p/android/issues/detail?id=178709 , if you still want to do then check answer http://stackoverflow.com/a/31047154/1168654 – Dhaval Parmar Aug 01 '15 at 10:01
  • Yes, it seem to be an issue in support library. But the link you have suggested is not a good solution because it inflates the menu each time we click on any item. So I am waiting for next library release by google – Azim Ansari Aug 01 '15 at 10:40

2 Answers2

4

I had the same issue but just noticed a solution. It is not pretty but works for me.

Does not seem like the single groups with checkableBehavior="single" would interact but they do. There´s just one item checked at a time but I also use two menus. Check this out:

<?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>

But it doesn´t work with default xml state checked="true". In that case it doesn´t uncheck this item but check a second item in a single-checkable group. :D

2

It acts with your sub items as one item and tries to highlight the entire thing. You want to single behavior as a group for the subitems. See below:

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

Wildcard
  • 541
  • 4
  • 6