In an ExpandableListView, how to detect the group collapsing?

11,730

Solution 1

I've faced a somewhat similar problem. I needed all groups to always be expanded and clickable. To make it work, I wrote this monkey-code in my ExpandableListActivity:

public void onCreate(Bundle savedInstanceState) {
    ...
    // Expanding all.
    for(int i = 0; i < adapter.getGroupCount(); i++)
        getExpandableListView().expandGroup(i);
    ...
}

@Override
public boolean onGroupClick(ExpandableListView parent, View v,
        int groupPosition, long id) {
    overrideStupidListBehaviour(groupPosition);
    return false;
}

@Override
public void onGroupCollapse(int groupPosition) {
    // Forbidding it to collapse.
    getExpandableListView().expandGroup(groupPosition);
    overrideStupidListBehaviour(groupPosition);
}

private void overrideStupidListBehaviour(int groupPosition) {
    // Code to do when onGroupClick is called
}

I'm really interested, if there is a normal way to do that.

Solution 2

// 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();

}});

Solution 3

its very simple using this way

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
                         View convertView, ViewGroup parent) {

if(isExpanded){
//do something when expanded

}else{
//do something when collapsed or not expanded

}
...........
}
Share:
11,730
Carbodrache
Author by

Carbodrache

Updated on June 25, 2022

Comments

  • Carbodrache
    Carbodrache almost 2 years

    In my expandableListView I've made a custom button to expand/collapse the group and for expanding it works, but when collapsing no.

    with this code

    listView.setOnGroupClickListener(new OnGroupClickListener() {
    
                @Override
                public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                    Log.d("group click");
                    return true;
                }
            });
    
            listView.setOnGroupCollapseListener(new OnGroupCollapseListener() {
    
                @Override
                public void onGroupCollapse(int groupPosition) {
                    Log.d("group collapse");
    
                }
            });
    
            listView.setOnGroupExpandListener(new OnGroupExpandListener() {
    
                @Override
                public void onGroupExpand(int groupPosition) {
                    Log.d("group expand");
                }
            });
    

    With this code: when group is collapsed:

    • clicking on button = expand the group
    • clicking anywhere else on the group = do something handle by setOnGroupClickListener

    when group is expanded:

    • clicking on button = collapse the group (ok but...)
    • clicking anywhere else on the group = collapse the group and not reaction from setOnGroupClickListener

    Why setOnGroupClickListener is not loaded when I click on an expanded group ? How to solve that ?