views:

481

answers:

2

I have created an expandable list in my Android application using the SimpleExpandableListAdapter type. But I'm at a complete loss as to how I detect events when one of the child entries has been selected/clicked.

I've tried all the usual OnClickListener/OnChildClickListener etc, but can't seem to find (by experimentation, or half an hour googling) what the correct handler routines should be.

Any help greatfully appreciated.

+1  A: 

It should be:

list.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
    public void onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
        Object o = (Object)adapter.getChild(groupPosition, childPosition);
        // perform work on child object here
    }
}  

Though, it sounds like you tried this... ExpandableListView.OnChildClickListener says that it is, in fact, the way to do it.

Also, have you defined the methods allItemsAreEnabled() and/or isEnabled() for your ListAdapter? You shouldn't have to, but maybe they are currently defined and returning the wrong values?

synic
I turned out that I could just declare onClick without registering the object via a setOn... function. Which seems to be different to all the other classes I have used so far.
DaveG
+1  A: 

Also...

If you happen to be using a class that extends BaseExpandableListAdapter then their is a default implemented method you'll have to set the return boolean for.

    @Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    // TODO Auto-generated method stub
    return true;
}

By default this method is returning false, swap to true(if this is the case) and your OnChildClickListener should start resolving correctly.

JLB