Ответ 1
В соответствии с официальной документацией RecyclerView
является основным улучшением над ListView
. Он содержит много новых функций, таких как ViewHolder
, ItemDecorator
, LayoutManager
и SmoothScroller
. Но одна вещь, которая, безусловно, дает ему преимущество над ListView
; возможность анимации при добавлении или удалении элемента.
Просмотр держателей
В
ListView
определение держателей вида было предложено для сохраняя ссылки на мнения. Но это не было принуждением. Хотя по не делая этого,ListView
используется для отображения устаревших данных. Другим важным недостатком не использование держателей вида может привести к тяжелой операции поиска просмотров по идентификаторам каждый раз. Это привело к laggyListView
s.Эта проблема решена в
RecylerView
с помощью RecyclerView.ViewHolder. Это одно из главных различий вRecyclerView
иListView
. При реализацииRecyclerView
этого класса используется для определения объектаViewHolder
, который используется адаптером для bindViewHolder
с положением. Еще один момент, который следует отметить здесь, - это что при реализации адаптера дляRecyclerView
, обеспечиваяViewHolder
является обязательным. Это делает реализацию немного но решает проблемы, стоящие вListView
.
Менеджер макетов
Говоря о
ListView
s, доступен только один типListView
то есть вертикалиListView
. Вы не можете реализоватьListView
с помощью горизонтальная прокрутка. Я знаю, что есть способы реализовать горизонтальную прокрутите, но поверьте, он не был предназначен для работы таким образом.Но теперь, когда мы смотрим на Android
RecyclerView
vsListView
, мы имеем поддержка горизонтальных коллекций. Фактически он поддерживает несколько типов списков. Для поддержки нескольких типов списков используетсяRecyclerView.LayoutManager
класс. Это нечто новое, что ListView не имеет.RecyclerView
поддерживает три типа предопределенных макетов Менеджеры:LinearLayoutManager. Это наиболее часто используемый менеджер компоновки в случай RecyclerView. Благодаря этому мы можем создавать как горизонтальные, так и вертикальные списки прокрутки.
StaggeredGridLayoutManager - через это менеджер макетов, мы можем создавать шахматные списки. Так же, как Pinterest экран.
GridLayoutManager. Этот диспетчер компоновки может использоваться для отображения сетки, как и любая картинная галерея.
Аниматор предметов
Анимация в списке - это совершенно новое измерение, которое бесконечно возможности. В ListView, как таковые, нет специальных положений через которые можно анимировать, добавлять или удалять предметы. Вместо позже, когда развитый андроид ViewPropertyAnimator был предложен Googles Chet Haase в этом видеоуроке для анимации в
ListView
. С другой стороны, сравнивая AndroidRecyclerView
vsListView
, он имеет 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