Android Recyclerview vs ListView с Viewholder
Я недавно наткнулся на android RecycleView который был выпущен с Android 5.0 и кажется, что RecycleView Это просто инкапсулированный традиционные ListView с шаблоном ViewHolder, включенным в него, что способствует повторному использованию представления, а не его созданию каждый раз.
каковы другие преимущества использования RecycleView ?
Если оба имеют одинаковый эффект с точки зрения производительности, почему бы использовать RecycleView` ?
Edit
я обнаружил, что люди задавали подобный вопрос, и ответы не являются окончательными, добавляя их сюда для ведения записей.
Recyclerview vs Listview
должны ли мы использовать RecyclerView для замены ListView?
Почему RecyclerView не имеет onItemClickListener ()? и чем RecyclerView отличается от Listview?
5 ответов:
с появлением Android Lollipop,RecyclerView официально свой путь. RecyclerView намного больше мощный, гибкий и значительное улучшение по сравнению с ListView. Я постараюсь дать вам подробное представление об этом.
1) ViewHolder Pattern
в ListView было рекомендовано использовать шаблон ViewHolder, но это никогда не было принуждением. В случае RecyclerView, это обязательно с помощью RecyclerView.ViewHolder класса. Это одно из основных различий между ListView и RecyclerView.
Это делает вещи немного сложнее в RecyclerView, но многие проблемы, с которыми мы столкнулись в ListView, решаются эффективно.
2) LayoutManager
Это еще одно масштабное улучшение, внесенное в RecyclerView. В 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
RecycleViewRecyclerView может сделать больше, чем ListView, но класс RecyclerView сам по себе имеет меньше обязанностей, чем ListView. Из коробки, RecyclerView не:
- расположение элементов на экране
- вид анимировать
- обрабатывать любые события касания, кроме прокрутки
все это было запечено в ListView, но RecyclerView использует коллаборационист-классы, вместо этого делают эти работы.
ViewHolders, которые вы создаете, также более мощные. Они подкласс
RecyclerView.ViewHolder, который имеет кучу методовRecyclerViewиспользует.ViewHoldersзнать, в каком положении они в настоящее время связаны, как а также какие идентификаторы элементов (если они у вас есть). В процессеViewHolderбыл посвящен в рыцари. Раньше это была работа ListView, чтобы удержать весь вид элемента, иViewHolderтолько держался за маленькие кусочки его.теперь, ViewHolder держит все это в
ViewHolder.itemViewполе, которое назначается в конструкторе ViewHolder для вас.
другой плюс использования
RecycleViewэто анимация, она может быть выполнена в двух строках кодаRecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator(); recyclerView.setItemAnimator(itemAnimator);но виджет все еще сырой, например, вы не можете создать заголовок и нижний колонтитул.
больше Билл Филипп статья (перейти прочитать его!) но я подумал, что важно отметить следующее.
в ListView была некоторая двусмысленность о том, как обрабатывать события щелчка: должны ли отдельные представления обрабатывать эти события, или ListView должен обрабатывать их через OnItemClickListener? В RecyclerView, однако, ViewHolder находится в ясном положении, чтобы действовать как объект контроллера уровня строки, который обрабатывает эти виды деталей.
мы видели ранее, что LayoutManager обрабатывал представления позиционирования, а ItemAnimator обрабатывал их анимацию. ViewHolder-это последняя часть: он отвечает за обработку любых событий, которые происходят на определенном элементе, который отображает RecyclerView.
я использовал
ListViewс загрузчиком изображений скольжения, имеющим рост памяти. Затем Я заменилListViewсRecyclerView. Это не только сложнее в кодировании, но и приводит к большему использованию памяти, чемListView. По крайней мере, в моем проекте.в другой деятельности я использовал сложный список с
EditText's. В некоторых из них метод ввода может различаться, такжеTextWatcherможет быть применено. Если бы я использовалViewHolder, как я могу заменитьTextWatcherво время скроллинга? Итак, я использовалListViewбез aViewHolder, и он работает.
Comments