web-dev-qa-db-fra.com

Comment ajouter trois niveaux ListView dans ExpandableListView dans Android

Je veux ajouter un niveau supplémentaire dans ExpandableListView.In Current ExpandableListView est à deux niveaux. Comment puis-je ajouter un niveau supplémentaire? Je suis nouveau dans le développement d'Android s'il vous plaît aidez-moi. Merci d'avance! 

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

Mon ExpandableListAdapter.Java est ici: -

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

Mon activité_main.xml est ici: -

<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>
14
Anand Jain

Vous pouvez essayer mon exemple de code suivant. J'ai posté mon projet complet sur GitHub

Bien entendu, vous devez en modifier davantage pour répondre à toutes vos exigences. Pour les cas simples, j'utilise uniquement la source de données dans le fichier arrays.xml. J'espère que cela t'aides!

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

Capture d'écran résultat:

 Three-level expandable listview

15
BNK

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

}
}
5
DroidAks

Dans ce cas, vous devez créer votre propre classe extensible.

Reportez-vous à ce lien . http://androidcodesnips.blogspot.in/2011/09/three-level-expandable-list.html

3
Bhavin Shah

Créez un autre adaptateur de liste extensible étendant BaseExpandableListAdapter et, dans votre ExpandableListAdapter getChildView (), appelez le nouvel adaptateur de liste extensible.

J'ai mis en place le même en utilisant le lien suivant: https://github.com/talhahasanzia/Three-Level-Expandable-Listview

0
Monika Moon