When scrolling custom ListView, the checkbox value changes

前端 未结 8 1966
不思量自难忘°
不思量自难忘° 2020-12-05 07:30


What I have: a custom listview with Textviews and checkbox.


Problem: Suppose my screen can show only 6 items of list at time, and
8条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-05 07:58

    check this code

    public class NewQAAdapterSelectFriends extends BaseAdapter {
    private LayoutInflater mInflater;
    private Person[] data;
    ArrayList checkedItem=new ArrayList();
    
    public NewQAAdapterSelectFriends(Context context) { 
        mInflater = LayoutInflater.from(context);
    }
    
    public void setData(Person[] data) {
        this.data = data;
    }
    
    @Override
    public int getCount() {
        return data.length;
    }
    
    @Override
    public Object getItem(int item) {
        return data[item];
    }
    
    @Override
    public long getItemId(int position) {
        return position;
    }
    
    
    
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.item_select_friends, null);
            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.nameText=(TextView) convertView.findViewById(R.id.personName);
            viewHolder.surnameText=(TextView) convertView.findViewById(R.id.personSurname);
            viewHolder.contactImage=(ImageView) convertView.findViewById(R.id.personImage);
            viewHolder.checkBox=(CheckBox)convertView.findViewById(R.id.checkBox);
            convertView.setTag(viewHolder);
            viewHolder.nameText.setTag(viewHolder.nameText);
            viewHolder.nameText.setTag(viewHolder.surnameText);
            viewHolder.contactImage.setTag(data[position]);
            viewHolder.checkBox.setOnCheckedChangeListener(
                    new CompoundButton.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                            Person element = (Person) viewHolder.checkBox.getTag();
    
                            if(isChecked){
                                getCheckList(data[position],isChecked);
                            }
                            else{
                                getCheckList(data[position],isChecked);    
                            }
    
                        }
                    });
            viewHolder.checkBox.setTag(data[position]);
        } 
         ViewHolder holder = (ViewHolder) convertView.getTag();
         holder.nameText.setText(data[position].getName());
         holder.surnameText.setText(data[position].getSurname());
         holder.contactImage.setImageResource(data[position].getPhotoRes());
         holder.contactImage.setScaleType(ScaleType.FIT_XY);
         if(checkedItem != null && checkedItem.contains(data[position])){
            viewHolder.checkBox.setChecked(true);
         }else
         {
            viewHolder.checkBox.setChecked(false);
         } 
        return convertView;
    }
    
    static class ViewHolder {
        TextView nameText;
        TextView surnameText;
        ImageView contactImage;
        CheckBox checkBox;
    }
    public void getCheckList(String value,boolean status){
            if(!checkedItem.contains(value)  && status)
            {
                checkedItem.add(value);
            }
            if(checkedItem.contains(value)  && !status)
            {
                checkedItem.remove(value);
            }
        }
    }
    

提交回复
热议问题