2014-05-07 1 views
0

Maintenant, je travaille avec ExpandableListview dans android. Dans ExpabdableListview, GroupHeader contient une vue de texte. et enfant contiennent une vue de texte et un bouton. Dans Button j'ai l'étoile blanche setbackground.Changer l'icône dans la liste d'enfants de Expandabllistview lorsque l'icône onClick dans android

J'ai également utilisé la classe BaseExpandableListAdapter pour définir les données dans expandelistelist.

Ma question

quand cliquez en particulier bouton liste des enfants que le temps que le bouton de changement de fond. Blanc à jaune.

S'il vous plaît l'un ont l'idée de changer la couleur du bouton spécifique?

Merci d'avance.

Répondre

0

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.