getView () : Как указано в спецификации, метод getView отображает данные в указанной позиции.Таким образом, когда вы устанавливаете Adapter и когда вы прокручиваете, будет вызываться ваш метод getView listView.
Метод, который вы скопировали здесь, является частью EfficientAdapter для оптимизации производительности вашего ListView, и наряду с оптимизацией вы использовали ViewHolder шаблон.
Скопировано изСпецификации: С небольшим дополнительным объяснением
position : Положение элемента в наборе данных адаптера элемента, вид которого мы хотим.
convertView : Старый вид для повторного использования, если это возможно.Примечание. Перед использованием убедитесь, что это представление не пустое и имеет соответствующий тип.Если невозможно преобразовать это представление для отображения правильных данных, этот метод может создать новое представление.Гетерогенные списки могут указывать количество типов представлений, так что это представление всегда имеет правильный тип (см. GetViewTypeCount () и getItemViewType (int)).
Итак, в приведенном выше методе, когда вы делаете следующую вещьВы повторно используете свой convertView.
if (convertView == null){
....
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
И, выполняя следующее, вы избегаете поиска (findViewById), что является хорошим преимуществом шаблона ViewHolder
holder.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1);
parent : родитель, к которому в конечном итоге будет присоединено это представление
Отредактировано
Вопрос: Сколько раз getViewназывается и сколько convertView будет создано?Ответ: Давайте рассмотрим пример Efficeint Adapter от ApiDemos .Если на экране отображается 10 строк, то
convertView Count : 10 + 1 = 11 (10 строк на экране, одна дополнительная для отображения эффекта прокрутки).Это означает, что операторы в блоке if (convertView == null) {...} будут вызываться только 11 раз.
getView Count : Первоначально count будет равен 10, но при запуске прокруткирассчитывать продолжают расти.getView вызывается каждый раз для обновления данных.
Примечание. Это верно только для метода getView, упомянутого в вопросе.