Android ExpandableListView - Looking for a tutorial

AndroidExpandablelistview

Android Problem Overview


I'm trying to program an Android interface which uses an expandable list on the side and a fragment on the other side so I can load different resources by clicking on the children of the expandable list. But unfortunately I cannot find any good tutorials about this list anywhere. Yes I've look in the API demos and I've made a normal list with a BaseExpandableListAdapter but still, understanding those list well it's kinda hard without a good tutorial, do you have any good one around or info I could check?

Android Solutions


Solution 1 - Android

Create item list

List<ParentItem> itemList = new ArrayList<ParentItem>();

ParentItem parent1 = new ParentItem();
parent1.getChildItemList().add(new ChildItem());
parent1.getChildItemList().add(new ChildItem());
parent1.getChildItemList().add(new ChildItem());

ParentItem parent2 = new ParentItem();
parent2.getChildItemList().add(new ChildItem());
parent2.getChildItemList().add(new ChildItem());
parent2.getChildItemList().add(new ChildItem());

itemList.add(parent1);
itemList.add(parent2);

ExpandableListViewAdapter adapter = new ExpandableListViewAdapter(context, itemList); 

Data Objects

public class ParentItem {

        private List<ChildItem> childItemList;

        public ParentItem() {
                childItemList = new ArrayList<ChildItem>();
        }

        public List<ChildItem> getChildItemList() {
                return childItemList;
        }
}

public class ChildItem {
        // filll with your data
}

Adapter

public class ExpandableListViewAdapter extends BaseExpandableListAdapter {

        private static final class ViewHolder {
                TextView textLabel;
        }

        private final List<ParentItem> itemList;
        private final LayoutInflater inflater;

        public ExpandableListViewAdapter(Context context, List<ParentItem> itemList) {
                this.inflater = LayoutInflater.from(context);
                this.itemList = itemList;
        }

        @Override
        public ChildItem getChild(int groupPosition, int childPosition) {

                return itemList.get(groupPosition).getChildItemList().get(childPosition);
        }

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

        @Override
        public int getChildrenCount(int groupPosition) {
                return itemList.get(groupPosition).getChildItemList().size();
        }

        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
                                 final ViewGroup parent) {
                View resultView = convertView;
                ViewHolder holder;


                if (resultView == null) {

                        resultView = inflater.inflate(android.R.layout.test_list_item, null); //TODO change layout id
                        holder = new ViewHolder();
                        holder.textLabel = (TextView) resultView.findViewById(android.R.id.title); //TODO change view id
                        resultView.setTag(holder);
                } else {
                        holder = (ViewHolder) resultView.getTag();
                }

                final ChildItem item = getChild(groupPosition, childPosition);

                holder.textLabel.setText(item.toString());

                return resultView;
        }

        @Override
        public ParentItem getGroup(int groupPosition) {
                return itemList.get(groupPosition);
        }

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

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

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View theConvertView, ViewGroup parent) {
                View resultView = theConvertView;
                ViewHolder holder;

                if (resultView == null) {
                        resultView = inflater.inflate(android.R.layout.test_list_item, null); //TODO change layout id
                        holder = new ViewHolder();
                        holder.textLabel = (TextView) resultView.findViewById(android.R.id.title); //TODO change view id
                        resultView.setTag(holder);
                } else {
                        holder = (ViewHolder) resultView.getTag();
                }

                final ParentItem item = getGroup(groupPosition);

                holder.textLabel.setText(item.toString());

                return resultView;
        }

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

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

}

Gives you

==============================
+Parent 1
==============================
-child 1.1
==============================
-child 1.2
==============================
-child 1.3
==============================
+Parent 2
==============================
-child 2.1
==============================
-child 2.2
==============================
-child 2.3
==============================

Solution 2 - Android

you can find working example of the expandable list view by following links:

for click on child, you can handle this way.

getExpandableListView().setOnChildClickListener(new OnChildClickListener() {				
    public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id) { 
        // your code...
    }
});

Hope this will help you. Thanks..

Solution 3 - Android

This way you can handle events:

getExpandableListView().setOnChildClickListener(new OnChildClickListener() 
{               
    public boolean onChildClick(ExpandableListView parent, 
        View v, int groupPosition, int childPosition, long id) 
    { 
        // your code...
    }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDeX03View Question on Stackoverflow
Solution 1 - AndroidDmytro DanylykView Answer on Stackoverflow
Solution 2 - AndroidNever QuitView Answer on Stackoverflow
Solution 3 - AndroidKaushalView Answer on Stackoverflow