Должен ли я изменить существующий список в моем приложении на 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, и вы не можете использовать его в производственной версии.