Carbodrache
Carbodrache

Reputation: 261

In an ExpandableListView, how to detect the group collapsing?

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:

when group is expanded:

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

Upvotes: 6

Views: 11827

Answers (4)

Jani
Jani

Reputation: 77

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

}
...........
}

Upvotes: 1

D-D
D-D

Reputation: 966

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

}});

Upvotes: 1

A. Binzxxxxxx
A. Binzxxxxxx

Reputation: 2871

if you click on a group it should be called every time, but if your button or something other clickable or focusable is over/in the group view it will only trigger the onClick method of the object on top of the others... if this is not the solution please provide more code.

@folone there is a better way:

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

return true should cancel most default stuff -> expand/collapse

Upvotes: 0

George
George

Reputation: 8378

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.

Upvotes: 1

Related Questions