Это потому, что всякий раз, когда вы прокручиваете список, выходите из приложения, возвращаетесь и т. Д., Вы получаете ListAdapter, который повторно отображает представление строк, и ваши представления в списке никогда не бывают 1: 1 с базовыми данными из-заПросмотр утилизации.Если вы хотите, чтобы ваши изменения были «липкими», вам нужно подумать об изменении базовых данных для ListAdapter таким образом, чтобы адаптер знал, как правильно отображать, а не просто изменять этот конкретный экземпляр строки - вы пометка элемента чтение, а не просто установка одного экземпляра визуализированного представления элемента как прочитанного.Вы можете думать об этом как о MVC, если это поможет.
То есть реальное изменение здесь должно быть в методе getView вашего адаптера, с изменением его источника данных, а затем, возможно,вызов notifyDataSetChanged .
Ответ Фредли о SQLite или хранилище может быть излишним, если эти данные не должны сохраняться после этого одного сеанса в деятельности, или если данные, с которыми вы работаете, также являются временными (например, изменяются сетевые данныечасто это временно загружается в ArrayAdapter), и в любом случае это немного вводит в заблуждение, потому что просто выгрузка данных на диск не решает фундаментальную проблему с вашей связью представлений данных с вашими моделями .