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?

733   5  

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 RecycleView

RecyclerView может сделать больше, чем 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 без a ViewHolder, и он работает.

Comments

    Ничего не найдено.