Intereting Posts
RecyclerView отключает последний элемент Обновить текущий фрагмент (данные ListView), оставшиеся в одной активности GetFragmentManager с API8 Android Studio: используйте AndroidAnnotations Не подключен адаптер; Пропуская макет Использование тегов фрагментов Отключить анимацию для тестов в облачных сервисах (программно?) React Native – java.lang.RuntimeException: местоположение SDK не найдено. Определить местоположение с помощью sdk.dir в local.properties Как я могу проверить подписанные данные для In-App Billing Android Market с помощью Java (Servlet) HTTPPost multipart (загрузить файл) с Java на Python webapp2 Создание тестовых зависимостей при использовании Dagger2 Проблемы с Android 4.0 и 4.1 Bluetooth. Обнаружение сломанной связи и падающего спаривания Как добавить прописные / промежуточные промежуточные элементы просмотра списка и полосу прокрутки Как изменить ориентацию буфера обратного вызова предварительного просмотра камеры? Предварительный просмотр мини-экрана в реальном времени

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

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

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

Solutions Collecting From Web of "Что такое усовершенствование RecyclerView через ListView?"

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

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

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

Отметить:

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

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

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

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

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

Держатели для просмотра

В ListView определение держателей просмотров было предложено для хранения ссылок на представления. Но это не было принуждением. Хотя, не делая этого, ListView использовал show stale data. Еще одним серьезным недостатком не использования держателей просмотров может привести к тяжелой работе по поиску мнений по идентификаторам каждый раз. Это привело к задержкам ListView .

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

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

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

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

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

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

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

адаптер

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

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

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

  1. Держатели для просмотра

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

  2. Менеджер макета

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

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

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

  4. адаптер

    В RecyclerView.Adapter на данный момент мы должны создать пользовательскую реализацию для передачи данных в адаптер. Точно так же, как BaseAdapter делает для ListViews.

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