RecyclerView vs ViewPager

В настоящее время я изучаю возможность отображения данных из базы данных, прокручивая влево-вправо, а также позволяя пользователям добавлять и удалять данные из любой позиции в массиве данных. Я узнал, что для этого есть 2 возможных решения. Один из них – RecyclerView с горизонтальной прокруткой, а другой – ViewPager с FragmentStatePagerAdapter . Что более эффективно? Что касается использования памяти и простоты реализации ?

Благодарю.

Я бы сказал, что они сопоставимы с точки зрения использования памяти и простоты внедрения. Там, где они больше всего отличаются, это взаимодействие, которое они предоставляют пользователю.

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

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

Как видите, есть несколько отличий. Я бы рекомендовал вам выбрать ваш виджет на основе пользовательского интерфейса, который вы хотите достичь. Если вы хотите, ViewPager поведение ViewPager (один элемент был видимым за раз, проведите пальцем по одному элементу и щелкнув, чтобы показать полный элемент), перейдите к ViewPager . Возможно, но не тривиально повторить это поведение с помощью RecycleView . Я бы определенно сказал, что использовать RecyclerView гораздо труднее, если вы хотите заставить его вести себя как ViewPager . И наоборот, практически невозможно настроить поведение ViewPager , поэтому, если это не то, что вы хотите, вам определенно следует использовать RecyclerView .

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

С точки зрения простоты внедрения (это только мое собственное мнение),

ViewPager хорош для отображения списка данных, который не требуется часто добавлять и удалять, поскольку PagerAdapter не может уведомить каждый конкретный элемент, который он удален или добавлен, он может только вызывать notifyDataSetChanged() которые уведомляют, что весь набор данных был изменен. Поэтому, когда элемент добавлен или удален, трудно обработать анимацию.

В RecyclerView RecyclerView.Adapter имеет методы, такие как notifyItemInserted(int position) или notifyItemRemoved(int position) чтобы уведомить, что конкретный элемент добавлен или удален, а анимация, когда элемент добавляется или удаляется, уже обрабатывает, когда вы вызываете этот метод.

Более того, сейчас RecyclerView очень легко имитировать поведение ViewPager с помощью SnapHelper . Существует PagerSnapHelper , и поведение ViewPager можно получить всего несколькими строками кода. Вы можете связаться со мной, если хотите код.