Intereting Posts
Ошибка: выполнение выполнено для задачи ': app: mergeDebugResources'. > Не удалось выполнить хэширование файлов, см. Журналы для подробностей Библиотеки больше не добавляются в APK после перехода на ADT 22 Как переместить представление в Android? Как добавить границу вокруг линейного макета, кроме как внизу? Как установить цвет выделения для элемента ListView? Android: разница между BATTERY_STATUS_DISCHARGING и BATTERY_STATUS_NOT_CHARGING Что такое «пакет» в приложении для Android Как скачать файл с сервисом в Android? Вызвать метод фрагмента из адаптера Как реализовать мой собственный кеш диска с библиотекой picasso – Android? Что позволяет Android Eclipse LogCat? Как отправить информацию о местоположении Google Maps через SMS в качестве ссылки Как создать тост из IntentService? Он застревает на экране Как центрировать камеру так, чтобы маркер находился в нижней части экрана? (Google map api V2 Android) Как я могу программно создать резервный файл sqlite на SD-карте?

Должны ли мы использовать RecyclerView для замены ListView?

Android Docs говорят:

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

Фактически ListView может сделать все вышеперечисленное, если эффективность не имеет значения, и мы обнаружили много проблем, когда мы используем RecyclerView для замены ListView :

  1. Не существует onItemClickListener () для выбора элемента списка – решение

  2. Нет разделителей между элементами списка – решение

  3. Нет встроенного переключателя наложения, нет визуальной обратной связи при нажатии элемента списка – решение

  4. Нет addHeaderView для заголовка списка – решение

Возможно, больше проблем …

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

ВОПРОС:

  • Стоит ли заменять ListView на RecyclerView полностью?
  • Если нет, то в этом случае лучше использовать RecyclerView вместо ListView и наоборот?

Спасибо за внимание и любую идею!

Solutions Collecting From Web of "Должны ли мы использовать RecyclerView для замены ListView?"

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

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

Основное изменение, которое необходимо сделать для миграции, – в вашем адаптере. Если вы хотите продолжать звонить notifyDataSetChanged , вы теряете большую часть преимуществ анимации и привязки. Но если вы можете изменить свой адаптер для отправки подробных уведомлений о событиях (добавленных / удаленных / перемещенных / обновленных), вы получите гораздо лучшую анимацию и производительность. Эти события позволяют RecyclerView выбирать правильные анимации, а также помогают избежать ненужных вызовов onBind . Вы получите огромную выгоду, если ваши представления элементов сложны. Кроме того, в будущем RecyclerView будет больше компонентов.

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

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

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

Я написал подробный ответ на эту тему здесь .

1 Вы можете использовать интерфейс, чтобы обеспечить прослушиватель кликов. Я также использую эту технику с ListViews.
2 Нет разделителя: просто добавьте в свой ряд a View с шириной match_parent и высотой 1dp и придайте ему цвет фона .
3 Просто используйте селектор StateList для фона строки.
4 addHeaderView можно также избежать в ListViews: просто поместите заголовок вне представления.

Итак, если эффективность ваша забота, то да , это хорошая идея, чтобы заменить ListView на RecyclerView.

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

Для любых других применений RecyclerView затмевает ListView. Поскольку RecyclerView заботится только об утилизации, будет проще делать визуальные связанные вещи, которые были тесно связаны в ListView, например, изменение позиции / перегруппировки, анимация (на самом деле она поставляется с RecyclerView.ItemAnimator), настраиваемые макеты (запас имеет StaggeredGrid в дополнение к Старый список или стиль сетки, но есть и эта библиотека, которая расширяет ее еще больше).

Также, если вы хотите использовать CardView, я считаю, что это единственный способ пойти (некоторые хорошие чтения, когда использовать карту или список).

Отличная альтернатива – использование BaseAdapter. Он поддерживает использование шаблона Viewholder, а my содержит более 100 строк с растровыми изображениями и кнопками, и он работает очень плавно.