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, у вас будет элемент, который будет использоваться адаптером. оба из них просты в реализации. есть много примеров для обоих из них, вы можете посмотреть и начать.