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.
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
.
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.
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.