я читал о проблеме getView, названного многократно и все ответы. Однако я не нахожу решение для своей проблемы.
У меня есть список, где строки имеют два состояния: читайте или нет. Ну, я хочу к объектам, видевшим, первый раз имеет другой цвет и когда я прокручиваю список, они изменяют свой цвет на "состояние чтения".
Чтобы сделать это в методе getView моего адаптера, я установил поле isRead, когда строка для того объекта красится. Но проблема следующая: начиная с метода getView называют многократно, поле отмечено как чтение и когда список показывают на экране, появляется, как будто это было уже считано.
Какая-либо идея решить эту проблему?
Спасибо
Я предполагаю, что вы имеете в виду проблему, когда getView запрашивает одно и то же представление несколько раз.
ListView делает это, потому что ему нужно получить измерения для представлений по разным причинам (размер полосы прокрутки, расположение и т.д.)
Этой проблемы обычно можно избежать, не используя свойство "wrap_content" в вашем listview.
В остальном, использование getView для определения того, было ли отображено представление, просто плохая идея. ListView имеет множество оптимизаций, которые изменяют порядок вызова getView для каждого ряда, поэтому невозможно предугадать, что произойдет, и ваше приложение начнет демонстрировать странное поведение.
Старайтесь избегать любых отношений между представлением и данными, кроме концепции представления как отображения этих данных.
Вместо этого, пусть какой-нибудь рабочий поток или слушатель событий в вашем listactivity следит за тем, какие элементы списка были показаны пользователю, обновляет данные и вызывает dataSetChanged на вашем адаптере.
Не так, как вы хотите, чтобы это работало. Причина, по которой getView ()
вызывается несколько раз, состоит в том, чтобы позволить ОС измерить строки, чтобы она знала, как их расположить. Вам нужно будет, чтобы он отмечался как прочитанный, когда они щелкают по нему или устанавливают флажок или что-то в этом роде.