Поговорим о различиях между RecyclerView и ListView — виджетами, предназначенными для отображения данных в Android-разработке. Рассмотрим ключевые особенности RecyclerView и ListView, плюсы и минусы, а также случаи использования каждого виджета.
![](https://nuancesprog.ru/wp-content/uploads/2023/12/0-17NtjupdjVu7b8fT.png)
Для начала выясним, что такое представление (обозначаемое корнем “View” в названии каждого виджета).
Что такое представление?
В Android Studio доступны различные типы представлений для разработки Android-приложений: ImageView, TextView, ListView и т. д. Эти типы представлений помогают сделать удобным пользовательский интерфейс. Представление можно перетащить в раздел XML-дизайна или просто написать код в разделе XML-кода.
Прежде чем перейти к обсуждению различий между ListView и RecyclerView, разберемся в том, что такое ListView и RecyclerView?
ListView — это один из типов представлений, который показывает данные в формате с вертикальной прокруткой. Он повышает удобство работы пользователя, поскольку делает список легко доступным для понимания.
RecyclerView — виджет, наделенный дополнительными компонентами: Adapter соединяет между собой данные, которые нужно поместить в список, а LayoutManager (менеджер макетов) отвечает за правильное расположение данных/элементов списка на экране. Различают 3 типа LayoutManager.
- LinearLayoutManager:
![](https://nuancesprog.ru/wp-content/uploads/2023/12/0-jutlG0u9m_BlYJ9l.png)
- GridLayoutManager:
![](https://nuancesprog.ru/wp-content/uploads/2023/12/0-LoJlAxEmXBGciLkT.png)
- StaggeredGridLayoutManager:
![](https://nuancesprog.ru/wp-content/uploads/2023/12/0-AoepfvblM2jSQb-Y.png)
Различия между 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 проще использовать для базовых макетов списков. Понимая плюсы и минусы каждого варианта, вы сможете выбрать подходящий для своего приложения, чтобы гарантировать идеальный пользовательский опыт.
Читайте также:
- Kotlin-реализация RecyclerView на Android
- Ошибка дублированного класса в Android для Kotlin
- Управляем зависимостями: возможности каталога версий и convention-плагина
Читайте нас в Telegram, VK и Дзен
Перевод статьи Zzelii: Differences between listView and recyclerView ?