В чем отличие listview от recyclerview
Перейти к содержимому

В чем отличие listview от recyclerview

  • автор:

В чем разница между ListView и RecyclerView?

RecyclerView был создан как улучшенная замена ListView . Основные отличия следующие:

1. RecyclerView переиспользует ячейки списка при скроллинге. Для реализации этой логики используется класс ViewHolder .
В ListView тоже можно реализовать адаптер с ViewHolder , но это необязательно и требует написания бойлерплейт кода.

2. RecyclerView разделяет хранение данных и логику отображения. С RecyclerView легко изменить лэйаут в рантайме, используя различные реализации абстрактного класса LayoutManager .

3. Логика отображения анимации элементов вынесена из RecyclerView в класс ItemAnimator .

В целом RecyclerView имеет более гибкий API, чем ListView , благодаря хорошему дизайну и соответствию принципу единственной ответсвенности.

RecyclerView и ListView. В чем разница?

Поскольку мы Android разработчики, нам не сложно реализовать прокручиваемый список тем способом, который соответствует задаче. Но два наиболее популярных пути — ListView и RecyclerView.

Первый из них прекрасный виджет, который был доступен с API 1. До Android Lollipop мы главным образом использовали этот способ, что было довольно неплохо — API был интуитивно понятен. Но к сожалению мы могли создать только вертикально прокручиваемый список, и чтобы он прокручивался плавно, прриходилось делать все надлежлащим способом. Кроме того, класс ListView довольно тяжелый — у него множество обязанностей. Всякий раз, когда нам требовалось обработать список, т.е. сконфигурировать его, единственный путь сделать это был через объект ListView внутри адаптера.

Сегодня мы используем RecyclerView. Как я упоминал, он появился в Android Lollipop и сразу изменил правила игры. Большинство вещей, которые мы ненавидели в ListView были убраны или изменены в RecyclerView. По умолчанию, мы получали больше возможностей. Создание макетов (LayoutManager) отделено, и мы получили больше свободы для манипуляции с данными, чем манипулирование только внутри адаптера.

Если вы хотите узнать больше об этих механизмах, вы можете глянуть мои статьи, которые рассказывают, как реализовать ListView и RecyclerView

(От переводчика) O RecyclerView можно узнать больше в этой моей заметке https://ziginsider.github.io/RecyclerView/

Итак, опишем наиболее существенные различия между этими двумя механизмами..

ViewHolder

Паттерн ViewHolder помогает сделать прокрутку нашего списка плавной. Он сохраняет ссылки на элементы списка, чтобы затем адаптер мог их переиспользовать. Благодаря этому надувание View элемента (inflating) и вызов дорогого метода findViewById() происходит всего пару раз, а не для каждого элемента списка.

Адаптер RecyclerView в обязательном порядке заставляет нас реализовать надувание элемента списка с помощью двух методов — onCreateViewHolder() и onBindViewHolder().

ListView, с другой стороны, не делает обязательным реализацию ViewHolder. И, если мы не реализуем надувание сами, внутри getView(), мы останемся без эффективной прокрутки в списке.

LayoutManager

LayoutManager берет на себя ответсвенность за макетирование представления элементов. Благодаря этому у RecyclerView нет ответственности за поозиционирование элементов в списке. LayoutManager дает возможность выбирать позиционирование элементов списка относительно друг друга и выбирать способ прокрутки. Например, если нам нужен вертикальный или горизонтальный список, мы выбираем LinearLayoutManager. Для табличного представления более подходит GridLayoutManager.

Раньше, с помощью ListView, мы могли создать список только с вертикальной прокруткой. Это было не удобно. Чтобы реализовать табличное представление, мы должны были использовать другой виджет — GridView.

ItemDecoration

Обязанности ItemDecoration просты в теории — декорировать элементы списка (рисование за ними, перед ними, между ними)- но нетривиальны в реализации. Вы должны наследоваться от класса ItemDecoration и реализовать ваше решение. У RecyclerView по-умолчанию нет разделителей между строк — это соответствует гайдлайнам Material Design. Однако, если нам необходим разделитель, мы можем использовать DividerItemDecoration и добавить его в RecyclerView.

В случае ListView мы можем добавить разделитель прямо в описании layout ListView в файле xml. Но у нас нет гибкого механизма, наподобие ItemDecoration, для реализации разделителя.

ItemAnimator

Последнее, но не менее важное отличие RecyclerView это наличие ItemAnimator. Как мы можем догадаться, он обрабатывает анимации появления или исчезновения элементов списка, или их изменения. По-умолчанию анимации RecyclerView красивые и плавные. Конечно, мы можем изменить эти анимации, реализовав свой ItemAnimator, но это также не очень просто. Чтобы упростить себе жизнь, мы можем расширить класс SimpleItemAnimator и реализовать методы, которые нам нужны (просто добавить анимации во ViewHolder наших View)

Честно говоря, реализация анимации в ListView была болью в заднице. Опять же, нам нужно было выяснять как мы справимся с этой задачей. Ничего хорошего. Я рад, что это закончилось.

Notifying adapter

У нас есть несколько классных механизмов уведомления (notify) в адаптере RecyclerView. Мы все еще можем использовать notifyDataSetChanged(), но, если нам необходимо изменить только один элемент списка, к нашим услугам notifyItemInserted(), notifyItemRemoved() или даже notifyItemChanged() и т.д. Мы должны использовать подходящее уведомление, чтобы сработала надлежащая анимация. Используя ListView мы можем использовать лишь notifyDataSetChanged(), а со всем остальным мы должны были справляться сами.

Вывод

ListView служил нам долгое время. Мы могли покрыть большинство случаев с его помощью. Но потребности пользователей сегодня более сложные. Дизайн списков становится все более и более сложным и ListView уже не справляется. Material Design принес другие изменения — красивее, но сложнее в реализации.

К счастью, когда был представлен RecyclerView, многие проблемы ушли. Этот механизм более эффективен по-умолчанию, анимации проще, макетирование проще и API намного приятнее.

Поэтому, если вы когда-либо задумываетесь какой из них выбрать — ваша первая мысль определенно должна быть о RecyclerView.

NB от переводчика: Так и хочется добавить в конце статьи “Аминь!”. Автор мастер рассказывать очевидные вещи. Но, мне кажется, он не совсем ясно дал понять, что RecyclerView намеренно сделан более сырым (т.е. “не из коробки”), чтобы быть более гибким в реализации. И он определенно более сложен. Но это не должно пугать начинающих, т.к. c практикой реализация его не вызывает сложностей. Но, однако, есть очень много хитростей, которые я пока только начал описывать в заметке https://ziginsider.github.io/RecyclerView/

А в тривиальных случаях вполне уместно использовать ListView.

14 11 2017

  • Java
    • Android Quizzes 2021
    • Реактивное программирование с применением RxJava
    • Android изнутри. Часть I
    • Большие запросы к базе данных на Android
    • ProgressDialog умер, да здравствует ProgressBar!
    • Введение в Android Architecture Components
    • Firebase Tutorial. Part II. — Как автоматически развернуть сайт на хостинге Firebase из GitHub-репозитория?
    • Firebase Tutorial — Firebase database. Part I.
    • У меня было 10 Android собеседований за последние два года. (перевод)
    • Android Tutorial — Facebook SDK Login. Part III. Get Posts.
    • Android Tutorial — Facebook SDK Login. Part II. Share content.
    • Android Tutorial — Facebook SDK Login. Part I.
    • Оптимизация прокрутки вложенных в друг друга RecyclerView
    • RecyclerView и ListView. В чем разница?
    • Различные типы Item View в RecyclerView
    • Тесты сделают вас счастливее (перевод).
    • Пример анимации в Android с использованием TimeAnimator.
    • Android. Два способа записать результат Timer в пользовательский поток (UI Thread).
    • Видео. Architecture Components. Solving the Lifecycle Problem. Перевод субтитров.
    • Зачем нужны интерфейсы в ООП?
    • Видео. Architecture Components. Improve Your App’s Design. Перевод субтитров.
    • Видео. Google I/O ’17 Architecture Components — Introduction. Перевод субтитров.
    • Препарирование ContentProvider
    • REST. Описание концепции. Особенности реализации API. Максимально кратко.
    • Лоадеры (loaders) в Android. Для чего нужны. Конспект.
    • Volley vs Retrofit. Описание библиотек REST API.
    • Краткий конспект реализации Garbage Collector в Java
    • Препарирование RecyclerView
    • Лексикон прописных истин Android
    • Android Quizzes 2021
    • Review Currency App task.
    • Foreground Service Android demo App — stopwatch
    • Simple Custom View demo App — circular progress bar
    • Simple RecyclerView demo App — Stopwatch
    • RS School Android 2021
    • Реактивное программирование с применением RxJava
    • Android изнутри. Часть I
    • Большие запросы к базе данных на Android
    • ProgressDialog умер, да здравствует ProgressBar!
    • Введение в Android Architecture Components
    • Firebase Tutorial. Part II. — Как автоматически развернуть сайт на хостинге Firebase из GitHub-репозитория?
    • Firebase Tutorial — Firebase database. Part I.
    • У меня было 10 Android собеседований за последние два года. (перевод)
    • Android Tutorial — Facebook SDK Login. Part III. Get Posts.
    • Android Tutorial — Facebook SDK Login. Part II. Share content.
    • Android Tutorial — Facebook SDK Login. Part I.
    • Оптимизация прокрутки вложенных в друг друга RecyclerView
    • RecyclerView и ListView. В чем разница?
    • Различные типы Item View в RecyclerView
    • Тесты сделают вас счастливее (перевод).
    • Пример анимации в Android с использованием TimeAnimator.
    • Android. Два способа записать результат Timer в пользовательский поток (UI Thread).
    • Видео. Architecture Components. Solving the Lifecycle Problem. Перевод субтитров.
    • Зачем нужны интерфейсы в ООП?
    • Видео. Architecture Components. Improve Your App’s Design. Перевод субтитров.
    • Видео. Google I/O ’17 Architecture Components — Introduction. Перевод субтитров.
    • Препарирование ContentProvider
    • REST. Описание концепции. Особенности реализации API. Максимально кратко.
    • Лоадеры (loaders) в Android. Для чего нужны. Конспект.
    • Volley vs Retrofit. Описание библиотек REST API.
    • Несколько примеров на Kotlin
    • Препарирование RecyclerView
    • Лексикон прописных истин Android
    • Xamarin.Forms. Layouts — виды
    • Xamarin.Forms. Оптимизация ListView.
    • Xamarin.Forms. Ускорение отображения окна (Activity)
    • Платформозависимость на Xamarin
    • Simple RecyclerView demo App — Stopwatch
    • Оптимизация прокрутки вложенных в друг друга RecyclerView
    • RecyclerView и ListView. В чем разница?
    • Различные типы Item View в RecyclerView
    • Препарирование RecyclerView
    • RecyclerView и ListView. В чем разница?
    • Xamarin.Forms. Оптимизация ListView.

    Differences between listView and recyclerView ?

    Hello everyone . Today I will talk about differences between RecyclerView and ListView, which are prepared for data display in the Android world. In this article, we will explore the key differences between RecyclerView and ListView, their pros and cons, and when to use each one.

    First, let’s look at what a view is.

    What is View ?

    In Android Studio, there are different types of views to design our android applications. Views such as ImageView, TextView, ListView, etc. These types of views help you to make the user interface friendly. You can drag or drop the view in the XML design section or you can simply write the code in the XML code section.

    Before going to discuss the differences between ListView and RecyclerView, let’s see what are ListView and RecyclerView?

    ListView is one of the views from the view group which shows the data in a vertical scrollable format. It enhances the user experience as it makes the list easily understandable for users.

    Recycler View; Allows the adapter of the data to be listed. RecyclerView also has a Layout Manager. In other words, using this feature allows data/items to be listed on the screen as desired. There are 3 types of Layout Managers ;

    Now let’s discuss the differences between ListView and RecyclerView.

    I will share my own experiences in this Article , When it comes to displaying large lists of data in Android apps, two commonly used options are RecyclerView and ListView. Both have their own advantages and disadvantages, and choosing the right one for your app can make a big difference in terms of performance and user experience. their pros and cons, and when to use each one.

    • RecyclerView is a newer and more flexible option for listing Android apps. RecyclerView uses a ViewHolder model to efficiently use views as the user navigates through the list. A ViewHolder describes an item view and metadata about its place within the RecyclerView.
    • Listview is an older structure than recycler view.
    • Compared to RecyclerView, it is simpler to use and provides a simpler approach to displaying lists of data. ListView uses an ArrayAdapter to manage data and an array of views to display it.
    • One of the main advantages of RecyclerView is its flexibility. It also allows you to create complex list layouts with multiple view types.
    • RecyclerView also provides built-in support for animations, making it easy to add smooth scrolling and other visual effects to your app.
    • On the other hand, one of the main advantages of ListView is its simplicity. It is easier to set up and use compared to RecyclerView, especially for basic list layouts. ListView also provides built-in support for selecting items and managing user interactions. However, ListView also has some disadvantages. For example, it may be less efficient compared to RecyclerView, especially for large lists of data. ListView also has limited support for complex list layouts and custom animations, which can make it difficult to create more advanced user interfaces.
    • In summary, both RecyclerView and ListView have their own pros and cons, and choosing the right one for your application depends on your specific needs. If you need to display complex list layouts with custom animations and smooth scrolling, RecyclerView is probably the way to go. On the other hand, if you need a simple and straightforward way to display basic lists of data, ListView may be a better choice.

    Now let’s take a look at the sample code for using ListView in your Android app:


    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/toolbar" />
    // ListView -Adapter 
    val adapter = ArrayAdapter(this,android.R.layout.simple_list_item_1,usersList.map < users ->users.name >)
    binding.listView.adapter=adapter
    binding.listView.onItemClickListener = AdapterView.OnItemClickListener < adapterView, view, i, l ->
    val intent = Intent(this@MainActivity,UsersDetailActivity::class.java)
    startActivity(intent)

    >

    In this code example, we first define the ListView in the layout file and then set it in the activity or fragment. We create an ArrayAdapter to manage the data and an array of views to display it. We also set the adapter for the ListView using the setAdapter() method.

    Note that we are using the simple_list_item_1 layout provided by the Android framework to display each item in the list. You can customize it.

    We also created the setOnItemClickListener() function. This allows us to manage user interactions such as clicks on individual items in the list.

    using RecyclerView in your Android app :


    android:id="@+id/recyclerViewListText"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
    // In your activity or fragment, set up the RecyclerView and adapter
    binding.recyclerViewListText.layoutManager=LinearLayoutManager(this)
    val usersAdapter = UsersAdapter(userList)
    binding.recyclerViewListText.adapter=usersAdapter
     
    // Define the ViewHolder for your adapter
    class UsersHolder(val binding: RowListBinding) : RecyclerView.ViewHolder(binding.root)

    >
    // Define the adapter for your RecyclerView
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UsersHolder val binding=RowListBinding.inflate(LayoutInflater.from(parent.context),parent,false)
    return UsersHolder(binding)
    >

    override fun getItemCount(): Int return userList.size
    >

    override fun onBindViewHolder(holder: UsersHolder, position: Int) holder.binding.textrowList.text =userList.get(position).name

    // click and show

    holder.itemView.setOnClickListener val intent = Intent(holder.itemView.context,UsersDetailsActivity::class.java)//tıklanan gorunumden -> detail sayfas
    holder.itemView.context.startActivity(intent)
    >

    >

    In this code sample, we first define the RecyclerView in the layout file and then set it up in the activity or fragment. We create an adapter for the RecyclerView by extending the RecyclerView.Adapter class and implementing the necessary methods. In this case, we create a ViewHolder for each item in the list and bind the data to it in the onBindViewHolder() method. We also implement the getItemCount() method to return the size of the data list.

    Note that we are using the LinearLayoutManager to manage the layout of the RecyclerView. This is a built-in layout manager that arranges the items in a vertical list.

    RecyclerView and ListView are useful options for displaying lists of data in Android applications. RecyclerView provides better performance and flexibility for more complex layouts, while ListView is easier to use for basic list layouts. By understanding the pros and cons of each option, you can choose the right one for your app and provide a better user experience.

    In my next article, we will make a simple contact list application created with lstview and recyclerview to better understand these differences. Have a nice reading, friends.

    Bibliographies :

    RecyclerView

    RecyclerView — это группа представлений для отображения коллекций; он предназначен для более гибкой замены старых групп представлений, таких как ListView и GridView. В этом руководстве объясняется, как использовать и настраивать RecyclerView в приложениях Xamarin.Android.

    RecyclerView

    Многие приложения должны отображать коллекции одного типа (например, сообщения, контакты, изображения или песни); часто эта коллекция слишком велика, чтобы она соответствовала экрану, поэтому коллекция представлена в небольшом окне, которое может плавно прокручивать все элементы в коллекции. RecyclerView — это мини-приложение Android, отображающее коллекцию элементов в списке или сетке, что позволяет пользователю прокручивать коллекцию. Ниже приведен снимок экрана примера приложения, которое используется RecyclerView для отображения содержимого почтового ящика в вертикальном списке прокрутки:

    Example app using RecyclerView to list inbox messages

    RecyclerView предлагает две убедительные функции:

    • Она имеет гибкую архитектуру, которая позволяет изменять его поведение путем подключения к предпочитаемым компонентам.
    • Она эффективна с большими коллекциями, так как она повторно использует представления элементов и требует использования держателей представлений для кэширования ссылок на представление.

    В этом руководстве объясняется, как использовать RecyclerView в приложениях Xamarin.Android. В нем объясняется, как добавить RecyclerView пакет в проект Xamarin.Android, а также описывается, как RecyclerView функции в обычном приложении. В реальных примерах кода показано, как интегрироваться RecyclerView в приложение, как реализовать щелчки по представлению элементов и как обновить при RecyclerView изменении базовых данных. В этом руководстве предполагается, что вы знакомы с разработкой Xamarin.Android.

    Требования

    Хотя RecyclerView часто связан с Android 5.0 Lollipop, он предлагается в качестве библиотеки поддержки — RecyclerView работает с приложениями, предназначенными для уровня 7 (Android 2.1) и более поздних версий. Для использования RecyclerView в приложениях на основе Xamarin необходимо следующее:

    • Xamarin.Android — Xamarin.Android 4.20 или более поздней версии необходимо установить и настроить с помощью Visual Studio или Visual Studio для Mac.
    • Проект приложения должен включать пакет Xamarin.Android.Support.v7.RecyclerView . Дополнительные сведения об установке пакетов NuGet см. в пошаговом руководстве. Включение NuGet в проект.

    Обзор

    RecyclerView можно считать заменой ListView GridView мини-приложений и мини-приложений в Android. Как и его предшественники, RecyclerView предназначен для отображения большого набора данных в небольшом окне, но RecyclerView предлагает дополнительные параметры макета и лучше оптимизирован для отображения больших коллекций. Если вы знакомы с ListView , существует несколько важных различий между ListView и RecyclerView :

    • RecyclerView немного сложнее использовать: необходимо написать больше кода для использования RecyclerView по сравнению с ListView .
    • RecyclerView не предоставляет предопределенный адаптер; Необходимо реализовать код адаптера, который обращается к источнику данных. Однако Android включает несколько стандартных адаптеров, которые работают с ListView и GridView .
    • RecyclerView не предлагает событие щелчка элемента, когда пользователь нажимает элемент; Вместо этого события щелчка элементов обрабатываются вспомогательными классами. В отличие от этого, ListView предлагает событие щелчка по элементу.
    • RecyclerView повышает производительность путем перезапуска представлений и применения шаблона держателя представления, что устраняет ненужные подстановки ресурсов макета. Использование шаблона держателя представления является необязательным. ListView
    • RecyclerView основан на модульной конструкции, которая упрощает настройку. Например, можно подключить другую политику макета без значительных изменений кода в приложении. Напротив, ListView относительно монолитный в структуре.
    • RecyclerView включает встроенные анимации для добавления и удаления элементов. ListView Анимации требуют дополнительных усилий от части разработчика приложений.

    Разделы

    Части и функции RecyclerView

    В этом разделе объясняется, как Adapter и LayoutManager ViewHolder работать вместе с вспомогательными классами для поддержки RecyclerView . В нем представлен общий обзор каждого из этих вспомогательных классов и объясняется, как они используются в приложении.

    Пример Basic RecyclerView

    В этом разделе описаны сведения, предоставляемые в компонентах и функциях RecyclerView, предоставляя реальные примеры реализации различных RecyclerView элементов для создания приложения для просмотра фотографий в реальном мире.

    Расширение примера RecyclerView

    В этом разделе добавляется дополнительный код в пример приложения, представленного в примере A Basic RecyclerView, чтобы продемонстрировать, как обрабатывать события щелчка элемента и обновляться RecyclerView при изменении базового источника данных.

    Итоги

    В этом руководстве представлено мини-приложение Android RecyclerView ; он объяснил, как добавить RecyclerView библиотеку поддержки в проекты Xamarin.Android, как RecyclerView перезагнуть представления, как он применяет шаблон держателя представления для эффективности и как различные вспомогательные классы, составляющие RecyclerView совместную работу для отображения коллекций. В нем представлен пример кода для демонстрации RecyclerView интеграции в приложение, он объяснил, как адаптировать RecyclerView политику макета путем подключения к разным диспетчерам макетов и описано, как обрабатывать события щелчка элемента и уведомлять об RecyclerView изменениях источника данных.

    Дополнительные сведения см RecyclerView . в справочнике по классу RecyclerView.

    Связанные ссылки

    • RecyclerViewer (пример)
    • Общие сведения о Lollipop
    • RecyclerView

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *