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