Intereting Posts
Невозможно найти класс из java-библиотеки библиотеки, когда maven создаст мой проект Удалить маркер из GoogleMap Как создать вертикально выровненный надстрочный индекс и индекс в TextView Исключение, возникающее при рендеринге: java.lang.System.arraycopy Изменение значка переполнения в панели действий Безопасно ли хранить конфиденциальные данные в SQLite? Android. Получение контекста из широковещательного приемника onReceive () для отправки Как я могу обрабатывать нулевое значение с помощью функции JSonobject.getInt? Обнаружение близости с использованием профиля Bluetooth «Проксимити» Что такое android: layout_marginStart Остановить фрагмент после воссоздания после возобновления? Не удалось решить: com.android.support:support-v4:23.0.0 Как изменить настройки предварительного просмотра макета на Android Studio Изменение содержимого ImageView вызывает OutOfMemoryError Прикрепить отладчик Eclipse для перезапуска приложения

Объяснение метода getView () для ArrayAdapter

Не могли бы вы объяснить метод getView() для ArrayAdapter .

Я прочитал документы и имеет три параметра:

  • position : позиция элемента в наборе данных адаптера элемента, представление которого мы хотим.
  • convertView : старый вид для повторного использования, если это возможно. Примечание. Перед использованием убедитесь, что это представление не является нулевым и соответствующего типа. Если невозможно преобразовать это представление для отображения правильных данных, этот метод может создать новое представление.
    Гетерогенные списки могут указывать их количество типов просмотра, так что этот вид всегда имеет правильный тип (см. GetViewTypeCount () и getItemViewType (int)).
  • parent : родительский элемент, который в конечном итоге будет привязан к

Я понял параметр position . Как они сказали, это подразумевает позицию предмета, который был запрошен.

Откуда происходит convertView . Я видел много примеров, где они проверяют, является ли convertView нулевым. Если is равно null, они раздувают новый экземпляр макета строки, заполняют его и возвращают. Наверное, я тоже обнял это, но одна вещь все еще меня озадачивает. Каков макет, который передается через параметр convertView . Является ли параметр resource который передается при инициализации ArrayAdapter ? Является ли кэшированная копия последнего макета, возвращаемого getView() ?

И наконец. Что делает parent параметр. Я не видел слишком много примеров, использующих это. Большинство из них просто повторно используют / раздувают компоновку строк и возвращают ее.

(Я спрашиваю, потому что у меня есть анимация с кликом в моем ListView . В частности, этот способ реплицирует быстрое меню быстрого запуска Spotify . Моя анимация была немного вялой. После некоторого изменения этой проблемы я понял Что это связано с тем, что мой getView() занимает немного времени для завершения, поскольку я раздуваю новый макет строки на каждой итерации. Кто-то предложил кэшировать макет строки в ViewHolder то время как другие примеры указывают на повторное использование convertView то есть только раздувание макета строки, если convertView имеет значение null.)

Solutions Collecting From Web of "Объяснение метода getView () для ArrayAdapter"

Является ли кэшированная копия последнего макета, возвращаемого getView ()?

convertView – это представление строки, которая покинула экран (так что это не последний вид, возвращаемый методом getView ). Например, сначала отображается список, в этом случае convertView имеет значение null , ранее не было построено представление строки и оставлено на экране. Если вы прокрутите вниз, строка 0 покинет экран (больше не будет виден), когда это произойдет, ListView может захотеть сохранить это представление в кеше, чтобы впоследствии использовать его (это имеет смысл, поскольку строки ListView обычно имеют Один и тот же макет с только разными данными). Причина сохранения некоторых представлений в кеше и последующего использования их заключается в том, что метод getView можно было бы назвать много раз (каждый раз, когда пользователь прокручивает вверх / вниз и появляются новые строки на экране). Если каждый раз, когда представление строки должно быть воссоздано, это привело бы к созданию множества объектов, которые следует избегать. В методе getView вы проверите convertView чтобы узнать, является ли оно null . Если он равен null , вы должны создать новое представление строки и заполнить его данными, если оно не является null , ListView предложит вам предыдущее представление. Имея это предыдущее представление, вам не нужно строить новый макет строки, вместо этого вы должны заполнить его правильными данными, поскольку в этом кэшированном представлении есть старые данные, все еще привязанные к нему (вы увидите много вопросов о stackoverflow, где Пользователи спрашивают, почему строки их ListView дублируются при прокрутке вниз).

Что делает родительский параметр. Я не видел слишком много примеров, использующих это. Большинство из них просто повторно используют / раздувают компоновку строк и возвращают ее.

Он должен использоваться для получения правильных LayoutParams для недавно завышенной / построенной строки. Например, если вы раздуваете макет, который имеет RelativeLayout в качестве корня, и вы не используете parent для получения LayoutParams вас могут возникнуть проблемы с макетом строк. Чтобы взять родителя, вы должны использовать:

 convertView = getLayoutInflater().inflate(R.layout.row_layout, parent, false); 

Мое понимание convertView заключается в том, что это, по существу, виды, которые были переработаны, потому что они не используются на данный момент – например, вы прокручиваете список вниз, те, что наверху, не отображаются на экране, поэтому они передаются в Этот параметр используется, когда вам нужно новое представление (так что вам не нужно создавать совершенно новый, когда неиспользуемые сидят без дела). IOS имеет аналогичный метод, называемый dequeueReusableCellWithIdentifier . Если каждая строка вашего списка имеет одинаковую структуру, безопасно отнести это к соответствующему типу и просто обновить информацию в нем – текст, изображения и т. Д. Это будет представление, которое ранее было возвращено getView() для Тот же список.

Моя лучшая догадка (и, по общему признанию, догадка) с parent заключается в том, что это представление, что список этого адаптера является дочерним. Он дает вам маршрут обратно в систему рендеринга, если вам нужен контекст, доступ к системе ресурсов, для передачи информации или получения информации из родительского представления списка.