Просмотры в списке переработаны. Ваш список данных может иметь 100 строк, но ListView
имеет только 10 (эти видимые) строки. При прокрутке строки перерабатываются. Последняя строка в ListView
переходит в первую позицию или в другую сторону. Вы должны изменить состояние этих строк.
Вы должны сохранить состояние флажка в массиве, а не в представлениях.
Добавить
final List<Boolean> isCheckedList;
инициализировать его в конструкторе:
isCheckedList = new ArrayList<Boolean>();
for(int i=0;i<myDataLength;i++){
isCheckedList.add(Boolean.FALSE);
}
и измените getView:
holder.ck.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
isCheckedList.set(position, holder.ck.isChecked());
}
});
в месте, где вы заполняете строки:
holder.ck.setChecked(isCheckedList.get(position));
Чтобы изменить состояние всех флажков, используйте:
Collections.fill(isCheckedList, Boolean.FALSE);
notifyDataSetChanged();