Подтвердить что ты не робот

Какое усовершенствование RecyclerView над ListView?

RecyclerView добавляется в v7 support library с официального Android API 22. И многие говорили, что это улучшение по сравнению с ListView, и многие краткие введения в его использование были опубликованы через Интернет. Но большинство этих статей очень просты, мелкие и пустые. Усовершенствование - это просто RecyclerView.ViewHolder, RecyclerView.ItemAnimator или RecylerView.SmoothScroller? Разметка recycling and reuse mechanism элементов во время прокрутки отличается от ListView? И что такое enhancement of RecyclerView над ListView?

Любые ответы, советы или ссылки приветствуются. Спасибо заранее.

4b9b3361

Ответ 1

В соответствии с официальной документацией RecyclerView является основным улучшением над ListView. Он содержит много новых функций, таких как ViewHolder, ItemDecorator, LayoutManager и SmoothScroller. Но одна вещь, которая, безусловно, дает ему преимущество над ListView; возможность анимации при добавлении или удалении элемента.

Просмотр держателей

В ListView определение держателей вида было предложено для сохраняя ссылки на мнения. Но это не было принуждением. Хотя по не делая этого, ListView используется для отображения устаревших данных. Другим важным недостатком не использование держателей вида может привести к тяжелой операции поиска просмотров по идентификаторам каждый раз. Это привело к laggy ListView s.

Эта проблема решена в RecylerView с помощью RecyclerView.ViewHolder. Это одно из главных различий в RecyclerView и ListView. При реализации RecyclerView этого класса используется для определения объекта ViewHolder, который используется адаптером для bind ViewHolder с положением. Еще один момент, который следует отметить здесь, - это что при реализации адаптера для RecyclerView, обеспечивая ViewHolder является обязательным. Это делает реализацию немного но решает проблемы, стоящие в ListView.

Менеджер макетов

Говоря о ListView s, доступен только один тип ListViewто есть вертикали ListView. Вы не можете реализовать ListView с помощью горизонтальная прокрутка. Я знаю, что есть способы реализовать горизонтальную прокрутите, но поверьте, он не был предназначен для работы таким образом.

Но теперь, когда мы смотрим на Android RecyclerView vs ListView, мы имеем поддержка горизонтальных коллекций. Фактически он поддерживает несколько типов списков. Для поддержки нескольких типов списков используется RecyclerView.LayoutManager класс. Это нечто новое, что ListView не имеет. RecyclerView поддерживает три типа предопределенных макетов Менеджеры:

LinearLayoutManager. Это наиболее часто используемый менеджер компоновки в случай RecyclerView. Благодаря этому мы можем создавать как горизонтальные, так и вертикальные списки прокрутки.
StaggeredGridLayoutManager - через это менеджер макетов, мы можем создавать шахматные списки. Так же, как Pinterest экран.
GridLayoutManager. Этот диспетчер компоновки может использоваться для отображения сетки, как и любая картинная галерея.

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

Анимация в списке - это совершенно новое измерение, которое бесконечно возможности. В ListView, как таковые, нет специальных положений через которые можно анимировать, добавлять или удалять предметы. Вместо позже, когда развитый андроид ViewPropertyAnimator был предложен Googles Chet Haase в этом видеоуроке для анимации в ListView. С другой стороны, сравнивая Android RecyclerView vs ListView, он имеет RecyclerView.ItemAnimator класс для обработки анимаций. Сквозь это класс может быть определен для добавления, удаления и перемещать события. Также он предоставляет DefaultItemAnimator, если вы не нужны любые настройки.

Адаптер

ListView адаптеры были просты в реализации. У них был основной метод getView где все волшебство случалось. Где были связаны взгляды на позицию. Также у них был интересный метод registerDataSetObserver, где можно установить наблюдателя в адаптер. Эта функция также присутствует в RecyclerView, но RecyclerView.AdapterDataObserver используется класс. Но точка в пользу ListView заключается в том, что он поддерживает три реализации по умолчанию адаптеров:
ArrayAdapter
CursorAdapter
SimpleCursorAdapter
В то время как RecyclerViewадаптер, обладает всеми функциональными возможностями, которые имели адаптеры ListView, кроме встроенная поддержка курсоров базы данных и ArrayLists. В RecyclerView.Adapter, теперь мы должны выполнить пользовательскую реализацию для подачи данных на адаптер. Так же, как BaseAdapter делает для ListView s. Хотя, если вы хотите узнать больше о RecyclerViewадаптера, см. Пример Android RecyclerView.

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

Чтобы отобразить пользовательские разделители в ListView, можно было легко добавить эти параметры в XML файле ListView:
android:divider="@android:color/transparent" android:dividerHeight="5dp"
Интересная часть об Android RecyclerView - это то, что на данный момент он не показывает разделитель между по умолчанию. Хотя ребята из Google, должно быть, оставили это для настройки, намеренно. Но это значительно увеличивает для разработчика. Если вы хотите добавить разделитель между элементами, вам может потребоваться выполнить пользовательскую реализацию, используя RecyclerView.ItemDecoration. Или вы можете применить взломать, используя этот файл из официальных образцов: DividerItemDecoration.java

Ответ 2

А что такое усовершенствование RecyclerView над ListView?

RecyclerView, строго говоря, не является "усилением" над "t21 > ". ListView действительно что-то делает; RecyclerView, само по себе, нет. Более точное сравнение будет состоять в том, что структура RecyclerView является улучшением по сравнению с AdapterView и до некоторой степени родительским классом AbsListView ListView и GridView.

RecyclerView основное внимание уделяется утилизации виджета и валовому ребенку View. Он делегирует все остальное другим классам. AdapterView делает гораздо меньше этого, что затрудняет функциональное расширение.

Примечание:

  • Укладка дочерних элементов в прокручиваемом пространстве RecyclerView делегируется менеджерам. Следовательно, не только три корабля с recyclerview-v7 (список, сетка, сетка в шахматном порядке), но другие могут быть разработаны для альтернативных сценариев (например, перекрывающиеся дети для типа StackView или Gallery).

  • Обновления от адаптеров могут быть намного более мелкозернистыми. С AdapterView вам в значительной степени придется перерисовать весь вид (например, ListView и все его строки) при любом изменении значимости, особенно при добавлении и удалении элементов. Механизм обновления в адаптерах RecyclerView указывает конкретные изменения, которые меняются. Это не только требует меньшего времени обработки, но и позволяет активировать анимированные эффекты, предлагаемые RecyclerView (опять же, с возможностью замены) для добавления, перемещения и удаления элементов.

  • Другие вещи, которые были "запечены в" ListView, как разделители чертежей, теперь вытягиваются в точки расширения, например, ItemDecorator. Теперь вы можете выбрать, как "украсить" предметы, разделители строк или коробки или разделители цветных полосок или что угодно. Украшение не ограничивается "разделителями", но может влиять на что-либо в представлениях, которые по той или иной причине вы считаете отдельно от самих представлений.

RecyclerView, однако, довольно сложно начать. То, что вы получаете от ListView "из коробки", требует гораздо больше кода - вашей или сторонней библиотеки - для соответствия. Для опытных разработчиков это особенность, поскольку код можно заменить другим кодом. Для новичков это ошибка, потому что существует более крутая кривая обучения для RecyclerView, IMHO.

Ответ 3

  • Просмотр держателей

    RecylerView с помощью класса RecyclerView.ViewHolder. Это один основных различий в RecyclerView и ListView. когда реализация RecyclerView этого класса используется для определения ViewHolder объект, который используется адаптером для привязки ViewHolder с позицией

  • Диспетчер компоновки

    поддержка горизонтальных коллекций. Фактически он поддерживает несколько типов списков. Для поддержки нескольких типов списков используется Класс RecyclerView.LayoutManager. Это нечто новое, что ListView не имеет. RecyclerView поддерживает три типа предопределенных макетов Менеджеры: LinearLayoutManager - это наиболее часто используемый макет менеджер в случае RecyclerView. Благодаря этому мы можем создать как горизонтальные и вертикальные списки прокрутки. StaggeredGridLayoutManager - С помощью этого менеджера макетов мы можем создавать шахматные списки. Как экран Pinterest. GridLayoutManager - этот менеджер компоновки может быть используется для отображения сеток, как и любая картинная галерея.

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

    RecyclerView имеет класс RecyclerView.ItemAnimator для обработки анимации. Через этот класс пользовательские анимации могут быть определены для события добавления, удаления и перемещения элементов. Также он обеспечивает DefaultItemAnimator, если вам не нужны какие-либо настройки.

  • Адаптер

    В RecyclerView.Adapter на данный момент мы должны создать собственный для передачи данных в адаптер. Как и базовый адаптер для ListViews.

Источник: http://www.truiton.com/2015/03/android-recyclerview-vs-listview-comparison/