Пользовательское представление строк в ListView с использованием ArrayAdapter

У меня есть listView с переопределенным ArrayAdapter. В содержит ArrayList. Объект Order может находиться в следующих состояниях:

  • НОВЫЙ
  • ЧИТАТЬ
  • ПРИНЯТЫЙ
  • ОТМЕНЕНО

В зависимости от состояния заказа я раздуваю другой макет, заполняю его значениями в методе getView и возвращаю как View. Заказы синхронизируются с сервером каждую минуту. Это все работает как надо. Если приходит новый Order, он вставляется в ArrayList, вызывается NotifyDataSetChange и обновляется listView. Однако почему-то некоторые из существующих элементов в списке меняют свою раскладку (состояние не меняется, проверено в логах). Это происходит каждый раз, когда вызывается NotifyDataSetChanged, и я не вижу никакой логики или чего-либо еще в этом поведении. Кто-нибудь знает, почему это происходит?

Спасибо, Филип


person Filip Majernik    schedule 06.10.2011    source источник
comment
Вы используете getViewTypeCount()? См. stackoverflow.com /вопросы/4777272/   -  person ciscogambo    schedule 07.10.2011
comment
Я заработал. Я думаю, проблема заключалась в том, что я расширил ArrayAdapter, и он получает идентификатор ресурса View для представления ROW в конструкторе. Затем это передается методу getView. Я работал с каким-то учебником, и convertView был протестирован там, если он NULL. Если бы я надул новый макет. Затем я наполнил его своими ценностями. Если нет, я просто заполнил convertView значениями. Я предположил, что если convertView не был нулевым, он содержал завышенный макет, переданный конструктору CustomArrayAdapter, и поэтому изменил макет строк. Могу ли я быть прав?   -  person Filip Majernik    schedule 07.10.2011


Ответы (1)


Я заработал. Я думаю, проблема заключалась в том, что я расширил ArrayAdapter, и он получает идентификатор ресурса View для представления ROW в конструкторе. Затем это передается методу getView. Я работал с каким-то учебником, и convertView был протестирован там, если он NULL. Если бы я надул новый макет. Затем я наполнил его своими ценностями. Если нет, я просто заполнил convertView значениями. Я предположил, что если convertView не был нулевым, он содержал завышенный макет, переданный конструктору CustomArrayAdapter, и поэтому изменил макет строк. Могу ли я быть прав?

person Filip Majernik    schedule 13.10.2011