2012-05-30 2 views
1

mon problème est que j'ai un listview avec des cases à cocher la visibilité a disparu quand le bouton d'effacement est sélectionné les cases à cocher deviennent évidentes je suis en train de vérifier les états de checkboxes mais le problème est que checkChange() travailler à mettre en état, mais quand mon avis recylces encore setChecked aux Etats magasins et appelle à nouveau mon onCheckChanged et je ne sais pas pourquoi quand je Revient il ne marche pas jusqu'à restaurer mes états vérifiés ... ceci est mon coderecyclage getView oublie les états d'affichage

public View getView(int position,View convertView,ViewGroup parent) 
    { 
     final int currentPosition=position; 

     View row=convertView; 

     if(row==null) 
     { 
      LayoutInflater inflater=((Activity)context).getLayoutInflater(); 
      row=inflater.inflate(layoutResourceId, parent,false); 
      holder=new Feedbacks(); 
      holder.lvGuestName=(TextView)row.findViewById(R.id.guestName); 
      holder.checkBox=(CheckBox)row.findViewById(R.id.clearCheck); 


      row.setTag(holder); 

     }  
     else 
     {    
      holder=(Feedbacks)row.getTag();    
     } 

     if(showCheckbox) 
     { 
      holder.checkBox.setVisibility(View.VISIBLE);   
     } 
     else 
     { 
      holder.checkBox.setVisibility(View.GONE); 
     } 
     holder.lvGuestName.setText(feedbackList.get(position).getGuestName());   
     holder.checkBox.setChecked(checks.get(position)); 
     holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() 
     { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
      { 
       if(isChecked) 
       { 
        checks.put(currentPosition, true); 

       } 
       else 
       { 
        checks.put(currentPosition, false);    
       } 

      }     

     }); 
     return row;          

    } 

Répondre

0

Essayez d'utiliser ceci.

holder.checkBox.setTag(position); 

holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
     { 
      Integer currentPosition = Integer.parseInt(buttonView.getTag().toString()); 
      if(isChecked) 
      { 
       checks.put(currentPosition, true); 

      } 
      else 
      { 
       checks.put(currentPosition, false);    
      } 

     }     

    }); 

De même, il n'est pas nécessaire d'utiliser une nouvelle vue "rangée". Réutilisez convertView au lieu de row et renvoyez-le. Vous gaspillez de la mémoire en utilisant une vue ici. Il suffit donc de réutiliser convertView.

+0

j'avais résolu cela ... de toute façon merci –