Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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:

  • 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 ?

like image 852
Carbodrache Avatar asked Apr 12 '11 20:04

Carbodrache


3 Answers

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.

like image 113
George Avatar answered Oct 02 '22 10:10

George


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

}});
like image 40
D-D Avatar answered Oct 02 '22 09:10

D-D


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

}
...........
}
like image 21
Jani Avatar answered Oct 02 '22 10:10

Jani