A question about ExpandableListViews on Android

Posted on 2011-03-08
Last Modified: 2012-05-11

       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 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!
Question by:errang
  • 2
  • 2
LVL 17

Expert Comment

by:Dejan Pažin
ID: 35082860

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.

Author Comment

ID: 35083269
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.
LVL 17

Accepted Solution

Dejan Pažin earned 500 total points
ID: 35083992

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


Author Closing Comment

ID: 35090328
Ah, sweet, Thanks =)

Would'v been happy with just an explanation of how the Constructors worked though =)

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Contacts & Calendars Synchronization 4 83
Xamarin 10 44
saving voicemail from mobile phone to pc.. 4 35
Trouble downloading purchased app on Samsung Galaxy S4 3 12
I recently asked a question ( about Computer Inventory applications for Mobile Devices.  I was specifically interested in an app I could use on my android phone.  The be…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
This video is in connection to the article "The case of a missing mobile phone (". It will help one to understand clearly the steps to track a lost android phone.
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at

914 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now