В ListView элементов больше чем влезает на экран. Каждый элемент ListView имеет Checkbox. При прокрутке со скрытых элементов снимается статус checked.
Что сделать чтоб все сохранялось?
Для реализации чекбоксов в ListView есть три способа:
Использовать стандартные возможности API - установить списку режим android:choiceMode="multipleChoice" (альтернативный код listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)) и в качестве айтема использовать предоставленную API разметку - android.R.layout.simple_list_item_multiple_choice.
Данный вариант печалит аскетичностью оформления - строка текста и напротив чекбокс.
Действовать по примеру первого варианта, но создать собственную разметку. Данная разметка должна обязательно реализовывать интерфейс Checkable. Пример.
Создать кастомный адаптер, который будет хранить состояния (установлен или нет - например отдельный массив boolean или поле в модели для айтема) всех чекбоксов в списке. При изменении чекбокса записывать новое состояние в этот список, при создании айтемов в методе getView() принудительно устанавливать чекбоксам значения из данного списка.
Помимо различий в реализации, данные способы различаются и способами получения значений чекбоксов (а ведь именно для этого все и затевалось).
Первые два способа как бы "трувэй". Для получения чекнутых айтемов используется метод ListView - getCheckedItemPositions() (getCheckedItemIds() как вариант), который возвращает массив SparseBooleanArray, содержащий номера позиций, которые были изменены. Позиция находится в key, ее текущее состояние в value. Пример1
Способ хорош тем, что вы получаете такие плюшки, как методы: isChecked(),setChecked(), которые можете применять к отдельным айтемам "снаружи", например в активити . Пример2 , а так же некоторые другие возможности, заложенные в стандартный API.
Третий способ - не "тру"-реализация, но гораздо проще и понятнее. Чтобы получить состояние чекнутости элементов просто добавляем в адаптер метод, который отдаст наше "хранилище" состояний чекбоксов, дальше вы уже можете использовать его по собственному усмотрению.
Способ хорош тем, что позволяет свободный вид айтема без заморочек с интерфейсом Checkable и свободный формат возвращаемых данных по чекнутым элементам. Пример3. Плата такова, что при этом любые дополнительные "возможности", которые в первом варианте реализует API, вам придется реализовать самостоятельно.
Этот вопрос уже 1000 раз задавался. Нужно в getView() устанавливать состояние елемента. Это описано в любом мануале по ListView.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости