Swati Pardeshi
Swati Pardeshi

Reputation: 609

How to show/hide submenus inside NavigationView android

I want to create an expandablelistview like view inside navigation drawer where initially only main titles are shown (collapsed submenus). When title is clicked the submenus should appear (if possible animate)

I am using android.support.design.widget.NavigationView. I am able to add submenus via xml.

 <group android:checkableBehavior="all">
    <item
        android:id="@+id/action_venues"
        android:title="TITLE 1">
        <menu>
            <group
                android:id="@+id/group1"
                android:checkableBehavior="single"
                >
                <item android:title="SUBTITLE1.1" />
                <item android:title="SUBTITLE1.2" />
                <item android:title="SUBTITLE1.3" />

            </group>
        </menu>
    </item>
    <item
        android:id="@+id/action_vendors"
        android:title="TITLE2">
        <menu>
            <group
                android:id="@+id/group2"
                android:checkableBehavior="single"
                android:visible="false">
                <item android:title="SUBTITLE2.1" />
                <item android:title="SUBTITLE2.2" />
                <item android:title="SUBTITLE2.3" />

            </group>
        </menu>
    </item>

But if I keep any group in the xml android:visible="false" it doesn't appear in the drawer.

I also tried programatically showing/hiding the submenu with:

subMenu1.setGroupVisible(R.id.group1,false);

But it just hides the title menu also.

Is it possible with android.support.design.widget.NavigationView or do I have to use a custom view?

Upvotes: 3

Views: 6011

Answers (4)

irwin pins
irwin pins

Reputation: 1

navigationView.getMenu().findItem(R.id.id_of_the_item).setVisible(false)

Upvotes: 0

GabrieleG
GabrieleG

Reputation: 107

For the group tags I used

navigationView.getMenu().setGroupVisible(false)

For the item tags I used

navigationView.getMenu().findViewById(R.id.id_of_the_item).setVisibility(View.GONE)

All working.

Upvotes: 1

Mohammad Mirzakhani
Mohammad Mirzakhani

Reputation: 620

    Menu menu = navigationView.getMenu();
    for (int i = 0; i < menu.size(); i++) {

        if (menu.getItem(i).getItemId() != R.id.login){
            menu.getItem(i).setVisible(false);
        }

    }

Upvotes: 3

Swati Pardeshi
Swati Pardeshi

Reputation: 609

I managed to show/hide the subtitles by making the titles a separate group. Not sure if this is the right way:

<group>
    <item
        android:id="@+id/action_venues"
        android:title="group1" />
</group>
<group
    android:id="@+id/group2"
    android:checkableBehavior="single">
     <item android:title="SUBTITLE1.1" />
     <item android:title="SUBTITLE1.2" />
     <item android:title="SUBTITLE1.3" />
</group>

<group>
    <item
        android:id="@+id/action_vendors"
        android:title="group3" />
</group>
<group
    android:id="@+id/group4"
    android:checkableBehavior="single"
    android:visible="false">
    <item android:title="SUBTITLE2.1" />
    <item android:title="SUBTITLE2.2" />
    <item android:title="SUBTITLE2.3" />
</group>

And then in the code:

 Menu drawerMenu = drawer.getMenu();
 case R.id.action_venues:
   drawerMenu.setGroupVisible(R.id.group2,true);
 case R.id.action_vendors:
   drawerMenu.setGroupVisible(R.id.group4,true);

But still can't animate.

Upvotes: 1

Related Questions