2015-09-06 3 views
28

У меня есть меню определены в XML:Добавление expandableListView к NavigationView

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

который добавляет подменю, которое выглядит следующим образом: enter image description here

Однако, я не могу чтобы это подменю выглядело следующим образом: (с возможностью складывания)

enter image description here

теперь я знаю, что мне нужно реализовать expandableListView, но я не уверен, как это будет вписываться в меню я уже создал.

Любые советы ценится

+0

Проверить этот протокол HTTPS: //www.dropbox.com/s/qtd51lxypodvojf/NavigationDrawer.zip для демонстрационного тестирования –

+0

Подменю не будет разрушаться в NavigationView. Я написал некоторый код, чтобы попытаться поместить ExpandableListVIew в headerLayout NavigationView (без меню). Окно списка заканчивается заверением, так что вы можете видеть только один элемент. Итак, вот сделка: NavigationView предназначен только для очень простых меню. Если вы хотите иметь расширяемые элементы меню, дополнительные значки или что-то еще интересное, вам придется забыть о NavigationView и вернуться к тому, чтобы простой фрагмент для навигационного ящика выполнял все ваши собственные макеты. Или вы можете искать GitHub для проекта навигационного ящика. –

+0

@ Kris larson пример, который я предоставил, использует навигацию – Markoe7

ответ

56

Вы можете создать его, используя пользовательские ListView.

Смотрите ниже код activity_navigation_view.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> 

Адаптер для телескопического просмотра списка выглядит следующим образом.

ExpandableListAdapter.java

import android.content.Context; 
import android.graphics.Typeface; 
import android.util.Log; 
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; 

public class ExpandableListAdapter extends BaseExpandableListAdapter { 
    private Context mContext; 
    private List<ExpandedMenuModel> mListDataHeader; // header titles 

    // child data in format of header title, child title 
    private HashMap<ExpandedMenuModel, List<String>> mListDataChild; 
    ExpandableListView expandList; 

    public ExpandableListAdapter(Context context, List<ExpandedMenuModel> listDataHeader, HashMap<ExpandedMenuModel, 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 this.mListDataHeader.size(); 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     int childCount = 0; 
     if (groupPosition != 2) { 
      childCount = this.mListDataChild.get(this.mListDataHeader.get(groupPosition)) 
       .size(); 
     } 
     return childCount; 
    } 

    @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) { 
     ExpandedMenuModel headerTitle = (ExpandedMenuModel) 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.getIconName()); 
     headerIcon.setImageResource(headerTitle.getIconImg()); 
     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 заключается в следующем.

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

listheader.xml выглядит следующим образом.

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

В навигационной операции просмотра установите адаптер для расширения списка. NavigationViewActivity.java

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

} 

ExpandedMenuModel класс содержит информацию пункт меню, как следовать.

ExpandedMenuModel.java

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

[Примечание стороны]:

  1. Не помещайте import android.widget.ExpandableListAdapter; в NavigationViewActivity.java. Эта ошибка может произойти, если вы разрешите импорт Alt + Enter перед созданием файла ExpandableListAdapter.java.

  2. Помещенный компиляции «com.android.support:design:23.3.0» в build.gradle приложения, это для «NavigationView» и его «импорта android.support.design.widget.NavigationView;»После этого (может потребоваться восстановить первый), вы можете сделать Alt-Enter, для того чтобы разрешить импорт

Иерархия файл должен выглядеть (3 .java и 3 .xml сверху):

. enter image description here

скриншот выход:

enter image description here

+0

Что такое ExpandedMenuModel ?? @Priyank –

+0

@MicheleLacorte Класс ExpandedMenuModel содержит сведения о пункте меню, см. Мой отредактированный ответ. –

+0

макет не просто как одна из фотографий, больше, когда вы нажимаете на раздел цвета «серый», поскольку кнопка не охватывает всю линию, но частично[email protected] –

-1

Благодаря @Priyank и @atabek это реле помогло мне

, когда я завершил этот код он работал отлично, за исключением случае пункт щелчка и не показывая выбранный пункт для этого я сделал небольшие изменения

в макете ExpandableListView я добавил listSelector (http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:listSelector)

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

и в деятельности вместо создания щелчка слушателя NavigationView изменен expandableList (http://developer.android.com/reference/android/widget/ExpandableListView.OnChildClickListener.html)

------ 
------ 
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; 
       } 
      }); 
    */ 
} 
------ 
------ 
1

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

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

list_submenu.xml

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

listheader.xml

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

activity_main.xml

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

Надеется, что это будет работать, и некоторые другие файлы в этом примере ... Я думаю, что вы можете решить эти вопросы ... Это будет выглядеть, как вы хотели ...

Смежные вопросы