Adding expandableListView to NavigationView

后端 未结 4 1451
北恋
北恋 2020-11-28 03:15

I have a menu defined in xml:


    

        
4条回答
  •  一向
    一向 (楼主)
    2020-11-28 03:58

    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 listDataHeader;
        HashMap> 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();
            listDataChild = new HashMap>();
    
            // 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 heading1 = new ArrayList();
            heading1.add("Submenu");
            heading1.add("Submenu");
            heading1.add("Submenu");
    
            List heading2 = new ArrayList();
            heading2.add("Submenu");
            heading2.add("Submenu");
            heading2.add("Submenu");
            heading2.add("Submenu");
    
            List heading3 = new ArrayList();
            heading3.add("Submenu");
            heading3.add("Submenu");
    
            List heading4 = new ArrayList();
            heading4.add("Submenu");
            heading4.add("Submenu");
    
            List heading5 = new ArrayList();
            heading5.add("Submenu");
            heading5.add("Submenu");
            heading5.add("Submenu");
    
            List heading6 = new ArrayList();
            heading6.add("Submenu");
            heading6.add("Submenu");
    
            List heading7 = new ArrayList();
            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;
        }
    }
    

    ExpandableListAdapter.java

    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 mListDataHeader; // header titles
    
        // child data in format of header title, child title
        private HashMap> mListDataChild;
        ExpandableListView expandList;
    
        public ExpandableListAdapter(Context context,
                     List listDataHeader,
                     HashMap> 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;
        }
    }
    

    list_submenu.xml

    
    
        
    
    

    listheader.xml

    
    
    
        
            
            
        
    
    
    

    activity_main.xml

    
    
    
        
    
        
    
            
            
    
        
    
    
    

    Hope this will work and some other files are in this example... I think you can solve those matters... It will look like as you are wanted...

提交回复
热议问题