RecyclerView против ListView
От разработчика Android (Создание списков и карт):
Виджет RecyclerView - это более продвинутая и гибкая версия ListView.
Хорошо, это звучит круто, но когда я увидел этот пример изображения, я действительно запутался в разнице между этими двумя.
![enter image description here]()
Изображение выше может быть легко создано ListView
с помощью специального адаптера.
Итак, в какой ситуации следует использовать RecyclerView
?
Ответы
Ответ 1
RecyclerView
был создан как усовершенствование ListView
, так что да, вы можете создать прикрепленный список с помощью ListView
управления ListView
, но использовать RecyclerView
проще:
-
Повторное использование ячеек при прокрутке вверх/вниз - это возможно при реализации View Holder в адаптере ListView
, но это было необязательным, а в RecycleView
это способ записи адаптера по умолчанию.
-
Отсоединяет список от его контейнера - так что вы можете легко помещать элементы списка во время выполнения в разные контейнеры (linearLayout, gridLayout) с настройкой LayoutManager
.
Пример:
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
- Анимация общих действий со списком - Анимации отделяются и делегируются
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 перед просмотром по списку:
-
Содержит ViewHolder по умолчанию.
-
Простая анимация.
-
Поддерживает горизонтальные, сеточные и разнесенные макеты
Преимущества listView по сравнению с recyclerView:
-
Легко добавить разделитель.
-
Может использовать встроенный arrayAdapter для простых простых списков
-
Поддерживает верхний и нижний колонтитулы.
-
Поддерживает 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