Я также столкнулся с подобной проблемой, поэтому после долгих чтений я решил эту проблему следующим образом:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listview, null);
holder = new ViewHolder();
holder.nameView = (TextView)convertView.findViewById(R.id.textView1);
holder.numberView = (TextView)convertView.findViewById(R.id.textView2);
holder.cb = (CheckBox)convertView.findViewById(R.id.checkBox1);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.nameView.setText(mData.get(position).toString());
holder.numberView.setText(mNumber.get(position).toString());
holder.cb.setChecked(false);
holder.cb.setTag(position);
if(selected.indexOf(mNumber.get(position).toString()) >= 0)
{
holder.cb.setChecked(true);
}
return convertView;
}
}
Вот что я делаю, что в getView () я снимаю все флажки и вручную проверяю те, которые мне нужно проверять в соответствии с textview, которому он соответствует. Таким образом, если пользователь прокрутит вниз после установки первого флажка, все флажки в представлении будут сняты, и если он снова прокрутится вверх, то также все флажки будут сняты, но затем тот, который он щелкнул ранее, будет снова проверен.