Должен ли я изменить существующий список в моем приложении на RecyclerView?

Есть ли какие-либо преимущества преобразования существующего списка в моем приложении в RecyclerView? Также, когда я должен использовать RecyclerView?

Ответы

Ответ 1

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

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

У вас также есть гибкость в определении пользовательских менеджеров макетов и анимации для этого виджета.

Поэтому в будущем мы, вероятно, больше не будем использовать ListViews. Кроме того, RecyclerView не нуждается в чем-либо вроде "notifyDataSetChanged()", когда элемент добавляется или удаляется из вашего списка, что является огромным улучшением по производительности.
Если вы хотите узнать больше, что означает Google, говоря "более продвинутая и гибкая версия ListView", я бы рекомендовал вам прочитать этот блог-пост Первый взгляд на андроиды RecyclerView.

Но чтобы ответить на ваши вопросы:

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

Когда я должен использовать RecyclerView?
Везде, где ListView является соответствующим, RecyclerView также.

И еще вопрос:
Нужно ли переключиться с ListView на RecyclerView?
На данный момент абсолютно нет! Вы должны учитывать, что RecyclerView не является окончательным на данный момент. Таким образом, в ближайшем будущем могут быть некоторые изменения, исправления ошибок и новые функции. (В качестве примера для ошибки: clipToPadding не работает atm. К счастью, он уже был указан)

Ответ 2

Я попытаюсь дать подробный ответ на ваш вопрос.

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

1) Шаблон ViewHolder

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

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

Вердикт

Если вы уже используете шаблон ViewHolder в ListViews, то при переключении на RecyclerView изменений не будет.

2) LayoutManager

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

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

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

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

iii) GridLayoutManager - который поддерживает отображение сеток, как показано в приложениях Галерея.

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

Вердикт

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

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

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

Вердикт

Мы также можем анимировать элементы ListView, и это тоже не так сложно, поэтому не нужно сильную причину переключиться.

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

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

Вердикт

Мы также можем сделать это в ListView, и если вам не нужна такая большая настройка в оформлении, тогда ListView может оставаться с вами.

5) OnItemTouchListener

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

Вердикт

Это одна из самых "ненужных" сложных вещей, которые я нашел в RecyclerView, которая проще в случае ListViews.

Ответ 3

RecyclerView будет будущим, и это больше, чем ListView2 и ответ @reVeres хорошо объясняет этот случай.

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