Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将expandableListView添加到NavigationView_Android_Android Layout - Fatal编程技术网

Android 将expandableListView添加到NavigationView

Android 将expandableListView添加到NavigationView,android,android-layout,Android,Android Layout,我有一个用xml定义的菜单: <group android:checkableBehavior="single" android:id="@+id/group"> <item android:id="@+id/grades" android:icon="@drawable/ic_font_download_black_48dp" android:checked="false" android:title="

我有一个用xml定义的菜单:

<group android:checkableBehavior="single" android:id="@+id/group">
    <item
        android:id="@+id/grades"
        android:icon="@drawable/ic_font_download_black_48dp"
        android:checked="false"
        android:title="Grades" >
        <menu>
            <item
                android:id="@+id/mp1"
                android:icon="@drawable/ic_looks_one_black_24dp"
                android:checked="false"
                android:title="MP1" />
            <item
                android:id="@+id/mp2"
                android:icon="@drawable/ic_looks_two_black_24dp"
                android:checked="false"
                android:title="MP2" />
            <item
                android:id="@+id/mp3"
                android:icon="@drawable/ic_font_download_black_48dp"
                android:checked="false"
                android:title="MP3" />
            <item
                android:id="@+id/mp4"
                android:icon="@drawable/ic_font_download_black_48dp"
                android:checked="false"
                android:title="MP4" />
        </menu>
    </item>
    <item
        android:id="@+id/schedule"
        android:icon="@drawable/ic_event_black_48dp"
        android:checked="false"
        android:title="Schedule" />
    <item
        android:id="@+id/attendance"
        android:icon="@drawable/ic_assignment_ind_black_48dp"
        android:checked="false"
        android:title="Attendance" />
    <item
        android:id="@+id/assignments"
        android:icon="@drawable/ic_assignment_black_48dp"
        android:checked="false"
        android:title="Assignments" />
    <item
        android:id="@+id/studentInfo"
        android:icon="@drawable/ic_account_circle_black_48dp"
        android:checked="false"
        android:title="Student Details" />
</group>
<group android:id="@+id/group2" android:checkableBehavior="single">
    <item
        android:id="@+id/placeholder"
        android:icon="@drawable/ic_android_black_48dp"
        android:checked="false"
        android:title="Placeholder" />
    <item
        android:id="@+id/placeholder2"
        android:icon="@drawable/ic_android_black_48dp"
        android:checked="false"
        android:title="Placeholder" />
</group>


它添加了一个子菜单,如下所示:

但是,我无法使此子菜单如下所示:(可折叠)

我现在知道我需要实现一个expandableListView,但我不确定这是否适合我已经创建的菜单


欢迎您提供任何建议

您可以使用自定义的
列表视图
创建建议

请参阅下面的代码活动\u导航\u视图.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true">

        <ExpandableListView
            android:id="@+id/navigationmenu"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginTop="192dp"
            android:background="@android:color/white">
        </ExpandableListView>
    </android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
[旁注]:

  • 不要将
    导入android.widget.ExpandableListAdapter。如果在创建文件ExpandableListAdapter.java之前通过Alt+Enter解析导入,则可能会发生此错误

  • 编译'com.android.support:design:23.3.0'放在应用程序的build.gradle中,用于“导航视图”及其“导入android.support.design.widget.NavigationView”;然后(可能需要先重建)可以执行Alt-Enter来解析导入

  • 文件层次结构应该如下所示(上面的3.java和3.xml):

    输出屏幕截图:


    谢谢@Priyank和@atabek it relay对我的帮助

    当我完成这段代码时,它工作正常,除了项目单击事件,它没有显示所选项目,因为我做了一些小更改

    在布局ExpandableListView中,我添加了listSelector()

    MainActivity.java

    import android.graphics.Color;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.NavigationView;
    import android.support.design.widget.Snackbar;
    import android.support.v4.view.GravityCompat;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBarDrawerToggle;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.ExpandableListView;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity
            implements NavigationView.OnNavigationItemSelectedListener {
    
        View view_Group;
        private DrawerLayout mDrawerLayout;
        ExpandableListAdapter mMenuAdapter;
        ExpandableListView expandableList;
        List<String> listDataHeader;
        HashMap<String, List<String>> listDataChild;
        //Icons, use as you want
        static int[] icon = { R.drawable.ico1, R.drawable.ico1,
                R.drawable.ico1, R.drawable.ico1,
                R.drawable.ico1, R.drawable.ico1, R.drawable.ico1};
        @Override
        public void onWindowFocusChanged(boolean hasFocus) {
            super.onWindowFocusChanged(hasFocus);
            if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
                expandableList.setIndicatorBounds(expandableList.getRight()- 80, expandableList.getWidth());
            } else {
                expandableList.setIndicatorBoundsRelative(expandableList.getRight()- 80, expandableList.getWidth());
            }
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
            //requestWindowFeature(Window.FEATURE_NO_TITLE);
            this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
            setContentView(R.layout.activity_main);
    
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();
                }
            });
    
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            drawer.setDrawerListener(toggle);
            toggle.syncState();
    
            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
            expandableList = (ExpandableListView) findViewById(R.id.navigationmenu);
    
            NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
            navigationView.setNavigationItemSelectedListener(this);
            navigationView.setItemIconTintList(null);
    
            if (navigationView != null) {
                setupDrawerContent(navigationView);
            }
            prepareListData();
            mMenuAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
    
            // setting list adapter
            expandableList.setAdapter(mMenuAdapter);
    
            expandableList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
                @Override
                public boolean onChildClick(ExpandableListView expandableListView,
                                            View view,
                                            int groupPosition,
                                            int childPosition, long id) {
                    //Log.d("DEBUG", "submenu item clicked");
                    Toast.makeText(MainActivity.this,
                            "Header: "+String.valueOf(groupPosition) +
                            "\nItem: "+ String.valueOf(childPosition), Toast.LENGTH_SHORT)
                            .show();
                    view.setSelected(true);
                    if (view_Group != null) {
                        view_Group.setBackgroundColor(Color.parseColor("#ffffff"));
                    }
                    view_Group = view;
                    view_Group.setBackgroundColor(Color.parseColor("#DDDDDD"));
                    mDrawerLayout.closeDrawers();
                    return false;
                }
            });
            expandableList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
                @Override
                public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
                    //Log.d("DEBUG", "heading clicked");
                    return false;
                }
            });
    
        }
    
        private void prepareListData() {
            listDataHeader = new ArrayList<String>();
            listDataChild = new HashMap<String, List<String>>();
    
            // Adding data header
            listDataHeader.add("menu1");
            listDataHeader.add("menu2");
            listDataHeader.add("menu3");
            listDataHeader.add("menu4");
            listDataHeader.add("menu5");
            listDataHeader.add("menu6");
            listDataHeader.add("menu7");
    
            // Adding child data
            List<String> heading1 = new ArrayList<String>();
            heading1.add("Submenu");
            heading1.add("Submenu");
            heading1.add("Submenu");
    
            List<String> heading2 = new ArrayList<String>();
            heading2.add("Submenu");
            heading2.add("Submenu");
            heading2.add("Submenu");
            heading2.add("Submenu");
    
            List<String> heading3 = new ArrayList<String>();
            heading3.add("Submenu");
            heading3.add("Submenu");
    
            List<String> heading4 = new ArrayList<String>();
            heading4.add("Submenu");
            heading4.add("Submenu");
    
            List<String> heading5 = new ArrayList<String>();
            heading5.add("Submenu");
            heading5.add("Submenu");
            heading5.add("Submenu");
    
            List<String> heading6 = new ArrayList<String>();
            heading6.add("Submenu");
            heading6.add("Submenu");
    
            List<String> heading7 = new ArrayList<String>();
            heading4.add("Submenu");
            heading4.add("Submenu");
    
            listDataChild.put(listDataHeader.get(0), heading1);// Header, Child data
            listDataChild.put(listDataHeader.get(1), heading2);
            listDataChild.put(listDataHeader.get(2), heading3);
            listDataChild.put(listDataHeader.get(3), heading4);
            listDataChild.put(listDataHeader.get(4), heading5);
            listDataChild.put(listDataHeader.get(5), heading6);
            listDataChild.put(listDataHeader.get(6), heading7);
        }
    
        private void setupDrawerContent(NavigationView navigationView) {
            navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        return true;
                    }
                });
        }
    
        @Override
        public void onBackPressed() {
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            if (drawer.isDrawerOpen(GravityCompat.START)) {
                drawer.closeDrawer(GravityCompat.START);
            } else {
                super.onBackPressed();
            }
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    
        @SuppressWarnings("StatementWithEmptyBody")
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            // Handle navigation view item clicks here.
            int id = item.getItemId();
    
            /*if (id == R.id.nav_camera) {
                // Handle the camera action
            } else if (id == R.id.nav_gallery) {
    
            } else if (id == R.id.nav_slideshow) {
    
            } else if (id == R.id.nav_manage) {
    
            } 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;
        }
    }
    
    导入android.graphics.Color;
    导入android.os.Bundle;
    导入android.support.design.widget.FloatingActionButton;
    导入android.support.design.widget.NavigationView;
    导入android.support.design.widget.Snackbar;
    导入android.support.v4.view.GravityCompat;
    导入android.support.v4.widget.DrawerLayout;
    导入android.support.v7.app.ActionBarDrawerToggle;
    导入android.support.v7.app.AppActivity;
    导入android.support.v7.widget.Toolbar;
    导入android.view.Menu;
    导入android.view.MenuItem;
    导入android.view.view;
    导入android.view.Window;
    导入android.view.WindowManager;
    导入android.widget.ExpandableListView;
    导入android.widget.Toast;
    导入java.util.ArrayList;
    导入java.util.HashMap;
    导入java.util.List;
    公共类MainActivity扩展了AppCompatActivity
    实现NavigationView.OnNavigationItemSelectedListener{
    视图组;
    私人抽屉布局mDrawerLayout;
    可扩展列表适配器;
    可扩展列表查看可扩展列表;
    列表列表数据头;
    HashMapListDataChild;
    //图标,根据需要使用
    静态int[]图标={R.drawable.ico1,R.drawable.ico1,
    R.drawable.ico1,R.drawable.ico1,
    R.drawable.ico1,R.drawable.ico1,R.drawable.ico1};
    @凌驾
    WindowFocusChanged上的公共无效(布尔hasFocus){
    super.onWindowFocusChanged(hasFocus);
    if(android.os.Build.VERSION.SDK\u INT<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical">
    
        <TextView
            android:id="@+id/submenu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:padding="10dp"
            android:textColor="#000000"
            android:textSize="18sp"/>
    </LinearLayout>
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="2dp"
                  android:orientation="vertical">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="20dp"
            android:orientation="horizontal">
    
            <ImageView
                android:id="@+id/iconimage"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:paddingBottom="10dp"
                android:paddingLeft="10dp"
                android:paddingTop="10dp"/>
    
            <TextView
                android:id="@+id/submenu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="10dp"
                android:textColor="#000000"
                android:textSize="20sp"/>
    
        </LinearLayout>
    
    </LinearLayout>
    
    public class NavigationViewActivity extends AppCompatActivity {
    
        private DrawerLayout mDrawerLayout;
        ExpandableListAdapter mMenuAdapter;
        ExpandableListView expandableList;
        List<ExpandedMenuModel> listDataHeader;
        HashMap<ExpandedMenuModel, List<String>> listDataChild;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_navigation_view);
            final ActionBar ab = getSupportActionBar();
            /* to set the menu icon image*/
            ab.setHomeAsUpIndicator(android.R.drawable.ic_menu_add);
            ab.setDisplayHomeAsUpEnabled(true);
            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
            expandableList = (ExpandableListView) findViewById(R.id.navigationmenu);
            NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    
            if (navigationView != null) {
                setupDrawerContent(navigationView);
            }
    
            prepareListData();
            mMenuAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild, expandableList);
    
            // setting list adapter
            expandableList.setAdapter(mMenuAdapter);
    
            expandableList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
                @Override
                public boolean onChildClick(ExpandableListView expandableListView, View view, int i, int i1, long l) {
                    //Log.d("DEBUG", "submenu item clicked");
                    return false;
                }
            });
            expandableList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
                @Override
                public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
                    //Log.d("DEBUG", "heading clicked");
                    return false;
                }
            });
        }
    
        private void prepareListData() {
            listDataHeader = new ArrayList<ExpandedMenuModel>();
            listDataChild = new HashMap<ExpandedMenuModel, List<String>>();
    
            ExpandedMenuModel item1 = new ExpandedMenuModel();
            item1.setIconName("heading1");
            item1.setIconImg(android.R.drawable.ic_delete);
            // Adding data header
            listDataHeader.add(item1);
    
            ExpandedMenuModel item2 = new ExpandedMenuModel();
            item2.setIconName("heading2");
            item2.setIconImg(android.R.drawable.ic_delete);
            listDataHeader.add(item2);
    
            ExpandedMenuModel item3 = new ExpandedMenuModel();
            item3.setIconName("heading3");
            item3.setIconImg(android.R.drawable.ic_delete);
            listDataHeader.add(item3);
    
            // Adding child data
            List<String> heading1 = new ArrayList<String>();
            heading1.add("Submenu of item 1");
    
            List<String> heading2 = new ArrayList<String>();
            heading2.add("Submenu of item 2");
            heading2.add("Submenu of item 2");
            heading2.add("Submenu of item 2");
    
            listDataChild.put(listDataHeader.get(0), heading1);// Header, Child data
            listDataChild.put(listDataHeader.get(1), heading2);
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case android.R.id.home:
                    mDrawerLayout.openDrawer(GravityCompat.START);
                    return true;
            }
            return super.onOptionsItemSelected(item);
        }
    
        private void setupDrawerContent(NavigationView navigationView) {
            //revision: this don't works, use setOnChildClickListener() and setOnGroupClickListener() above instead
            navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        return true;
                    }
                });
        }
    
    }
    
    public class ExpandedMenuModel {
    
        String iconName = "";
        int iconImg = -1; // menu icon resource id
    
        public String getIconName() {
            return iconName;
        }
        public void setIconName(String iconName) {
            this.iconName = iconName;
        }
        public int getIconImg() {
            return iconImg;
        }
        public void setIconImg(int iconImg) {
            this.iconImg = iconImg;
        } 
    }
    
        <ExpandableListView
            android:id="@+id/navigationmenu"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="192dp"
            android:background="@android:color/white"
            android:choiceMode="singleChoice"
            android:listSelector="@color/colorAccent"
            />
    
    ------
    ------
    private void setupDrawerContent(NavigationView navigationView) {
    
        expandableList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
    
                int index = parent.getFlatListPosition(ExpandableListView.getPackedPositionForChild(groupPosition, childPosition));
                parent.setItemChecked(index, true);
    
                Toast.makeText(MainActivity.this, "clicked " + listDataChild.get(listDataHeader.get(groupPosition)).get(childPosition).toString(), Toast.LENGTH_SHORT).show();
                mDrawerLayout.closeDrawers();
    
                return true;
            }
        });
    
        /*
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        return true;
                    }
                });
        */
    }
    ------
    ------
    
    import android.graphics.Color;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.NavigationView;
    import android.support.design.widget.Snackbar;
    import android.support.v4.view.GravityCompat;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBarDrawerToggle;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;
    import android.widget.ExpandableListView;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity
            implements NavigationView.OnNavigationItemSelectedListener {
    
        View view_Group;
        private DrawerLayout mDrawerLayout;
        ExpandableListAdapter mMenuAdapter;
        ExpandableListView expandableList;
        List<String> listDataHeader;
        HashMap<String, List<String>> listDataChild;
        //Icons, use as you want
        static int[] icon = { R.drawable.ico1, R.drawable.ico1,
                R.drawable.ico1, R.drawable.ico1,
                R.drawable.ico1, R.drawable.ico1, R.drawable.ico1};
        @Override
        public void onWindowFocusChanged(boolean hasFocus) {
            super.onWindowFocusChanged(hasFocus);
            if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
                expandableList.setIndicatorBounds(expandableList.getRight()- 80, expandableList.getWidth());
            } else {
                expandableList.setIndicatorBoundsRelative(expandableList.getRight()- 80, expandableList.getWidth());
            }
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
            //requestWindowFeature(Window.FEATURE_NO_TITLE);
            this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
            setContentView(R.layout.activity_main);
    
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();
                }
            });
    
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            drawer.setDrawerListener(toggle);
            toggle.syncState();
    
            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
            expandableList = (ExpandableListView) findViewById(R.id.navigationmenu);
    
            NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
            navigationView.setNavigationItemSelectedListener(this);
            navigationView.setItemIconTintList(null);
    
            if (navigationView != null) {
                setupDrawerContent(navigationView);
            }
            prepareListData();
            mMenuAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
    
            // setting list adapter
            expandableList.setAdapter(mMenuAdapter);
    
            expandableList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
                @Override
                public boolean onChildClick(ExpandableListView expandableListView,
                                            View view,
                                            int groupPosition,
                                            int childPosition, long id) {
                    //Log.d("DEBUG", "submenu item clicked");
                    Toast.makeText(MainActivity.this,
                            "Header: "+String.valueOf(groupPosition) +
                            "\nItem: "+ String.valueOf(childPosition), Toast.LENGTH_SHORT)
                            .show();
                    view.setSelected(true);
                    if (view_Group != null) {
                        view_Group.setBackgroundColor(Color.parseColor("#ffffff"));
                    }
                    view_Group = view;
                    view_Group.setBackgroundColor(Color.parseColor("#DDDDDD"));
                    mDrawerLayout.closeDrawers();
                    return false;
                }
            });
            expandableList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
                @Override
                public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
                    //Log.d("DEBUG", "heading clicked");
                    return false;
                }
            });
    
        }
    
        private void prepareListData() {
            listDataHeader = new ArrayList<String>();
            listDataChild = new HashMap<String, List<String>>();
    
            // Adding data header
            listDataHeader.add("menu1");
            listDataHeader.add("menu2");
            listDataHeader.add("menu3");
            listDataHeader.add("menu4");
            listDataHeader.add("menu5");
            listDataHeader.add("menu6");
            listDataHeader.add("menu7");
    
            // Adding child data
            List<String> heading1 = new ArrayList<String>();
            heading1.add("Submenu");
            heading1.add("Submenu");
            heading1.add("Submenu");
    
            List<String> heading2 = new ArrayList<String>();
            heading2.add("Submenu");
            heading2.add("Submenu");
            heading2.add("Submenu");
            heading2.add("Submenu");
    
            List<String> heading3 = new ArrayList<String>();
            heading3.add("Submenu");
            heading3.add("Submenu");
    
            List<String> heading4 = new ArrayList<String>();
            heading4.add("Submenu");
            heading4.add("Submenu");
    
            List<String> heading5 = new ArrayList<String>();
            heading5.add("Submenu");
            heading5.add("Submenu");
            heading5.add("Submenu");
    
            List<String> heading6 = new ArrayList<String>();
            heading6.add("Submenu");
            heading6.add("Submenu");
    
            List<String> heading7 = new ArrayList<String>();
            heading4.add("Submenu");
            heading4.add("Submenu");
    
            listDataChild.put(listDataHeader.get(0), heading1);// Header, Child data
            listDataChild.put(listDataHeader.get(1), heading2);
            listDataChild.put(listDataHeader.get(2), heading3);
            listDataChild.put(listDataHeader.get(3), heading4);
            listDataChild.put(listDataHeader.get(4), heading5);
            listDataChild.put(listDataHeader.get(5), heading6);
            listDataChild.put(listDataHeader.get(6), heading7);
        }
    
        private void setupDrawerContent(NavigationView navigationView) {
            navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        return true;
                    }
                });
        }
    
        @Override
        public void onBackPressed() {
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            if (drawer.isDrawerOpen(GravityCompat.START)) {
                drawer.closeDrawer(GravityCompat.START);
            } else {
                super.onBackPressed();
            }
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    
        @SuppressWarnings("StatementWithEmptyBody")
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            // Handle navigation view item clicks here.
            int id = item.getItemId();
    
            /*if (id == R.id.nav_camera) {
                // Handle the camera action
            } else if (id == R.id.nav_gallery) {
    
            } else if (id == R.id.nav_slideshow) {
    
            } else if (id == R.id.nav_manage) {
    
            } 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;
        }
    }
    
    import android.content.Context;
    import android.graphics.Typeface;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseExpandableListAdapter;
    import android.widget.ExpandableListView;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import java.util.HashMap;
    import java.util.List;
    
    /**
     * Created by Administrator on 9/1/16.
     */
    public class ExpandableListAdapter extends BaseExpandableListAdapter {
        private Context mContext;
        private List<String> mListDataHeader; // header titles
    
        // child data in format of header title, child title
        private HashMap<String, List<String>> mListDataChild;
        ExpandableListView expandList;
    
        public ExpandableListAdapter(Context context,
                     List<String> listDataHeader,
                     HashMap<String,
                     List<String>> listChildData
        //        ,ExpandableListView mView
        )
        {
            this.mContext = context;
            this.mListDataHeader = listDataHeader;
            this.mListDataChild = listChildData;
            //this.expandList = mView;
        }
    
        @Override
        public int getGroupCount() {
            int i = mListDataHeader.size();
            //Log.d("GROUPCOUNT", String.valueOf(i));
            return i;
        }
    
        @Override
        public int getChildrenCount(int groupPosition) {
            return this.mListDataChild.get(
                    this.mListDataHeader.get(groupPosition))
                    .size();
        }
    
        @Override
        public Object getGroup(int groupPosition) {
            return this.mListDataHeader.get(groupPosition);
        }
    
        @Override
        public Object getChild(int groupPosition, int childPosition) {
            //Log.d("CHILD", mListDataChild.get(this.mListDataHeader.get(groupPosition))
            //        .get(childPosition).toString());
            return this.mListDataChild.get(
                    this.mListDataHeader.get(groupPosition))
                    .get(childPosition);
        }
    
        @Override
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }
    
        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }
    
        @Override
        public boolean hasStableIds() {
            return false;
        }
    
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
            String headerTitle = (String) getGroup(groupPosition);
            if (convertView == null) {
                LayoutInflater infalInflater = (LayoutInflater) this.mContext
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = infalInflater.inflate(R.layout.listheader, null);
            }
            TextView lblListHeader = (TextView) convertView
                    .findViewById(R.id.submenu);
            ImageView headerIcon = (ImageView) convertView.findViewById(R.id.iconimage);
            lblListHeader.setTypeface(null, Typeface.BOLD);
            lblListHeader.setText(headerTitle);
            //lblListHeader.setText(headerTitle.getIconName());
            headerIcon.setImageResource(MainActivity.icon[groupPosition]);
            return convertView;
        }
    
        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            final String childText = (String) getChild(groupPosition, childPosition);
    
            if (convertView == null) {
                LayoutInflater infalInflater = (LayoutInflater) this.mContext
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = infalInflater.inflate(R.layout.list_submenu, null);
            }
    
            TextView txtListChild = (TextView) convertView
                    .findViewById(R.id.submenu);
    
            txtListChild.setText(childText);
    
            return convertView;
        }
    
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:textColor="#000000"
            android:layout_marginLeft="44dp"
            android:textSize="14sp"
            android:id="@+id/submenu"/>
    </LinearLayout>
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:orientation="vertical"
        xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:paddingBottom="10dp"
                android:paddingLeft="10dp"
                android:paddingTop="10dp"
                android:id="@+id/iconimage"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="45dp"
                android:padding="10dp"
                android:textColor="#000000"
                android:textSize="16sp"
                android:id="@+id/submenu"
                android:gravity="center_vertical" />
        </LinearLayout>
    
    </LinearLayout>
    
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:openDrawer="start">
    
        <include
            layout="@layout/app_bar_main"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"
            app:headerLayout="@layout/nav_header_main">
    
            <ExpandableListView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@android:color/white"
                android:layout_marginTop="160dp"
                android:choiceMode="singleChoice"
                android:id="@+id/navigationmenu">
            </ExpandableListView>
    
        </android.support.design.widget.NavigationView>
    
    </android.support.v4.widget.DrawerLayout>
    
    <ExpandableListView
       android:id="@+id/navigationmenu"
       android:layout_width="wrap_content"
       android:layout_height="match_parent"
       android:groupIndicator="@null"
       android:layout_marginTop="192dp"
       android:background="@android:color/white">
    
    </ExpandableListView>