Il est difficile de répondre sans code présenté dans votre question, mais idée peut être la suivante:
- Dans votre adaptateur, maintenir la liste des enfants clicked ';
- Dans
getChildView()
vérifier si les éléments sont cliqués et définir l'image d'arrière-plan appropriée;
code exemple regarderait les éléments suivants:
// for ViewHolder pattern
private static class ViewHolder {
// Child item views
public Button button;
public long combinedId;
}
private static class ExpandableAdapter extends BaseExpandableListAdapter implements View.OnClickListener {
private LongSparseArray<Boolean> mClickedItems = new LongSparseArray<Boolean>();
@Override
public View getChildView(final int groupPosition, final int childPosition, final boolean isLastChild, final View convertView, final ViewGroup parent) {
View view = convertView;
ViewHolder holder = null;
if (view == null) {
// Inflate child view
holder = new ViewHolder();
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.combinedId = getCombinedChildId(groupPosition, childPosition);
holder.button.setOnClickListener(this);
if (mClickedItems.get(holder.combinedId, false)) {
holder.button.setBackgroundResource(R.drawable.not_clicked_background);
} else {
holder.button.setBackgroundResource(R.drawable.clicked_background);
}
return null;
}
@Override
public void onClick(final View v) {
final long id = ((ViewHolder)v.getTag()).combinedId;
Boolean clicked = mClickedItems.get(id);
if (clicked == null) {
clicked = true;
} else {
clicked = !clicked;
}
mClickedItems.append(id, clicked);
}
// Rest of adapter
}
De plus, il pourrait être préférable d'utiliser ToogleButton
au lieu de bouton normal.