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

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

 Разница между ListView и RecyclerView

Для начала выясним, что такое представление (обозначаемое корнем “View” в названии каждого виджета).

Что такое представление?

В Android Studio доступны различные типы представлений для разработки Android-приложений: ImageView, TextView, ListView и т. д. Эти типы представлений помогают сделать удобным пользовательский интерфейс. Представление можно перетащить в раздел XML-дизайна или просто написать код в разделе XML-кода.

Прежде чем перейти к обсуждению различий между ListView и RecyclerView, разберемся в том, что такое ListView и RecyclerView?

ListView  —  это один из типов представлений, который показывает данные в формате с вертикальной прокруткой. Он повышает удобство работы пользователя, поскольку делает список легко доступным для понимания.

RecyclerView  —  виджет, наделенный дополнительными компонентами: Adapter соединяет между собой данные, которые нужно поместить в список, а LayoutManager (менеджер макетов) отвечает за правильное расположение данных/элементов списка на экране. Различают 3 типа LayoutManager.

  • LinearLayoutManager:
  • GridLayoutManager:
  • StaggeredGridLayoutManager:

Различия между ListView и RecyclerView

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

  • RecyclerView  —  это более новый и более гибкий вариант представления списков в Android-приложениях. В RecyclerView применяется модель ViewHolder для эффективного использования представлений при навигации пользователя по списку. ViewHolder описывает представление элемента и метаданные о его месте в RecyclerView.
  • По сравнению с RecyclerView, Listview является более старой и более простой в использовании структурой.
  • Listview обеспечивает упрощенный подход к отображению списков данных, используя ArrayAdapter для управления данными и массив представлений для их отображения.
  • Одним из основных преимуществ RecyclerView является его гибкость. Он позволяет создавать сложные макеты списков с несколькими типами представлений.
  • RecyclerView также обладает встроенной поддержкой анимации, что позволяет легко добавлять в приложение плавную прокрутку и другие визуальные эффекты.
  • С другой стороны, одним из главных преимуществ ListView является его простота. Его легче настроить и использовать по сравнению с RecyclerView, особенно для базовых макетов списков. Кроме того, ListView обеспечивает встроенную поддержку выбора элементов и управления взаимодействием с пользователем.
  • Однако у ListView есть и некоторые недостатки. Например, он может быть менее эффективным по сравнению с RecyclerView, особенно при работе с большими списками данных. Кроме того, ListView имеет ограниченную поддержку сложных макетов списков и пользовательской анимации, что может затруднить создание более сложных пользовательских интерфейсов.

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

Пример использования ListView в Android-приложении

<!-- Определение ListView в файле layout в Activity_main_xml -->
<ListView
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)

}

В этом примере кода сначала определяем ListView в файле layout, а затем настраиваем его в Activity или Fragment. Создаем ArrayAdapter для управления данными и массив представлений для их отображения. Устанавливаем Adapter для ListView с помощью метода setAdapter().

Обратите внимание, что для отображения каждого элемента списка используется макет simple_list_item_1, предоставляемый фреймворком Android. Его можно настроить так, как вам нужно.

В коде также создана функция setOnItemClickListener(). Она позволяет управлять взаимодействием с пользователем, например щелчками по отдельным элементам списка.

Пример использования RecyclerView в Android-приложении

<!-- Определите Recycleview в файле layout в Activity_main_xml -->
<androidx.recyclerview.widget.RecyclerView
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" />
// В Activity или Fragment настройте RecyclerView и Adapter
binding.recyclerViewListText.layoutManager=LinearLayoutManager(this)
val usersAdapter = UsersAdapter(userList)
binding.recyclerViewListText.adapter=usersAdapter
// Определение ViewHolder для Adapter
class UsersHolder(val binding: RowListBinding) : RecyclerView.ViewHolder(binding.root){


}
// Определение Adapter для 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

// кликаем и выводим

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

}

В этом примере сначала определяем RecyclerView в файле layout, а затем настраиваем его в Activity или Fragment. Создаем Adapter для RecyclerView, расширяя класс RecyclerView.Adapter и реализуя необходимые методы. В данном случае создаем ViewHolder для каждого элемента списка и привязываем к нему данные в методе onBindViewHolder(). Реализуем метод getItemCount() для возврата размера списка данных.

Обратите внимание, что для управления макетом в RecyclerView используется LinearLayoutManager. Это встроенный LayoutManager, который упорядочивает элементы в вертикальном списке.

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

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Zzelii: Differences between listView and recyclerView ?

Предыдущая статьяТоп-13 пакетов Python в 2023 году
Следующая статьяKotlin: продвинутые техники функционального программирования