A question about ExpandableListViews on Android


       I'm trying to create an ExpandableListView, on the Android, I tried searching google for some tutorials... but didn't turn out with much success, the closest one I found was http://mylifewithandroid.blogspot.com/2008/05/expandable-lists.html but it wasn't much help.

What I'm trying to do, is create an ExpandableListView with only one parent, like:

|->Child 1
|->Child 2
|->Child 3

Is there a way to do this with ExpandableListView? Or am I looking at the wrong structure for this?

Appreciate any help on this!
Who is Participating?

Improve company productivity with a Business Account.Sign Up

Dejan PažinConnect With a Mentor Head of SW DevelopmentCommented:

Ok, here is a simpler example which I took from google site and adapetd to your needs a little - it shows the tree like you want it - with a single parent. This way you dont need any xml - besides the manifest of course, which runs the activity. The base code was taken from here:


import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;

 * Demonstrates expandable lists using a custom {@link ExpandableListAdapter}
 * from {@link BaseExpandableListAdapter}.
public class MyActivity extends ExpandableListActivity {

    ExpandableListAdapter mAdapter;

    public void onCreate(Bundle savedInstanceState) {

        // Set up our adapter
        mAdapter = new MyExpandableListAdapter();

    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("Sample menu");
        menu.add(0, 0, 0, "test");

    public boolean onContextItemSelected(MenuItem item) {
        ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();

        String title = ((TextView) info.targetView).getText().toString();

        int type = ExpandableListView.getPackedPositionType(info.packedPosition);
        if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
            int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
            int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);
            Toast.makeText(this, title + ": Child " + childPos + " clicked in group " + groupPos,
            return true;
        } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
            int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
            Toast.makeText(this, title + ": Group " + groupPos + " clicked", Toast.LENGTH_SHORT).show();
            return true;

        return false;

     * A simple adapter which maintains an ArrayList of photo resource Ids.
     * Each photo is displayed as an image. This adapter supports clearing the
     * list of photos and adding a new photo.
    public class MyExpandableListAdapter extends BaseExpandableListAdapter {
        // Sample data set.  children[i] contains the children (String[]) for groups[i].
        private String[] groups = { "Parent"};
        private String[][] children = {
                { "Child1", "Child2", "Child3", "etc..." }

        public Object getChild(int groupPosition, int childPosition) {
            return children[groupPosition][childPosition];

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

        public int getChildrenCount(int groupPosition) {
            return children[groupPosition].length;

        public TextView getGenericView() {
            // Layout parameters for the ExpandableListView
            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64);

            TextView textView = new TextView(MyActivity.this);
            // Center the text vertically
            textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
            // Set the text starting position
            textView.setPadding(36, 0, 0, 0);
            return textView;

        public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                View convertView, ViewGroup parent) {
            TextView textView = getGenericView();
            textView.setText(getChild(groupPosition, childPosition).toString());
            return textView;

        public Object getGroup(int groupPosition) {
            return groups[groupPosition];

        public int getGroupCount() {
            return groups.length;

        public long getGroupId(int groupPosition) {
            return groupPosition;

        public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                ViewGroup parent) {
            TextView textView = getGenericView();
            return textView;

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

        public boolean hasStableIds() {
            return true;


Open in new window

Dejan PažinHead of SW DevelopmentCommented:

Why is the link you posted no good? The picture in the link looks very much like your structure, so let us know why isnt it helpful.
errangAuthor Commented:
Well, one reason is that the code snippet didnt work for me for some odd reason, and I looked up the constructors for the class so I could understand it better, but that didn't help much either.

I mainly don't get how the constructors for this are structured, in terms of linking the XML files in the right places.
errangAuthor Commented:
Ah, sweet, Thanks =)

Would'v been happy with just an explanation of how the Constructors worked though =)
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.