I'm assuming you are setting the listener in the getView() method? I had a similar problem with toggle buttons in children for an expandable list view. I solved this by storing the view (buttons in my case) in a sparse array, and only setting the listeners once, when the value was null for that key.
private SparseArray<ToggleButton> buttons1;
private SparseArray<ToggleButton> buttons2;
...
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View view, ViewGroup parent)
{
...
if(buttons1.get(groupPosition, null) == null)
{
//add favoriteButton to array at group position
buttons2.put(groupPosition, b2);
buttons1.put(groupPosition, b1);
b2.setOnClickListener( new OnClickListener()
{
@Override
public void onClick(View v)
{
//...
}
});
b1.setOnClickListener( new OnClickListener()
{
@Override
public void onClick(View v)
{
//...
}
});
}
//add buttons to array at group position
buttons2.put(groupPosition, b2);
buttons1.put(groupPosition, b1);
return view;
}
b1 and b2 are toggle buttons found by id earlier in the code.