it-swarm.com.ru

RecyclerView против ListView

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

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

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

enter image description here

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

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

251
Blaze Tama

RecyclerView был создан как улучшение 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 представляет собой более гибкий элемент управления для обработки «списочных данных», который следует шаблонам делегирования проблем и оставляет для себя только одну задачу - утилизацию элементов.

330
daneejela

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

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

35
CaptRespect

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

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

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

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

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

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

33
Jim Baca

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

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

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

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

20
IntelliJ Amiya

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

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

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

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

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

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

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

15
Pawan Maheshwari

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

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

13
Mohammed Imran N

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

3
Mustafa Güven

В дополнение к вышеперечисленным различиям немного больше:

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

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

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

  4. Нужно было реализовать кэширование представлений в случае LV . Это предусмотрено в RV по умолчанию. (Существует разница между кэшированием и переработкой.)

  5. Очень простая анимация предметов в случае RV.

3
Virat18

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

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

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

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

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

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

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

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

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

3
Manohar Reddy

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

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

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

  3. RecyclerView не содержит верхнего и нижнего колонтитула, поэтому это минус.

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

2
CoolMind

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

2
aimiliano
  1. Вы можете использовать интерфейс для предоставления прослушивателя кликов. Я использую эту технику С ListViews тоже.
  2. Без делителя: просто добавьте в вашу строку View с шириной Match_parent и высотой 1dp и присвойте ему цвет фона.
  3. Просто используйте селектор StateList для фона строки.
  4. addHeaderView можно также избежать в ListViews: просто поместите заголовок за пределы View.

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

1
Jay Patel

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

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

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

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

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

FastAdapter от mikepenz

FlexibleAdapter от davideas

0
Erick Moya