2017-08-18 13 views
0

Je suis nouveau à android et de travailler sur la démo web view, je l'ai mis en œuvre. Mais le problème avec moi est lorsque je coche une case à cocher et en faisant défiler la liste, la position vérifiée change.ListView personnalisé avec la case à cocher change la position tout en faisant défiler dans android

J'ai essayé quelques liens de la pile sur le flux sans chance, je demande donc que quelqu'un peut me aider à résoudre ce problème, s'il vous plaît Mon adaptateur est comme ci-dessous,

adaptateur

public class FilterAdapter extends BaseAdapter { 

     private static final int TYPE_ITEM = 0; 
     private static final int TYPE_SEPARATOR = 1; 
     private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1; 

     private ArrayList<String> mData = new ArrayList<String>(); 
     private LayoutInflater mInflater; 

     private TreeSet<Integer> mSeparatorsSet = new TreeSet<Integer>(); 

     public FilterAdapter(Context context) { 
      mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 

     public void addItem(final String item) { 
      mData.add(item); 
      notifyDataSetChanged(); 
     } 

     public void addSeparatorItem(final String item) { 
      mData.add(item); 
      // save separator position 
      mSeparatorsSet.add(mData.size() - 1); 
      notifyDataSetChanged(); 
     } 

     @Override 
     public int getItemViewType(int position) { 
      return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM; 
     } 

     @Override 
     public int getViewTypeCount() { 
      return TYPE_MAX_COUNT; 
     } 

     public int getCount() { 
      return mData.size(); 
     } 

     public String getItem(int position) { 
      return mData.get(position); 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder = null; 
      int type = getItemViewType(position); 
      System.out.println("getView " + position + " " + convertView + " type = " + type); 

      if (convertView == null) { 
       holder = new ViewHolder(); 
       switch (type) { 
        case TYPE_ITEM: 
         convertView = mInflater.inflate(R.layout.raw_filter, null); 
         holder.textView = (TextView) convertView.findViewById(R.id.tv_filter); 
         holder.chk_filter = (CheckBox) convertView.findViewById(R.id.chk_filter); 
         break; 
        case TYPE_SEPARATOR: 
         convertView = mInflater.inflate(R.layout.raw_headr, null); 
         holder.textView = (TextView) convertView.findViewById(R.id.tv_hdr); 
         break; 
       } 
       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      holder.textView.setText(mData.get(position)); 
      return convertView; 
     } 

} 

class ViewHolder { 
    public TextView textView; 
    public CheckBox chk_filter; 
} 
+0

https://stackoverflow.com/questions/35552911/onscroll-selected-checkbox-getting-unchecked-using-listiview –

Répondre

0

ajouter clickListener dans votre méthode getView(), il corrigera votre case cochée définie dans tout listView comme ceci:

checkBoxSelected.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       instrumentClickListener.onCheckBoxClick(instrumentDTO, checkBoxSelected.isChecked(), position); 
       Log.d(TAG, "checked instruments is check: " + checkBoxSelected.isChecked() + " \ninstrument: " + position); 
      } 
     });