Android Recyclerview vs ListView с Viewholder

Недавно я встретил андроид RecycleView выпущенный с Android 5.0, и кажется, что RecycleView – это просто инкапсулированный традиционный ListView с включенным в него шаблоном ViewHolder, который способствует повторному использованию представления, а не созданию его каждый раз.

Каковы другие преимущества использования RecycleView ? Если оба имеют одинаковый эффект с точки зрения производительности, зачем выбирать RecycleView`?

редактировать

Я обнаружил, что люди задавали аналогичный вопрос, и ответы не являются окончательными, добавив их здесь для ведения записей.

Recyclerview vs Listview

Должны ли мы использовать RecyclerView для замены ListView?

Почему у RecyclerView нет onItemClickListener ()? И как RecyclerView отличается от Listview?

С появлением Android Lollipop, RecyclerView официально принялся официально. RecyclerView намного мощнее, гибко и значительно улучшает работу над ListView . Я попытаюсь дать вам подробное представление об этом.

1) Шаблон ViewHolder

В ListView было рекомендовано использовать шаблон ViewHolder, но это никогда не было принуждением. В случае RecyclerView это обязательно, используя класс RecyclerView.ViewHolder . Это одно из основных различий между ListView и RecyclerView.

Это делает вещи немного сложнее в RecyclerView, но многие проблемы, с которыми мы столкнулись в ListView, решаются эффективно.

2) LayoutManager

Это еще одно массовое усовершенствование, появившееся в RecyclerView. В ListView единственным доступным видом является вертикальный ListView. Нет никакого официального способа даже реализовать горизонтальный ListView.

Теперь, используя RecyclerView, мы можем иметь

I) LinearLayoutManager – который поддерживает как вертикальные, так и горизонтальные списки,

Ii) StaggeredLayoutManager – который поддерживает Pinterest как шахматные списки,

Iii) GridLayoutManager – который поддерживает отображение гридов в приложениях Gallery.

И самое лучшее, что мы можем делать все это динамически, как мы хотим.

3) Аниматор предметов

ListViews не хватает поддержки хорошей анимации, но RecyclerView привносит в нее совершенно новое измерение. Используя класс RecyclerView.ItemAnimator , анимация представлений становится настолько простой и интуитивно понятной.

4) Украшение предметов

В случае ListViews динамически украшающие элементы, такие как добавление границ или разделителей, никогда не были легкими. Но в случае RecyclerView класс RecyclerView.ItemDecorator дает огромный контроль разработчикам, но делает вещи немного более трудоемкими и сложными.

5) OnItemTouchListener

Перехват кликов элементов в ListView был простым, благодаря интерфейсу AdapterView.OnItemClickListener . Но RecyclerView дает гораздо больше возможностей и контроля своим разработчикам RecyclerView.OnItemTouchListener, но это немного усложняет работу разработчика.

Говоря простыми словами, RecyclerView гораздо более настраиваемый, чем ListView, и дает им большой контроль и полномочия для своих разработчиков.

Ладно, так немного копать, и я нашел эти драгоценные камни из статьи Билла Филипса в RecycleView

RecyclerView может делать больше, чем ListView, но сам класс RecyclerView имеет меньше обязанностей, чем ListView. Из коробки RecyclerView не работает:

  • Позиции позиций на экране
  • Анимация просмотров
  • Обработать любые события касания, кроме прокрутки

Все это было запечено в ListView, но RecyclerView использует классы соавторов для выполнения этих заданий.

Создаваемые вами ViewHolders также более эффективны. Они представляют собой подкласс RecyclerView.ViewHolder , который имеет кучу методов RecyclerView . ViewHolders знают, к какой позиции они привязаны, а также к каким элементам ids (если они есть). В этом процессе ViewHolder был посвящен в рыцари. Раньше задача ListView заключалась в том, чтобы придерживаться всего вида элемента, а ViewHolder удерживался только на небольших деталях.

Теперь ViewHolder удерживает все это в поле ViewHolder.itemView , которое назначено вам в конструкторе ViewHolder.

Другим плюсом использования RecycleView является анимация, это можно сделать в двух строках кода

 RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator(); recyclerView.setItemAnimator(itemAnimator); 

Но виджет по-прежнему сырой, например, вы не можете создавать верхний и нижний колонтитулы .

Больше из статьи Билла Филлипа (прочитайте это!), Но я подумал, что важно указать на следующее.

В ListView была некоторая неопределенность в отношении того, как обрабатывать события кликов: должны ли отдельные представления обрабатывать эти события, или ListView обрабатывает их через OnItemClickListener? Однако в RecyclerView ViewHolder находится в явном виде, чтобы выступать в качестве объекта контроллера уровня строки, который обрабатывает эти детали.

Ранее мы видели, что LayoutManager обрабатывал представления позиционирования, а ItemAnimator обрабатывал их анимацию. ViewHolder – последний элемент: он отвечает за обработку любых событий, которые происходят с определенным элементом, отображаемым RecyclerView.

Я использовал загрузчик изображений ListView с Glide, с ростом памяти. Затем я заменил ListView на RecyclerView . Это не только сложнее в кодировании, но также приводит к большему использованию памяти, чем ListView . По крайней мере, в моем проекте.

В другой деятельности я использовал сложный список с EditText's . В некоторых из них метод ввода может изменяться, также может применяться TextWatcher . Если я использовал ViewHolder , как я могу заменить TextWatcher во время прокрутки? Итак, я использовал ListView без ViewHolder , и он работает.

Intereting Posts