Android Recyclerview против ListView с Viewholder
Я недавно наткнулся на android RecycleView
который был выпущен с Android 5.0 и кажется, что RecycleView
Это просто инкапсулированный традиционные ListView
С включенным в него шаблоном ViewHolder, который способствует повторному использованию представления, а не его созданию каждый раз.
каковы другие преимущества использования RecycleView
?
Если оба имеют одинаковый эффект с точки зрения производительности, почему бы не использовать RecycleView` ?
редактировать
я обнаружил, что люди задали аналогичный вопрос, и ответы не являются окончательными, добавив их здесь для учета.
следует ли использовать RecyclerView для замены ListView?
почему RecyclerView не имеет onItemClickListener ()? и как RecyclerView отличается от Listview?
5 ответов
с появлением Android Lollipop,RecyclerView официально свой путь. RecyclerView намного больше мощный, гибкий и значительное улучшение над ListView. Я постараюсь дать вам подробное представление об этом.
1) Шаблон ViewHolder
в ListView было рекомендовано использовать шаблон ViewHolder, но это никогда не было принуждением. В случае RecyclerView, это обязательно используя RecyclerView.ViewHolder класса. Это одно из основных различий между ListView и RecyclerView.
Это делает вещи немного сложнее в RecyclerView, но многие проблемы, с которыми мы столкнулись в ListView, решаются эффективно.
2) LayoutManager
Это еще одно массовое улучшение, внесенное в RecyclerView. В ListView единственным доступным типом представления является вертикальный ListView. Нет официальный способ даже реализовать горизонтальный ListView.
теперь, используя RecyclerView, мы можем иметь
i)LinearLayoutManager - который поддерживает как вертикальные, так и горизонтальные списки,
ii)StaggeredLayoutManager - который поддерживает Pinterest как шахматные списки,
iii)GridLayoutManager - который поддерживает отображение сетки, как показано в галерее приложений.
и самое лучшее, что мы может делать все это динамически, как мы хотим.
3) Пункт Аниматор
ListViews не поддерживают хорошую анимацию, но RecyclerView привносит в нее совершенно новое измерение. С помощью RecyclerView.ItemAnimator класс, анимация представлений становится настолько простой и интуитивно понятной.
4) Элемент Украшения
в случае ListViews динамически украшающие элементы, такие как добавление границ или разделителей, никогда не были простой. Но в случае RecyclerView RecyclerView.ItemDecorator класс дает огромный контроль разработчикам, но делает вещи немного более трудоемкими и сложными.
5) OnItemTouchListener
Перехват кликов элемента на ListView был простым, благодаря его AdapterView.OnItemClickListener интерфейс. Но RecyclerView дает гораздо больше силы и управления своим разработчикам RecyclerView.OnItemTouchListener но это немного усложняет ситуацию для разработчика.
простыми словами, RecyclerView гораздо более настраиваемый, чем ListView и дает много контроля и мощности для своих разработчиков.
хорошо, так немного копать, и я нашел эти драгоценные камни от Билла Филипса статьи on RecycleView
RecyclerView может сделать больше, чем ListView, но класс RecyclerView у него меньше обязанностей, чем у ListView. Из коробки, RecyclerView не:
- позиции элементов на экране
- вид анимировать
- обрабатывать любые сенсорные события, кроме прокрутки
все это было испечено в ListView, но RecyclerView использует классы collaborator для выполнения этих заданий.
ViewHolders, которые вы создаете, тоже более мясистые. Они подкласс
RecyclerView.ViewHolder
, который имеет кучу методовRecyclerView
использует.ViewHolders
знать, в какой позиции они в настоящее время связаны, как а также какие идентификаторы элементов (если они у вас есть). В процессеViewHolder
был посвящен в рыцари. Раньше работа ListView заключалась в том, чтобы держаться за весь вид элемента, иViewHolder
держался только за маленькие кусочки.теперь, ViewHolder держит все это в
ViewHolder.itemView
поле, которое назначается в конструкторе ViewHolder для вас.
другой плюс использования RecycleView
это анимация, это можно сделать в двух строках кода
RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
recyclerView.setItemAnimator(itemAnimator);
но виджет все еще сырой, e.g вы не можете создать заголовок и футер.
больше Билл Филипп статья (перейти прочитать его!) но я подумал, что важно отметить следующее.
в ListView была некоторая двусмысленность о том, как обрабатывать события щелчка: должны ли отдельные представления обрабатывать эти события или ListView обрабатывать их через OnItemClickListener? Однако в RecyclerView держатель представления может выступать в качестве объекта контроллера уровня строки, который обрабатывает такие сведения.
ранее мы видели, что LayoutManager обрабатывал представления позиционирования, а ItemAnimator обрабатывал их анимацию. ViewHolder-это последняя часть: она отвечает за обработку любых событий, которые происходят на определенном элементе, отображаемом RecyclerView.
я использовал ListView
с затяжелителем изображения скольжения, имеющ рост памяти. Затем Я заменил ListView
с RecyclerView
. Это не только сложнее в кодировании, но и приводит к большему использованию памяти, чем ListView
. По крайней мере, в моем проекте.
в другом действии я использовал сложный список с EditText's
. В некоторых из них метод ввода может различаться, также TextWatcher
может быть применено. Если бы я использовал ViewHolder
, как я мог заменитьTextWatcher
во время скроллинга? Итак, я использовал ListView
без a ViewHolder
, и он работает.