Не могли бы вы объяснить getView()
метод ArrayAdapter
.
Я прочитал документы, и у него есть три параметра:
position
: Позиция элемента в наборе данных адаптера элемента, представление которого мы хотим.convertView
: старый вид для повторного использования, если это возможно. Примечание. Перед использованием следует убедиться, что это представление не является нулевым и имеет соответствующий тип. Если невозможно преобразовать это представление для отображения правильных данных, этот метод может создать новое представление.
Гетерогенные списки могут указывать количество типов представлений, чтобы это представление всегда имело правильный тип (см. getViewTypeCount( ) и getItemViewType(int)).parent
: родитель, к которому в конечном итоге будет присоединено это представление.
Я понял параметр position
. Как они сказали, это подразумевает позицию элемента, просмотр которого был запрошен.
Откуда convertView
. Я видел много примеров, где они проверяют, является ли convertView
нулевым. Если is равно null, они раздувают новый экземпляр макета строки, заполняют его и возвращают. Думаю, я тоже обдумал это, но одна вещь все еще сбивает меня с толку. Какой макет передается через параметр convertView
. Если resource
, который передается при инициализации ArrayAdapter
? Является ли кешированная копия последнего макета, возвращаемая getView()
?
И наконец. Что делает параметр parent
. Я не видел слишком много примеров, использующих это. Большинство из них просто повторно используют/раздувают макет строки и возвращают его.
(Я спрашиваю, потому что в моем ListView
есть анимация по клику. В частности, это тот, который призван воспроизвести раскрывающееся меню быстрых действий Spotify. Моя анимация была немного вялой. После диагностики этой проблемы некоторое время я понял, что это произошло из-за того, что мой метод getView()
занимает немного времени, так как я раздуваю новый макет строки на каждой итерации. Кто-то предложил кэшировать макет строки в ViewHolder
, в то время как другие примеры указывают на повторное использование параметра convertView
, т. е. раздувание макета строки только в том случае, если convertView
равно нулю.)