如何在android导航抽屉中添加可折叠菜单项?

如何在android导航抽屉中添加可折叠菜单项?,android,navigation-drawer,android-navigationview,Android,Navigation Drawer,Android Navigationview,我有一个DrawerLayout和一个NavigationView,此布局活动用作我应用程序中所有活动的通用导航抽屉。我正在为导航视图中的app:menu提供菜单资源。我有一些菜单项,但我希望有一个菜单项是可折叠/可展开的,这样当我单击它时,它会展开以显示两个子菜单,并在第二次单击时再次折叠 我通过在中添加另一个来添加子菜单,但无法使其可折叠/可扩展 此外,我不想出于我的目的使用ExpandableListView。相反,我只需要在菜单资源文件中做一些调整。请给我指出正确的方向。我搜索Googl

我有一个
DrawerLayout
和一个
NavigationView
,此布局活动用作我应用程序中所有活动的通用导航抽屉。我正在为导航视图中的
app:menu
提供菜单资源。我有一些菜单项,但我希望有一个菜单项是可折叠/可展开的,这样当我单击它时,它会展开以显示两个子菜单,并在第二次单击时再次折叠

我通过在
中添加另一个
来添加子菜单,但无法使其可折叠/可扩展

此外,我不想出于我的目的使用
ExpandableListView
。相反,我只需要在菜单资源文件中做一些调整。请给我指出正确的方向。我搜索Google只是为了使用
ExpandableListView
查找可折叠列表项的代码、博客和示例,但我需要它来使用design support Library中的
NavigationView
design小部件

以下是我的菜单文件代码:

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

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_aboutus"
        android:title="About Us" />

    <item
        android:id="@+id/nav_faq"
        android:title="FAQs" />
    <item
        android:id="@+id/nav_share"
        android:title="Share" />
    <item
        android:id="@+id/nav_myaccount"
        android:title="My Account" />
    <item
        android:id="@+id/nav_legal"
        android:title="Legal" >
        <menu>
                <item
                    android:id="@+id/nav_tnc"
                    android:title="Terms and Conditions" />
                <item
                    android:id="@+id/nav_pp"
                    android:title="Privacy Policy" />
            </group>
        </menu>
    </item>

</menu>


我希望“法律”菜单项可以扩展,有两个子菜单项“条款和条件”、“隐私政策”。

您可以在导航抽屉中使用可扩展列表视图,我不明白您为什么不想使用它们。更多关于这方面的信息可以在这里找到


如果您坚持不使用expandableListView,那么另一种选择是使用该特定项的菜单OnSelect自行设计扩展。虽然我真的不知道你为什么要这样做,但你只需要重新实现控制盘。

有一个技巧可以在不使用ExpandableListView的情况下做到这一点。通常在菜单布局文件中添加这些菜单项,并在单击要显示它们的菜单项时隐藏/显示它们,如下所示:

 public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.

        NavigationView nv= (NavigationView) findViewById(R.id.nav_view);
        Menu m=nv.getMenu();
        int id = item.getItemId();
        if (id == R.id.nav_posts) {
            boolean b=!m.findItem(R.id.nav_class).isVisible();
            //setting submenus visible state
            m.findItem(R.id.nav_class).setVisible(b);
            m.findItem(R.id.nav_dept).setVisible(b);
            m.findItem(R.id.nav_batch).setVisible(b);
            m.findItem(R.id.nav_campus).setVisible(b);
            return true;
        } else if (id == R.id.nav_walls) {
            boolean b=!m.findItem(R.id.nav_wall_events).isVisible();
            //setting submenus visible state
            m.findItem(R.id.nav_wall_events).setVisible(b);
            m.findItem(R.id.nav_wall_fun).setVisible(b);
            m.findItem(R.id.nav_wall_hadith).setVisible(b);
            m.findItem(R.id.nav_wall_news).setVisible(b);
            m.findItem(R.id.nav_wall_Poetry).setVisible(b);
            return true;
        } else if (id == R.id.nav_com) {

            m.findItem(R.id.nav_share).setVisible(false);
            m.findItem(R.id.nav_send).setVisible(false);

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
其中菜单布局文件为:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_posts"
            android:icon="@drawable/ic_menu_camera"
            android:title="Posts" />

        <item
            android:id="@+id/nav_class"
            android:title="Class"
            android:visible="false" />
        <item
            android:id="@+id/nav_dept"
            android:title="Department"
            android:visible="false" />
        <item
            android:id="@+id/nav_batch"
            android:title="Batch"
            android:visible="false" />
        <item
            android:id="@+id/nav_campus"
            android:title="Campus"
            android:visible="false" />


        <item
            android:id="@+id/nav_walls"
            android:icon="@drawable/ic_menu_gallery"
            android:title="Walls" />

        <item
            android:id="@+id/nav_wall_news"
            android:title="News"
            android:visible="false" />
        <item
            android:id="@+id/nav_wall_events"
            android:title="Events"
            android:visible="false" />
        <item
            android:id="@+id/nav_wall_fun"
            android:title="Fun"
            android:visible="false" />
        <item
            android:id="@+id/nav_wall_hadith"
            android:title="Hadith"
            android:visible="false" />
        <item
            android:id="@+id/nav_wall_Poetry"
            android:title="Poetry"
            android:visible="false" />


    </group>

    <item
        android:id="@+id/nav_com"
        android:title="Communicate">
        <menu>
            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/ic_menu_share"
                android:title="Share" />
            <item
                android:id="@+id/nav_send"
                android:icon="@drawable/ic_menu_send"
                android:title="Send" />
        </menu>
    </item>

</menu>

在菜单布局文件中:

<item
        android:title="Setup"
        android:id="@+id/SetupGr"
        android:icon="@drawable/setup"
        />
<group
    android:checkableBehavior="none"
    android:id="@+id/SetupGroup">
    <item
        android:id="@+id/setupOutdoor"
        android:icon="@drawable/outdoor"
        android:title="Outdoor" />
    <item
        android:id="@+id/setupClocks"
        android:icon="@drawable/ic_launcher"
        android:title="Clocks" />
    <item
        android:id="@+id/selectMaps"
        android:icon="@drawable/map"
        android:title="Select map" />
</group>
和OnNavigationItemSelected:

public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    navigationView.getMenu().setGroupVisible(R.id.HelpGroup,false);
    navigationView.getMenu().setGroupVisible(R.id.SetupGroup,false);
    switch (item.getItemId()){
        case R.id.HelpGr:
            navigationView.getMenu().setGroupVisible(R.id.HelpGroup,true);
            navigationView.getMenu().setGroupVisible(R.id.SetupGroup,false);
            return true;
        case R.id.SetupGr:
            navigationView.getMenu().setGroupVisible(R.id.SetupGroup,true);
            navigationView.getMenu().setGroupVisible(R.id.HelpGroup,false);
            return true;
    }    
    base.closeDrawer(GravityCompat.START);
    return true;
}

我有一个项目-设置-当用户选择它时-我设置id为的组-设置组-可见并返回而不关闭抽屉。否则-我将所有组设置为不可见。

我认为仅使用
NavigationView
不可能做到这一点。是的!!不可能只使用“NavigationView”!!谢谢你的帮助!!谢谢你的回答。。我不会使用ExpandableListView。。我只是想方设法让它变成原来的样子。。。简单的菜单和子菜单,无需折叠和扩展功能。。。仍然+1表示提示答案!!我接受了这个答案,因为我在导航视图中使用了简单的菜单!!:)@KanwarbirSingh抱歉,但是你自己的答案太幼稚了,你可以更新你自己的问题,并举例说明你最后是如何解决的。我发现如果我隐藏子菜单中的所有项,父项也会被隐藏。在OnNavigationItemSelectedListener中管理事件时,我将groupVisible设置为true,以便显示所有项目。另一方面,@arslan你搞砸了!我已经尝试过可扩展列表视图响应,但没有一个能直接起作用!谢谢
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    navigationView.getMenu().setGroupVisible(R.id.HelpGroup,false);
    navigationView.getMenu().setGroupVisible(R.id.SetupGroup,false);
    switch (item.getItemId()){
        case R.id.HelpGr:
            navigationView.getMenu().setGroupVisible(R.id.HelpGroup,true);
            navigationView.getMenu().setGroupVisible(R.id.SetupGroup,false);
            return true;
        case R.id.SetupGr:
            navigationView.getMenu().setGroupVisible(R.id.SetupGroup,true);
            navigationView.getMenu().setGroupVisible(R.id.HelpGroup,false);
            return true;
    }    
    base.closeDrawer(GravityCompat.START);
    return true;
}