L'auditeur OnCheckChange ne fonctionne que pour la première case à cocher dans un listview personnalisé

StackOverflow https://stackoverflow.com/questions/9306726

Question

L'auditeur pour case à cocher dans mon listview personnalisé ne fonctionne que pour la première case à cocher. Je pense que cela a quelque chose à voir avec la position dans getView (). Je joins mon code avec cette question s'il vous plaît me suggérer un travail autour de ce problème.

 public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;  
    LayoutInflater inflater =  context.getLayoutInflater();  
    if(convertView==null)  
    {  
        convertView = inflater.inflate(R.layout.custom_list, null);
        holder = new ViewHolder();  
        holder.txtViewTitle = (TextView) convertView.findViewById(R.id.title_text);  
        holder.txtViewDescription = (TextView)convertView.findViewById(R.id.description_text);  
        holder.cb=(CheckBox) convertView.findViewById(R.id.cb);
        convertView.setTag(holder);  
        holder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
           String Channel=holder.txtViewTitle.getText().toString();
           @Override
           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
             if(position==0)
             {
                //works 
             }
             else
             if(position==1)
             { 
               //doesn't work
             }
        });
    }  
    else  
    {
        holder=(ViewHolder)convertView.getTag();  
    }  

    holder.txtViewTitle.setText(title[position]);  
    holder.txtViewDescription.setText(description[position]);  
    holder.txtViewDescription.setFocusable(false);
    holder.txtViewTitle.setFocusable(false);

    return convertView;  
}  
Était-ce utile?

La solution

convertView est un modèle pour chaque élément et seulement au premier null appel, vous devez ajouter l'écouteur pour chaque élément comme ceci:

public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolder holder;  
LayoutInflater inflater =  context.getLayoutInflater();  
if(convertView==null)  
{  
    convertView = inflater.inflate(R.layout.custom_list, null);
    holder = new ViewHolder();  
    holder.txtViewTitle = (TextView) convertView.findViewById(R.id.title_text);  
    holder.txtViewDescription = (TextView)    
    convertView.findViewById(R.id.description_text);  
    holder.cb=(CheckBox) convertView.findViewById(R.id.cb);
    convertView.setTag(holder);  

} else  {
    holder=(ViewHolder)convertView.getTag();  
 }  
holder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  String Channel=holder.txtViewTitle.getText().toString();
  @Override
  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
     // TODO Auto-generated method stub
     if(position==0)
       {
        //works 
       }else if(position==1){ 
          //doesn't work
       }
   });
holder.txtViewTitle.setText(title[position]);  
holder.txtViewDescription.setText(description[position]);  
holder.txtViewDescription.setFocusable(false);
holder.txtViewTitle.setFocusable(false);
return convertView;  
} 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top