9

Chcę dodać jeszcze jeden poziom w ExpandableListView.In current ExpandableListView to dwa poziomy, w jaki sposób mogę dodać jeszcze jeden poziom. Jestem nowy w rozwoju Androida, pomóż mi. Z góry dziękuję!Jak dodać listView 3 poziomu w ExpandableListView w Androidzie

My MainActivity.java:-

private Toolbar mToolbar; 
ExpandableListAdapter listAdapter; 
ExpandableListView expListView; 
List<String> listDataHeader; 
HashMap<String, List<String>> listDataChild; 

// private FragmentDrawer drawerFragment; 
ArrayList<String> arraylist1,arraylist2,arraylist3,arrayList4,arrayList5; 
int cnt = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mToolbar = (Toolbar) findViewById(R.id.toolbar); 

    setSupportActionBar(mToolbar); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 

    expListView = (ExpandableListView) findViewById(R.id.lvExp); 

    // preparing list data 
    prepareListData(); 

    listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild); 

    // setting list adapter 
    expListView.setAdapter(listAdapter); 

    /*  drawerFragment = (FragmentDrawer) 
      getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
    drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar); 
    drawerFragment.setDrawerListener(this);*/ 
    // display the first navigation drawer view on app launch 
    //  displayView(0); 
    Log.d("oncreate method", ""); 
    arraylist1 = new ArrayList<String>(); 
    arraylist2 = new ArrayList<String>(); 
    arraylist3 = new ArrayList<String>(); 
    arrayList4 = new ArrayList<String>(); 
    arrayList5 = new ArrayList<String>(); 
    new ProductsAsynTask().execute("http://opencart.codeniques.com/shopping/?route=feed/web_api/menu&key=test123$"); 


} 
private void prepareListData() { 
    listDataHeader = new ArrayList<String>(); 
    listDataChild = new HashMap<String, List<String>>(); 


    // Adding child data 
    listDataHeader.add("Top 250"); 
    listDataHeader.add("Now Showing"); 
    listDataHeader.add("Coming Soon.."); 

    // Adding child data 
    List<String> top250 = new ArrayList<String>(); 
    top250.add("The Shawshank Redemption"); 
    top250.add("The Godfather"); 
    top250.add("The Godfather: Part II"); 
    top250.add("Pulp Fiction"); 
    top250.add("The Good, the Bad and the Ugly"); 
    top250.add("The Dark Knight"); 
    top250.add("12 Angry Men"); 

    List<String> nowShowing = new ArrayList<String>(); 
    nowShowing.add("The Conjuring"); 
    nowShowing.add("Despicable Me 2"); 
    nowShowing.add("Turbo"); 
    nowShowing.add("Grown Ups 2"); 
    nowShowing.add("Red 2"); 
    nowShowing.add("The Wolverine"); 

    List<String> comingSoon = new ArrayList<String>(); 
    comingSoon.add("2 Guns"); 
    comingSoon.add("The Smurfs 2"); 
    comingSoon.add("The Spectacular Now"); 
    comingSoon.add("The Canyons"); 
    comingSoon.add("Europa Report"); 

    listDataChild.put(listDataHeader.get(0), top250); // Header, Child data 
    listDataChild.put(listDataHeader.get(1), nowShowing); 
    listDataChild.put(listDataHeader.get(2), comingSoon); 
} 

public class ProductsAsynTask extends AsyncTask<String,Void,Void>{ 

    ProgressDialog dialog; 

    protected void onPreExecute(){ 
     super.onPreExecute(); 
     Log.d("In onPreExceute",""); 
     dialog = new ProgressDialog(MainActivity.this); 
     dialog.setMessage("Loading, Please wait"); 
     dialog.setTitle("Connecting server"); 
     dialog.show(); 
     dialog.setCancelable(false); 
    } 

    protected Void doInBackground(String... param){ 
     try{ 
      Log.d("In doInBackground",""); 

      HttpClient client= new DefaultHttpClient(); 
      HttpPost post = new HttpPost(param[0]); 
      HttpResponse response = client.execute(post); 

      int status = response.getStatusLine().getStatusCode(); 

      if(status == 200){ 
       Log.d("Status",""+status); 

       HttpEntity entity = response.getEntity(); 
       String data = EntityUtils.toString(entity); 

       JSONObject jsonObject = new JSONObject(data); 
       JSONArray jArray = jsonObject.getJSONArray("categories"); 

       for(int i = 0;i < jArray.length();i++){ 
        cnt++; 
        Log.d("value of array",jArray.length()+""); 
        Log.d("Value of i",""+i); 

        JSONObject jsonObject1 = jArray.getJSONObject(i); 


        arraylist1.add(jsonObject1.getString("name")); 
        //data1 = jsonObject1.getString("name"); 
       //  Log.d("hello ",data1); 

        JSONArray jsonArray = jsonObject1.getJSONArray("children"); 
     //   JSONObject jsonObject2 = jsonObject1.getJSONObject("children"); 

        for(int j=0;j<jsonArray.length();j++){ 

         JSONObject jsonObject2 = jsonArray.getJSONObject(j); 

         arraylist2.add(jsonObject2.getString("name")); 
         // data2 = jsonObject2.getString("name"); 
         JSONArray jsonArray1 = jsonObject2.getJSONArray("children_lv3"); 

         for(int k=0;k<jsonArray1.length();k++){ 
          JSONObject jsonObject3 = jsonArray1.getJSONObject(k); 

          arraylist3.add(jsonObject3.getString("name")); 
          arrayList4.add(jsonObject3.getString("href")); 
          /* data3 = jsonObject3.getString("name"); 
          data4 = jsonObject3.getString("href"); */ 
         } 
         arrayList5.add(jsonObject2.getString("href")); 
         // data5 = jsonObject2.getString("href"); 
        } 
       } 

      } 
     }catch(IOException e){ 
      Log.e("Error IOException :",e.getMessage()); 
     }catch (JSONException e){ 
      Log.e("Error JSONException",e.getMessage()); 
     } 
      return null; 
    } 

    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     dialog.dismiss(); 
     Log.d("Counter value",""+cnt); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.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; 
    } 

    if(id == R.id.action_search){ 
     Toast.makeText(getApplicationContext(), "Search action is selected!", Toast.LENGTH_SHORT).show(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


/* public void onDrawerItemSelected(View view, int position) { 
    displayView(position); 
} 

private void displayView(int position) { 
    Fragment fragment = null; 
    String title = getString(R.string.app_name); 
    switch (position) { 
     case 0: 

      fragment = new HomeFragment(); 
      title = getString(R.string.title_home); 
      break; 
     case 1: 
      fragment = new FriendsFragment(); 
      title = getString(R.string.title_friends); 
      break; 
     case 2: 
      fragment = new MessagesFragment(); 
      title = getString(R.string.title_messages); 
      break; 
     default: 
      break; 
    } 

    if (fragment != null) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.container_body, fragment); 
     fragmentTransaction.commit(); 

     // set the toolbar title 
     getSupportActionBar().setTitle(title); 
    } 
}*/} 

Moja ExpandableListAdapter.java jest tutaj: -

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

private Context _context; 
private List<String> _listDataHeader; // header titles 
// child data in format of header title, child title 
private HashMap<String, List<String>> _listDataChild; 

public ExpandableListAdapter(Context context, List<String> listDataHeader, 
          HashMap<String, List<String>> listChildData) { 
    this._context = context; 
    this._listDataHeader = listDataHeader; 
    this._listDataChild = listChildData; 
} 

@Override 
public Object getChild(int groupPosition, int childPosititon) { 
    return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .get(childPosititon); 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    return childPosition; 
} 

@Override 
public View getChildView(int groupPosition, final int childPosition, 
         boolean isLastChild, View convertView, ViewGroup parent) { 

    final String childText = (String) getChild(groupPosition, childPosition); 

    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_item, null); 
    } 

    TextView txtListChild = (TextView) convertView 
      .findViewById(R.id.lblListItem); 

    txtListChild.setText(childText); 
    return convertView; 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return this._listDataHeader.get(groupPosition); 
} 

@Override 
public int getGroupCount() { 
    return this._listDataHeader.size(); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
         View convertView, ViewGroup parent) { 
    String headerTitle = (String) getGroup(groupPosition); 
    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_group, null); 
    } 

    TextView lblListHeader = (TextView) convertView 
      .findViewById(R.id.lblListHeader); 
    lblListHeader.setTypeface(null, Typeface.BOLD); 
    lblListHeader.setText(headerTitle); 

    return convertView; 
} 

@Override 
public boolean hasStableIds() { 
    return false; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    return true; 
}} 

Moja activity_main.xml jest tutaj: -

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/drawer_layout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 


<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:id="@+id/container_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <include 
      android:id="@+id/toolbar" 
      layout="@layout/toolbar" /> 


    </LinearLayout> 

    <FrameLayout 
     android:id="@+id/container_body" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 




</LinearLayout> 

<ExpandableListView 
    android:id="@+id/lvExp" 
    android:layout_height="match_parent" 
    android:layout_width="260dp" 
    android:layout_gravity="start"/> 
    <!-- <fragment 
    android:id="@+id/fragment_navigation_drawer" 
    android:name="com.android.ShoppingMazza.activity.ExpandableListAdapter" 
    android:layout_width="@dimen/nav_drawer_width" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    app:layout="@layout/fragment_navigation_drawer" 
    tools:layout="@layout/fragment_navigation_drawer" /> --> 
    </android.support.v4.widget.DrawerLayout> 

Odpowiedz

5

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <ExpandableListView 
    android:layout_width="fill_parent" 
    android:id="@+id/ParentLevel" 
    android:groupIndicator="@null" 
    android:layout_height="fill_parent"> 
    </ExpandableListView> 

</LinearLayout> 

MainActivity.Java

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.ExpandableListView; 
import android.widget.ListView; 

import android.widget.TextView; 

import android.widget.LinearLayout.LayoutParams; 


public class Home extends Activity 
{ 

ExpandableListView explvlist; 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    explvlist = (ExpandableListView)findViewById(R.id.ParentLevel); 
    explvlist.setAdapter(new ParentLevel()); 

} 

public class ParentLevel extends BaseExpandableListAdapter 
{ 

     @Override 
     public Object getChild(int arg0, int arg1) 
     { 
     return arg1; 
     } 

     @Override 
     public long getChildId(int groupPosition, int childPosition) 
     { 
     return childPosition; 
     } 

     @Override 
     public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) 
     { 
     CustExpListview SecondLevelexplv = new CustExpListview(Home.this); 
     SecondLevelexplv.setAdapter(new SecondLevelAdapter()); 
     SecondLevelexplv.setGroupIndicator(null); 
     return SecondLevelexplv; 
     } 

     @Override 
     public int getChildrenCount(int groupPosition) 
     { 
     return 3; 
     } 

     @Override 
     public Object getGroup(int groupPosition) 
     { 
     return groupPosition; 
     } 

     @Override 
     public int getGroupCount() 
     { 
     return 5; 
     } 

     @Override 
     public long getGroupId(int groupPosition) 
     { 
     return groupPosition; 
     } 

     @Override 
     public View getGroupView(int groupPosition, boolean isExpanded, 
     View convertView, ViewGroup parent) 
     { 
     TextView tv = new TextView(Home.this); 
     tv.setText("->FirstLevel"); 
     tv.setBackgroundColor(Color.BLUE); 
     tv.setPadding(10, 7, 7, 7); 

     return tv; 
     } 

    @Override 
    public boolean hasStableIds() 
    { 
    return true; 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) 
    { 
    return true; 
    }  
} 

public class CustExpListview extends ExpandableListView 
{ 

    int intGroupPosition, intChildPosition, intGroupid; 

     public CustExpListview(Context context) 
     { 
     super(context);  
     } 

     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
     { 
     widthMeasureSpec = MeasureSpec.makeMeasureSpec(960, MeasureSpec.AT_MOST); 
     heightMeasureSpec = MeasureSpec.makeMeasureSpec(600, MeasureSpec.AT_MOST); 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     } 
} 

public class SecondLevelAdapter extends BaseExpandableListAdapter 
{ 

    @Override 
    public Object getChild(int groupPosition, int childPosition) 
    { 
    return childPosition; 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) 
    { 
    return childPosition; 
    } 

    @Override 
    public View getChildView(int groupPosition, int childPosition, 
    boolean isLastChild, View convertView, ViewGroup parent) 
    { 
    TextView tv = new TextView(Home.this); 
    tv.setText("child"); 
    tv.setPadding(15, 5, 5, 5); 
    tv.setBackgroundColor(Color.YELLOW); 
    tv.setLayoutParams(new ListView.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
    return tv; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) 
    { 
    return 5; 
    } 

    @Override 
    public Object getGroup(int groupPosition) 
    { 
    return groupPosition; 
    } 

    @Override 
    public int getGroupCount() 
    { 
    return 1; 
    } 

    @Override 
    public long getGroupId(int groupPosition) 
    { 
    return groupPosition; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) 
    { 
     TextView tv = new TextView(Home.this); 
     tv.setText("-->Second Level"); 
     tv.setPadding(12, 7, 7, 7); 
     tv.setBackgroundColor(Color.RED);  
     return tv; 
    } 

@Override 
public boolean hasStableIds() 
{ 
    // TODO Auto-generated method stub 
    return true; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) 
{ 
    // TODO Auto-generated method stub 
    return true; 
} 

} 
} 
+0

W Twoim dziecięcym menu kodowym jest to samo W menu nadrzędnym –

13

Można spróbować mój poniższy kod przykładowy. Wysłałem swój pełny projekt pod numer GitHub

Oczywiście, należy zmodyfikować więcej, aby spełnić wszystkie wymagania. W przypadku podstawowym używam tylko źródła danych w pliku arrays.xml. Mam nadzieję że to pomoże!

arrays.xml:

<resources> 
    <string-array name="items_array_expandable_level_one"> 
     <item>Level 1.1</item> 
     <item>Level 1.2</item> 
     <item>Level 1.3</item> 
    </string-array> 
    <string-array name="items_array_expandable_level_one_one_child"> 
     <item>Level 1.1.1</item> 
     <item>Level 1.1.2</item> 
    </string-array> 
    <string-array name="items_array_expandable_level_one_two_child"> 
     <item>Level 1.2.1</item> 
    </string-array> 
    <string-array name="items_array_expandable_other_child"> 
     <item>Second Level 01</item> 
     <item>Second Level 02</item> 
     <item>Second Level 03</item> 
    </string-array> 
    <string-array name="items_array_expandable_level_three"> 
     <item>Child Level 01</item> 
     <item>Child Level 02</item> 
    </string-array> 
</resources> 

CustomExpListView.java:

public class CustomExpListView extends ExpandableListView 
{ 
    public CustomExpListView(Context context) 
    { 
     super(context); 
    } 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    { 
     widthMeasureSpec = MeasureSpec.makeMeasureSpec(960, MeasureSpec.AT_MOST); 
     heightMeasureSpec = MeasureSpec.makeMeasureSpec(600, MeasureSpec.AT_MOST); 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
} 

ParentLevelAdapter.java:

public class ParentLevelAdapter extends BaseExpandableListAdapter { 
    private final Context mContext; 
    private final List<String> mListDataHeader; 
    private final Map<String, List<String>> mListData_SecondLevel_Map; 
    private final Map<String, List<String>> mListData_ThirdLevel_Map; 
    public ParentLevelAdapter(Context mContext, List<String> mListDataHeader) { 
     this.mContext = mContext; 
     this.mListDataHeader = new ArrayList<>(); 
     this.mListDataHeader.addAll(mListDataHeader); 
     // Init second level data 
     String[] mItemHeaders; 
     mListData_SecondLevel_Map = new HashMap<>(); 
     int parentCount = mListDataHeader.size(); 
     for (int i = 0; i < parentCount; i++) { 
      String content = mListDataHeader.get(i); 
      switch (content) { 
       case "Level 1.1": 
        mItemHeaders = mContext.getResources().getStringArray(R.array.items_array_expandable_level_one_one_child); 
        break; 
       case "Level 1.2": 
        mItemHeaders = mContext.getResources().getStringArray(R.array.items_array_expandable_level_one_two_child); 
        break; 
       default: 
        mItemHeaders = mContext.getResources().getStringArray(R.array.items_array_expandable_other_child); 
      } 
      mListData_SecondLevel_Map.put(mListDataHeader.get(i), Arrays.asList(mItemHeaders)); 
     } 
     // THIRD LEVEL 
     String[] mItemChildOfChild; 
     List<String> listChild; 
     mListData_ThirdLevel_Map = new HashMap<>(); 
     for (Object o : mListData_SecondLevel_Map.entrySet()) { 
      Map.Entry entry = (Map.Entry) o; 
      Object object = entry.getValue(); 
      if (object instanceof List) { 
       List<String> stringList = new ArrayList<>(); 
       Collections.addAll(stringList, (String[]) ((List) object).toArray()); 
       for (int i = 0; i < stringList.size(); i++) { 
        mItemChildOfChild = mContext.getResources().getStringArray(R.array.items_array_expandable_level_three); 
        listChild = Arrays.asList(mItemChildOfChild); 
        mListData_ThirdLevel_Map.put(stringList.get(i), listChild); 
       } 
      } 
     } 
    } 
    @Override 
    public Object getChild(int groupPosition, int childPosition) { 
     return childPosition; 
    } 
    @Override 
    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 
    @Override 
    public View getChildView(int groupPosition, int childPosition, 
          boolean isLastChild, View convertView, ViewGroup parent) { 
     final CustomExpListView secondLevelExpListView = new CustomExpListView(this.mContext); 
     String parentNode = (String) getGroup(groupPosition); 
     secondLevelExpListView.setAdapter(new SecondLevelAdapter(this.mContext, mListData_SecondLevel_Map.get(parentNode), mListData_ThirdLevel_Map)); 
     secondLevelExpListView.setGroupIndicator(null); 
     return secondLevelExpListView; 
    } 
    @Override 
    public int getChildrenCount(int groupPosition) { 
     return 1; 
    } 
    @Override 
    public Object getGroup(int groupPosition) { 
     return this.mListDataHeader.get(groupPosition); 
    } 
    @Override 
    public int getGroupCount() { 
     return this.mListDataHeader.size(); 
    } 
    @Override 
    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 
    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
          View convertView, ViewGroup parent) { 
     String headerTitle = (String) getGroup(groupPosition); 
     if (convertView == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) this.mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.drawer_list_group, parent, false); 
     } 
     TextView lblListHeader = (TextView) convertView 
       .findViewById(R.id.lblListHeader); 
     lblListHeader.setTypeface(null, Typeface.BOLD); 
     lblListHeader.setTextColor(Color.CYAN); 
     lblListHeader.setText(headerTitle); 
     return convertView; 
    } 
    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 
    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } } 

SecondLevelAdapter.java:

public class SecondLevelAdapter extends BaseExpandableListAdapter 
{ 
    private final Context mContext; 
    private final List<String> mListDataHeader; 
    private final Map<String, List<String>> mListDataChild; 
    public SecondLevelAdapter(Context mContext, List<String> mListDataHeader, Map<String, List<String>> mListDataChild) { 
     this.mContext = mContext; 
     this.mListDataHeader = mListDataHeader; 
     this.mListDataChild = mListDataChild; 
    } 
    @Override 
    public Object getChild(int groupPosition, int childPosition) 
    { 
     return this.mListDataChild.get(this.mListDataHeader.get(groupPosition)) 
       .get(childPosition); 
    } 
    @Override 
    public long getChildId(int groupPosition, int childPosition) 
    { 
     return childPosition; 
    } 
    @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 layoutInflater = (LayoutInflater) this.mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.drawer_list_item, parent, false); 
     } 
     TextView txtListChild = (TextView) convertView 
       .findViewById(R.id.lblListItem); 
     txtListChild.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15); 
     txtListChild.setText(childText); 
     return convertView; 
    } 
    @Override 
    public int getChildrenCount(int groupPosition) 
    { 
     try { 
      return this.mListDataChild.get(this.mListDataHeader.get(groupPosition)).size(); 
     } catch (Exception e) { 
      return 0; 
     } 
    } 
    @Override 
    public Object getGroup(int groupPosition) 
    { 
     return this.mListDataHeader.get(groupPosition); 
    } 
    @Override 
    public int getGroupCount() 
    { 
     return this.mListDataHeader.size(); 
    } 
    @Override 
    public long getGroupId(int groupPosition) 
    { 
     return groupPosition; 
    } 
    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
          View convertView, ViewGroup parent) 
    { 
     String headerTitle = (String) getGroup(groupPosition); 
     if (convertView == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) this.mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.drawer_list_group_second, parent, false); 
     } 
     TextView lblListHeader = (TextView) convertView 
       .findViewById(R.id.lblListHeader); 
     lblListHeader.setText(headerTitle); 
     lblListHeader.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18); 
     lblListHeader.setTextColor(Color.YELLOW); 
     return convertView; 
    } 
    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 
    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 
} 

MainActivity.java:

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.content_main); 
     // Init top level data 
     List<String> listDataHeader = new ArrayList<>(); 
     String[] mItemHeaders = getResources().getStringArray(R.array.items_array_expandable_level_one); 
     Collections.addAll(listDataHeader, mItemHeaders); 
     ExpandableListView mExpandableListView = (ExpandableListView) findViewById(R.id.expandableListView_Parent); 
     if (mExpandableListView != null) { 
      ParentLevelAdapter parentLevelAdapter = new ParentLevelAdapter(this, listDataHeader); 
      mExpandableListView.setAdapter(parentLevelAdapter); 
     } 
    } 
} 

wynik Zrzut ekranu:

Three-level expandable listview

+0

Ta lista zawiera pełną szerokość listy poniżej w pasku narzędziowym –

+0

Oczywiście, jako zrzut ekranu, listę pod paskiem akcji, jeśli chcesz mieć ekran o pełnej wysokości, użyj NavigationView zamiast tego – BNK

+0

Okk i ja również chcę nadać wartość dynamiczna jak jest to możliwe? –