RecyclerView vs ViewPager
В настоящее время я изучаю возможность отображения данных из базы данных с помощью прокрутки влево и вправо, а также позволяет пользователям добавлять и удалять данные из любой позиции массива данных, Я узнал, что есть два возможных решения. Один из них - RecyclerView с горизонтальной прокруткой, а второй - ViewPager с FragmentStatePagerAdapter. Что более эффективно? В терминах Использование памяти и Простота реализации?
Спасибо.
Ответы
Ответ 1
Я бы сказал, что они сопоставимы с точки зрения использования памяти и простоты реализации. Там, где они больше всего отличаются, это взаимодействие, которое они предоставляют пользователю.
ViewPager
предназначен для отображения по одному элементу за раз. Видимый элемент занимает всю ширину ViewPager
. Вы можете прокручивать только один элемент за раз, а прокрутка всегда привязывается к показу одного объекта в центре - вы никогда не остаетесь в промежуточном положении, частично показывающем два элемента.
RecyclerView
с горизонтальным менеджером компоновки, с другой стороны, могут иметь элементы любой ширины - вы могли бы отображать сразу несколько элементов или у вас могли бы быть предметы шириной RecyclerView
или вы могли бы сопоставить их ширину с имитацией ViewPager
. Вы можете свободно прокручивать - вы не ограничены шириной одного элемента или шириной RecyclerView
, вы можете сделать жестов fling, чтобы прокручивать большие расстояния. И там нет привязки - когда свиток заканчивает там никакие выравнивающие предметы к центру или любой из сторон.
Как вы видите, есть несколько отличий. Я бы рекомендовал вам выбрать ваш виджет на основе пользовательского интерфейса, который вы хотите достичь. Если вы хотите поведение ViewPager
(один элемент видимый за раз, проведите пальцем по одному элементу и привяжите его, чтобы показать полный элемент), перейдите к ViewPager
. Возможно, но не тривиально повторить это поведение, используя RecycleView
. Я бы определенно сказал, что использовать RecyclerView
гораздо труднее, если вы хотите заставить его вести себя как ViewPager
. И наоборот, практически невозможно настроить поведение ViewPager
, поэтому, если это не то, что вы хотите, то вы определенно должны использовать RecyclerView
.
Ответ 2
С точки зрения простоты внедрения (это только мое собственное мнение),
ViewPager
хорош для отображения списка данных не требуется часто добавлять и удалять, так как PagerAdapter
не может уведомить каждый конкретный элемент, что он удаленный или добавленный, он может вызывать только notifyDataSetChanged()
, которые уведомляют, что весь набор данных был изменен. Поэтому, когда элемент добавлен или удален, трудно обрабатывать анимацию.
Пока RecyclerView
, RecyclerView.Adapter
имеет методы, такие как notifyItemInserted(int position)
или notifyItemRemoved(int position)
, чтобы уведомить, что конкретный элемент добавлен или удален, а анимация, когда элемент добавляется или удаляется, уже обрабатывает, когда вы вызывали этот метод.
Кроме того, сейчас RecyclerView
очень легко имитировать поведение ViewPager
, используя SnapHelper
. Существует PagerSnapHelper
, и поведение ViewPager
может быть получено всего несколькими строками кода. Вы можете связаться со мной, если хотите код.
Ответ 3
Нет никакого сравнения между этими двумя. в основном в ViewPager вы можете прокручивать только один элемент во времени (слева или справа), а в RecyclerView вы можете прокручивать любой индекс. все зависит от ваших требований, как вы хотите их использовать. вам необходимо разработать фрагменты для ViewPages, по одному для каждой страницы. как и в RecyclerView, у вас будет элемент, который будет использоваться адаптером. оба из них просты в реализации. есть много примеров для обоих из них, вы можете посмотреть и начать.