开发者

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");
           开发者_如何学Python }
        });

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 ?


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.


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

}});


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

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


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜