How to add data to the Expandable listview with child having multiple views
02:28 27 Sep 2013

I referred this tutorial for expandable listview

http://www.androidhive.info/2013/07/android-expandable-list-view-tutorial/

My main activity

  BusActivity extends Activity {

ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List listDataHeader;
HashMap> listDataChild,listDataStart,listDataEnd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
            // get the listview
    expListView = (ExpandableListView) findViewById(R.id.lvExp);



    // preparing list data
    prepareListData();

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

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

    // Listview Group click listener
    expListView.setOnGroupClickListener(new OnGroupClickListener() {

        @Override
        public boolean onGroupClick(ExpandableListView parent, View v,
                int groupPosition, long id) {
            // Toast.makeText(getApplicationContext(),
            // "Group Clicked " + listDataHeader.get(groupPosition),
            // Toast.LENGTH_SHORT).show();
            return false;
        }
    });

    // Listview Group expanded listener
    expListView.setOnGroupExpandListener(new OnGroupExpandListener() {

        @Override
        public void onGroupExpand(int groupPosition) {
            Toast.makeText(getApplicationContext(),
                    listDataHeader.get(groupPosition) + " Expanded",
                    Toast.LENGTH_SHORT).show();
        }
    });

    // Listview Group collasped listener
    expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

        @Override
        public void onGroupCollapse(int groupPosition) {
            Toast.makeText(getApplicationContext(),
                    listDataHeader.get(groupPosition) + " Collapsed",
                    Toast.LENGTH_SHORT).show();

        }
    });

    // Listview on child click listener
    expListView.setOnChildClickListener(new OnChildClickListener() {

        @Override
        public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id) {
            // TODO Auto-generated method stub
            Toast.makeText(
                    getApplicationContext(),
                    listDataHeader.get(groupPosition)
                            + " : "
                            + listDataChild.get(
                                    listDataHeader.get(groupPosition)).get(
                                    childPosition), Toast.LENGTH_SHORT)
                    .show();
            return false;
        }
    });
}

/*
 * Preparing the list data
 */
private void prepareListData() {
    listDataHeader = new ArrayList();
    listDataChild = new HashMap>();
    listDataStart = new HashMap>();
    listDataEnd = new HashMap>();
    // Adding child data
    listDataHeader.add("Volvo");
    listDataHeader.add("Deluxe");
    listDataHeader.add("Express");
    listDataHeader.add("Ordinary");
    // Adding child data
    List volvo = new ArrayList();
    volvo.add("The Shawshank Redemption");
    volvo.add("The Godfather");
    volvo.add("The Godfather: Part II");
    volvo.add("Pulp Fiction");


    List nowShowing = new ArrayList();
    nowShowing.add("The Conjuring");
    nowShowing.add("Despicable Me 2");
    nowShowing.add("Turbo");
    nowShowing.add("Grown Ups 2");

            List now = new ArrayList();
    now.add("The Conjuring");
    now.add("Despicable Me 2");
    now.add("Turbo");
    now.add("Grown Ups 2");

    List comingSoon = new ArrayList();
    comingSoon.add("2 Guns");
    comingSoon.add("The Smurfs 2");
    comingSoon.add("The Spectacular Now");
    comingSoon.add("The Canyons");


    List comingup = new ArrayList();
    comingup.add("2 Guns");
    comingup.add("The Smurfs 2");
    comingup.add("The Spectacular Now");
    comingup.add("The Canyons");


    listDataChild.put(listDataHeader.get(0), volvo); // Header, Child data
    listDataChild.put(listDataHeader.get(1), now);

    listDataStart.put(listDataHeader.get(0), nowShowing); // Header, Child data
    listDataStart.put(listDataHeader.get(1), comingup);
    );
    listDataEnd.put(listDataHeader.get(0), volvo); // Header, Child data
    listDataEnd.put(listDataHeader.get(2), comingSoon);

}

}

My Adapter

public class ExpandableListAdapter extends BaseExpandableListAdapter {

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

public ExpandableListAdapter(Context context, List listDataHeader,
        HashMap> listChildData,HashMap> listStart, HashMap> listEnd) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    System.out.println("Start"+listStart+"Bus"+listChildData+"End"+listEnd);
    this._listDataChild = listChildData;
    this.listStart=listStart;
    this.listEnd=listEnd;
}

@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);
    System.out.println("Child Text"+childText);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_item, null);

    }

    TextView txtListBus= (TextView) convertView
            .findViewById(R.id.txt_busno);
    if(groupPosition==0)
    {
        //txtListBus.setBackgroundColor(Color.parseColor("#FED966"));
        //txtListBus.setTextColor(Color.parseColor("#A07900"));
    }
    else if(groupPosition==1)
    {
        txtListBus.setBackgroundColor(Color.parseColor("#FED966"));
        txtListBus.setTextColor(Color.parseColor("#A07900"));
    }
    else if(groupPosition==2)
    {
        txtListBus.setBackgroundColor(Color.RED);
        txtListBus.setTextColor(Color.BLACK);
    }
    else
    {
        txtListBus.setBackgroundColor(Color.BLUE);
        txtListBus.setTextColor(Color.WHITE);

    }
    txtListBus.setText(childText);
    TextView txtList= (TextView) convertView
            .findViewById(R.id.txt_start);
    if(groupPosition==0)
    {
        txtList.setBackgroundColor(Color.parseColor("#FED966"));
        txtList.setTextColor(Color.parseColor("#A07900"));
    }
    else if(groupPosition==1)
    {
        txtList.setBackgroundColor(Color.parseColor("#64D8CD"));
        txtList.setTextColor(Color.parseColor("#067B6F"));
    }
    else if(groupPosition==2)
    {
        txtList.setBackgroundColor(Color.RED);
        txtList.setTextColor(Color.BLACK);
    }
    else
    {
        txtList.setBackgroundColor(Color.BLUE);
        txtList.setTextColor(Color.WHITE);
    }
    txtList.setText(childText);
    TextView txt= (TextView) convertView
            .findViewById(R.id.txt_end);
    if(groupPosition==0)
    {
        txt.setBackgroundColor(Color.parseColor("#FED966"));
        txt.setTextColor(Color.parseColor("#A07900"));
    }
    else if(groupPosition==1)
    {
        txt.setBackgroundColor(Color.parseColor("#64D8CD"));
        txt.setTextColor(Color.parseColor("#067B6F"));
    }
    else if(groupPosition==2)
    {
        txt.setBackgroundColor(Color.RED);
        txt.setTextColor(Color.BLACK);
    }
    else
    {
        txt.setBackgroundColor(Color.BLUE);
        txt.setTextColor(Color.WHITE);
    }

    txt.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);
    System.out.println("Group position"+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.ls_head);
    lblListHeader.setTypeface(null, Typeface.BOLD);
    lblListHeader.setText(headerTitle);
    if(groupPosition==0)
    {
        lblListHeader.setBackgroundColor(Color.parseColor("#FFD243"));
        lblListHeader.setTextColor(Color.parseColor("#A07900"));
    }
    else if(groupPosition==1)
    {
        lblListHeader.setBackgroundColor(Color.parseColor("#00BFAC"));
        lblListHeader.setTextColor(Color.parseColor("#067B6F"));
    }
    else if(groupPosition==2)
    {
        lblListHeader.setBackgroundColor(Color.RED);
        lblListHeader.setTextColor(Color.BLACK);
    }
    else
    {
        lblListHeader.setBackgroundColor(Color.BLUE);
        lblListHeader.setTextColor(Color.WHITE);
    }

    return convertView;
}

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

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

}

list_item layout






    

    

        

    

    


list_group remains same as the link

In this the child list have only a textview. I want to add an imageview and a textview to the child list. I am able to add this by changing the list_item.xml to contain the views. How can i add data to this child view that has multiple views?

android expandablelistview