77

I would like to expand all children while the expandable list view is populated. Currently my code looks like this:

ExpandableListView listView = (ExpandableListView) findViewById(R.id.view);
int count = viewAdapted.getGroupCount();
for (int position = 1; position <= count; position++)
    listView.expandGroup(position - 1);

which is pretty ugly. Is there a nicer way to do this?

Drejc
  • 14,196
  • 16
  • 71
  • 106

5 Answers5

79

You can expand it in getGroupView in your custom adapter:

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    View v = super.getGroupView(groupPosition, isExpanded, convertView, parent);
    ExpandableListView mExpandableListView = (ExpandableListView) parent;
    mExpandableListView.expandGroup(groupPosition);
    return v;
}

Gluck!

Justin
  • 4,400
  • 2
  • 32
  • 36
  • 14
    this makes them unclickable – David Lawson Nov 13 '13 at 05:35
  • 2
    @DavidLawson: yep, my sollution is fixed-expand them. If you wana expand them and they are clickable, you have to handle that where ExpandableListView is created, like Drejc's sollution. – Justin Jan 17 '14 at 09:44
39

putting this code on your adapter will make the expandlist to stay open, and disables its closing function.

ExpandableListView mExpandableListView = (ExpandableListView) parent;
mExpandableListView.expandGroup(groupPosition);

this may be a little work around but works how it should be. It opens all group ( at start ) and can be close any time

 for ( int i = 0; i < groupList.getCount(); i++ ) {
    groupList.expandGroup(i);
 } 

NOTE : put this code after setting adapter on your expandable view, or else it may cause error. Hope it helps.

ralphgabb
  • 10,298
  • 3
  • 47
  • 56
  • It doesnt matter where you put this code, before or after `setAdapter`. But you should put that after your set your data for adapter. This makes sens if you sets adapter and then loads your data over a network – Anatolii Shuba Aug 01 '21 at 19:36
8

first fill the adapter than put this code in your oncreate method

   int count = adapter.getGroupCount();
                for ( int i = 0; i < count; i++ ) 
                    listView.expandGroup(i);
Jatin Devani
  • 190
  • 3
  • 15
7

Expanding all groups

for(int i=0; i < myAdapter.getGroupCount(); i++)
    myExpandableListView.expandGroup(i);

if you wish to make them unCollapseable.

myExpandableListView.setOnGroupClickListener(new OnGroupClickListener() {
  @Override
  public boolean onGroupClick(ExpandableListView parent, View v,int  groupPosition, long id) { 
    return true; 
  }
});
1

I have tried the responses listed but i found that i can use the getGroupCount() method to get the number of groups.

Using this method i can iterate and expand every group of my ExpandableListView

for (int i = 0; i < myExpandableListView.getExpandableListAdapter().getGroupCount(); i++) {
      //Expand group
      myExpandableListView.expandGroup(i);
 }
Jorgesys
  • 124,308
  • 23
  • 334
  • 268