web-dev-qa-db-fra.com

RecyclerView vs ViewPager

Actuellement, je suis en train d’explorer la possibilité d’afficher les données d’une base de données enen balayant de gauche à droiteet en permettant également aux utilisateursd’ajouter et de supprimer des donnéesde n’importe quelle position du tableau de données. J'ai découvert qu'il y avait 2 solutions possibles pour le faire. L'un est unRecyclerView avec un défilement horizontalet l'autre unViewPageravec unFragmentStatePagerAdapter. Lequel est le plus efficace? En termes deUtilisation de la mémoireetFacilité de mise en œuvre?

Merci.

17
Bosen

Je dirais qu'ils sont comparables en termes d'utilisation de la mémoire et de facilité de mise en œuvre. Ce qui les différencie le plus, c’est dans l’interaction qu’ils fournissent à l’utilisateur. 

ViewPager est conçu pour afficher un élément à la fois. L'élément visible occupe toute la largeur de la ViewPager. Vous ne pouvez balayer qu'un élément à la fois et le défilement permet toujours d'afficher un élément au centre. Vous n'êtes jamais laissé dans une position intermédiaire affichant partiellement deux éléments.

RecyclerView avec un gestionnaire de disposition horizontal, d’autre part, peut avoir des éléments de n’importe quelle largeur - vous pouvez afficher plusieurs éléments à la fois ou avoir des éléments plus larges que la largeur de RecyclerView ou vous pouvez faire correspondre leur largeur à l’impression ViewPager. Vous pouvez faire défiler librement - vous n'êtes pas limité à la largeur d'un élément ou à la largeur de RecyclerView, vous pouvez effectuer un geste rapide pour faire défiler de grandes distances. Et il n'y a pas d'accrochage - lorsque le défilement est terminé, il est impossible d'aligner les éléments au centre ou sur l'un des côtés.

Comme vous le voyez, il y a quelques différences. Je vous recommanderais de choisir votre widget en fonction de l'interface utilisateur que vous souhaitez obtenir. Si vous voulez le comportement de ViewPager (un élément visible à la fois, balayez l'écran avec un seul élément et effectuez une capture pour afficher l'élément complet), puis choisissez une ViewPager. Il est possible mais non trivial de reproduire ce comportement à l'aide de RecycleView. Je dirais certainement que c’est beaucoup plus difficile à utiliser RecyclerView si vous voulez le faire se comporter comme ViewPager. Inversement, il est pratiquement impossible de personnaliser le comportement de ViewPager, donc si ce n’est pas ce que vous voulez, vous devez absolument utiliser un RecyclerView.

28
Marcin Koziński

En termes de facilité de mise en œuvre (ce n'est que ma propre opinion), 

ViewPager est utile pour afficher la liste des données qui est non requis, ajoutez souvent et supprimez puisque PagerAdapter ne peut pas notifier chaque élément spécifique qu'il est supprimé ou ajouté ne peut appeler que notifyDataSetChanged() qui avertit que tous des données a été changé. Il est donc difficile de gérer l'animation lorsque l'élément est ajouté ou supprimé.

Alors que dans RecyclerView, RecyclerView.Adapter possède des méthodes telles que notifyItemInserted(int position) ou notifyItemRemoved(int position) pour notifier que cet élément est ajouté ou supprimé, et l'animation lorsque l'élément est ajouté ou supprimé est déjà gérée lorsque vous appelez cette méthode.

De plus, pour le moment, il est très facile pour RecyclerView d'imiter le comportement ViewPager en utilisant SnapHelper. Il existe PagerSnapHelper et le comportement de ViewPager peut être obtenu avec seulement quelques lignes de code. Vous pouvez me contacter si vous voulez le code.

9
Boonya Kitpitak

Il n'y a pas de comparaison entre ces deux. En gros, dans ViewPager, vous ne pouvez faire défiler qu'un élément à la fois (à gauche ou à droite) et dans RecyclerView, vous pouvez faire défiler jusqu'à n'importe quel index. Tout dépend de vos besoins, de la manière dont vous souhaitez l'utiliser. vous devez développer des fragments pour ViewPages, un pour chaque page. comme dans RecyclerView, vous aurez un article qui sera utilisé par l’adaptateur. les deux sont faciles à mettre en œuvre. les deux exemples sont nombreux, vous pouvez y jeter un coup d’œil et commencer.

0
Newbiee