RecyclerView против ListView

От разработчика Android (Создание списков и карт):

Виджет RecyclerView - это более продвинутая и гибкая версия ListView.

Хорошо, это звучит круто, но когда я увидел этот пример изображения, я действительно запутался в разнице между этими двумя.

enter image description here

Изображение выше может быть легко создано ListView с помощью специального адаптера.

Итак, в какой ситуации следует использовать RecyclerView?

Ответ 1

RecyclerView был создан как усовершенствование ListView, так что да, вы можете создать прикрепленный список с помощью ListView управления ListView, но использовать RecyclerView проще:

  1. Повторное использование ячеек при прокрутке вверх/вниз - это возможно при реализации View Holder в адаптере ListView, но это было необязательным, а в RecycleView это способ записи адаптера по умолчанию.

  2. Отсоединяет список от его контейнера - так что вы можете легко помещать элементы списка во время выполнения в разные контейнеры (linearLayout, gridLayout) с настройкой LayoutManager.

Пример:

mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
  1. Анимация общих действий со списком - Анимации отделяются и делегируются ItemAnimator.

Существует больше о RecyclerView, но я думаю, что эти пункты являются основными.

Итак, в заключение, RecyclerView представляет собой более гибкий элемент управления для обработки "списочных данных", который следует шаблонам делегирования проблем и оставляет для себя только одну задачу - утилизацию элементов.

Ответ 2

Для просмотра списков, имеющих хорошую производительность, вам нужно будет реализовать шаблон держателя, и это легко повредить, особенно если вы хотите заполнить список несколькими видами видов.

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

Ответ 3

ListView является предком RecyclerView. Было много вещей, которые ListView либо не делали, либо не преуспевали. Если бы вы собрали недостатки ListView и решили проблему, абстрагировав проблемы на разные области, у вас получилось бы что-то вроде просмотра recycler. Вот основные проблемы с ListViews:

  • Не применяйте View Повторное использование для тех же типов элементов (посмотрите на один из адаптеров, который используется в ListView, если вы изучите метод getView, вы увидите, что ничто не мешает программисту создавать новое представление для каждой строки, даже если оно передается через переменную convertView)

  • Не предотвращалось дорогостоящее использование findViewById (даже если вы пересматривали представления, как указано выше, для разработчиков можно было вызвать findViewById для обновления отображаемого содержимого дочерних представлений. Основная цель ViewHolder pattern в ListViews должен был кэшировать вызовы findViewById. Однако это было доступно только в том случае, если вы знали об этом, поскольку он вообще не был частью платформы)

  • Поддерживается только вертикальная прокрутка с отображаемыми представлениями Row (представление Recycler не заботится о том, где размещены представления и как они перемещаются, он абстрагируется в LayoutManager. Поэтому Recycler может поддерживать традиционный ListView как показано выше, а также такие вещи, как GridView, но это не ограничивается этим, оно может делать больше, но вам нужно сделать работу с ногами программирования, чтобы это произошло).

  • Анимации, добавленные/удаленные, не были рассмотрены. Это полностью зависит от вас, чтобы выяснить, как это происходит (сравните RecyclerView. Адаптеры классов уведомляют * предложения методов v. ListViews, чтобы получить представление).

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

Ответ 4

RecyclerView - это новая группа ViewGroup, которая готова отображать любые аналогичным образом. Это преемника ListView and GridView, и его можно найти в latest support-v7 version. Разработана RecyclerViewс учетом расширяемости, поэтому можно создавать любые макет, о котором вы можете думать, но не без небольшой боли в заднице доза.

Ответ от Антонио Лейва

 compile 'com.android.support:recyclerview-v7:27.0.0'

RecyclerView действительно powerful view, чем ListView. Для получения дополнительной информации вы можете посетить Эта страница.

Ответ 5

Ниже приведены несколько ключевых моментов/различий между RecyclerView и ListView. Примите ваш звонок с умом.

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

RecylerView имеет встроенный ViewHolder, не нужно реализовывать наш собственный, как в listView. Он поддерживает уведомление по определенному индексу, а также

Такие вещи, как анимация добавления или удаления элементов, уже реализованы в RecyclerView без необходимости что-либо делать

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

i) LinearLayoutManager - который поддерживает как вертикальные, так и горизонтальные списки, ii) StaggeredLayoutManager - который поддерживает Pinterest как разнесенные списки, iii) GridLayoutManager - который поддерживает отображение сеток, как видно в приложениях Gallery.

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

Ответ 6

Основное преимущество:

ViewHolder по умолчанию недоступен ListView. Мы будем явно создавать внутри getView(). RecyclerView имеет встроенный ViewHolder.

Ответ 7

Преимущества RecyclerView перед просмотром по списку:

  1. Содержит ViewHolder по умолчанию.

  2. Простая анимация.

  3. Поддерживает горизонтальные, сеточные и разнесенные макеты

Преимущества listView по сравнению с recyclerView:

  1. Легко добавить разделитель.

  2. Может использовать встроенный arrayAdapter для простых простых списков

  3. Поддерживает верхний и нижний колонтитулы.

  4. Поддерживает OnItemClickListner.

Ответ 8

Я думаю, что основная и самая большая разница в том, что ListView ищет позицию элемента при создании или помещении, с другой стороны RecyclerView ищет тип элемента. если есть другой элемент, созданный с тем же типом RecyclerView, он не создает его снова. Он запрашивает первый адаптер, а затем запрашивает переработку, если рециркулированный пул говорит "да, я создал тип, похожий на него", тогда RecyclerView не пытается создать тот же тип. ListView не имеет такого механизма объединения.

Ответ 9

В дополнение к вышеперечисленным отличиям следуют несколько:

  • RV разделяет создание и привязку данных для просмотра. В LV вам нужно проверить, является ли convertView нулевым или нет для создания представления, прежде чем привязывать к нему данные. Таким образом, в случае RV просмотр будет создан только тогда, когда это необходимо, но в случае LV, можно пропустить проверку для convertview и каждый раз создавать представление.

  • Переключение между сеткой и списком теперь проще с помощью LayoutManager.

  • Не нужно уведомлять и обновлять все элементы, даже если изменен только один элемент.

  • В случае LV необходимо было реализовать кэширование вида. Он предоставляется в RV по умолчанию. (Существует разница между просмотром кэширования n утилизации.)

  • Очень легкая анимация элементов в случае RV.

Ответ 10

По-моему, RecyclerView был сделан для решения проблемы с шаблоном рециркуляции, используемым в списках просмотров, поскольку это затрудняло работу разработчика. Все остальное вы могли бы обрабатывать больше или меньше. Например, я использую один и тот же адаптер для ListView и GridView, это не имеет значения, в обоих случаях используются теги getView, getItemCount, getTypeCount, поэтому они одинаковы. RecyclerView не требуется, если ListView с ListAdapter или GridView с сетевыми адаптерами уже работает для вас. Если вы правильно применили шаблон ViewHolder в своих списках списков, то вы не увидите большого улучшения по сравнению с RecycleView.

Ответ 11

Я немного поработал с RecyclerView и по-прежнему предпочитаю ListView.

  • Конечно, оба из них используют ViewHolders, поэтому это не является преимуществом.

  • A RecyclerView сложнее в кодировании.

  • A RecyclerView не содержит верхний и нижний колонтитулы, поэтому это минус.

  • A ListView не требует создания ViewHolder. В тех случаях, когда вы хотите иметь список с разделами или подзаголовками, было бы неплохо создать независимые элементы (без ViewHolder), это упростит и не потребует отдельных классов.

Ответ 12

  • Вы можете использовать интерфейс, чтобы обеспечить прослушиватель кликов. Я использую это с ListViews тоже.
  • Без разделителя: просто добавьте в свою строку вид с шириной match_parent и высоту 1dp и придать ему цвет фона.
  • Просто используйте селектор StateList для фона строки.
  • addHeaderView можно также избежать в ListViews: просто введите Заголовок вне представления.

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

Ответ 13

Простой ответ: вы должны использовать RecyclerView в ситуации, когда вы хотите показать много элементов, а число из них динамическое. ListView следует использовать только тогда, когда количество элементов всегда одинаковое и ограничено размером экрана.

Вы считаете это сложнее, потому что вы думаете только об этом в библиотеке Android.

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

Не испугайтесь и попробуйте RecyclerView, вы можете начать любить его, составляя список из 100 предметов, загруженных из Интернета (например, новости facebook) в ListView и RecyclerView, вы увидите разницу в UX (пользовательский опыт) при попытке прокрутки, возможно, тестовое приложение остановится, прежде чем вы сможете это сделать.

Я рекомендую вам проверить эти две библиотеки для создания простых адаптеров:

FastAdapter by mikepenz

FlexibleAdapter by davideas

Ответ 14

RecyclerПросмотреть информацию

RecyclerView был представлен с Android 5.0 (Lollipop). он включен в библиотеку поддержки. Таким образом, он совместим с Android API Level 7.

Как и в случае с ListView, основная идея RecyclerViews - обеспечить функциональность листинга в удобной для пользователя форме. Часть "Recycler" этого названия не случайно. RecyclerView может фактически перерабатывать элементы, с которыми он в данный момент работает. Процесс переработки осуществляется благодаря шаблону под названием View Holder.

Плюсы и минусы RecyclerView

Плюсы:

  • встроенная анимация для добавления, обновления и удаления предметов
  • обеспечивает повторное использование представлений с использованием шаблона ViewHolder
  • поддерживает сетки и списки
  • поддерживает вертикальную и горизонтальную прокрутку
  • можно использовать вместе с DiffUtil

Минусы:

  • добавляет сложности
  • нет OnItemClickListener

Информация о ListView

ListView существует с самого начала существования Android. Он был доступен даже на API Level 1 и имеет ту же цель, что и RecyclerView.

Использование ListView на самом деле очень просто. В этом аспекте он не похож на своего преемника. Кривая обучения более плавная, чем у RecyclerView. Таким образом, это легче понять. Нам не нужно иметь дело с такими вещами, как LayoutManager, ItemAnimator или DiffUtil.

Плюсы и минусы ListView

Плюсы:

  • простое использование
  • адаптеры по умолчанию
  • доступно OnItemClickListener
  • это основа ExpandableListView

Минусы:

  • не охватывает использование шаблона ViewHolder