Depuis un développeur Android ( Création de listes et de cartes ):
Le widget RecyclerView est une version plus avancée et plus flexible de ListView.
Ok, ça a l'air cool, mais quand j'ai vu cette image d'exemple, je me suis vraiment perdue dans la différence.
L'image ci-dessus peut être facilement créée par ListView
avec un adaptateur personnalisé.
Alors, dans quelle situation faut-il utiliser RecyclerView
?
RecyclerView a été créé en tant qu'amélioration ListView. Vous pouvez donc créer une liste attachée avec un contrôle ListView, mais utiliser RecyclerView est plus simple car il:
Réutilise les cellules en faisant défiler vers le haut/bas - cela est possible avec l’implémentation de View Holder dans l’adaptateur listView, mais c’était une option, alors que dans RecycleView, c’est la méthode par défaut pour écrire l’adaptateur.
Découpe la liste de son conteneur - afin que vous puissiez facilement insérer des éléments de la liste au moment de l'exécution dans les différents conteneurs (linearLayout, gridLayout) avec le paramètre LayoutManager .
Exemple:
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
Il y a plus sur RecyclerView, mais je pense que ces points sont les principaux.
Donc, pour conclure, RecyclerView est un contrôle plus souple pour le traitement des "données de liste" qui suit des schémas de délégation de préoccupations et ne laisse pour lui-même qu’une tâche: recycler des éléments.
Pour que les vues de liste offrent de bonnes performances, vous devez implémenter le modèle de titulaire, et il est facile de s'y tromper, notamment lorsque vous souhaitez remplir la liste avec plusieurs types de vues.
Le RecyclerView intègre ce modèle, ce qui le rend plus difficile à gâcher. Il est également plus flexible, ce qui facilite la gestion de différentes dispositions qui ne sont pas linéaires, comme une grille.
ListView
est l'ancêtre de RecyclerView
. Il y a beaucoup de choses que ListView
ne fait pas ou ne fait pas bien. Si vous deviez rassembler les faiblesses de la variable ListView
et résoudre le problème en les résumant dans différents domaines, vous obtiendriez quelque chose comme la vue recycleur. Voici les principaux problèmes avec ListViews:
N'a pas appliqué View
Réutiliser les mêmes types d'élément (regardez l'un des adaptateurs utilisés dans ListView
, si vous étudiez la méthode getView, vous verrez que rien n'empêche un programmeur de créer une nouvelle vue pour chaque ligne, même si passé via la variable convertView
)
N'empêche pas les utilisations findViewById
coûteuses (même si vous recycliez les vues comme indiqué ci-dessus, les développeurs pouvaient appeler findViewById
pour mettre à jour le contenu affiché des vues enfants. Le motif ViewHolder
dans ListViews
était de mettre en cache les appels findViewById
. Cependant, cela n’était disponible que si vous le saviez, car cela ne faisait pas du tout partie de la plate-forme)
Défilement vertical uniquement pris en charge avec les vues affichées par lignes (la vue Recycler ne se soucie pas de savoir où les vues sont placées et comment elles sont déplacées, elle est abstraite dans une LayoutManager
. Un recycleur peut donc prendre en charge la traditionnelle ListView
comme indiqué ci-dessus, ainsi GridView
, mais cela ne se limite pas à cela, cela peut faire plus, mais vous devez faire le travail de programmation nécessaire pour y arriver).
Les animations à ajouter/supprimer n'étaient pas un cas d'utilisation pris en compte. C’est à vous de décider comment procéder (comparez RecyclerView. Les classes d’adaptateur notifient * les offres de méthodes v. ListViews pour avoir une idée).
En bref, RecyclerView
est une approche plus flexible de la ListView
, bien que vous ayez peut-être besoin de plus de codage.
La
RecyclerView
est un nouveau ViewGroup qui est prêt à rendre n'importe quel vue basée sur un adaptateur de la même manière. Il est supposé être le successeur deListView and GridView
, et on peut le trouver dans le fichierlatest support-v7 version
. LaRecyclerView
a été développée avec extensibilité à l'esprit, il est donc possible de créer tout type de mise en page que vous pouvez penser, mais pas sans une petite douleur dans le cul dose.
Réponse prise de Antonio leiva
compile 'com.Android.support:recyclerview-v7:27.0.0'
RecyclerView
est bien un powerful view
que ListView
. Pour plus de détails, vous pouvez visiter Cette page .
Vous trouverez ci-dessous quelques points clés/différences entre RecyclerView et ListView. Prenez votre appel à bon escient.
Si ListView fonctionne pour vous, il n'y a aucune raison de migrer. Si vous êtes En écrivant une nouvelle interface utilisateur, vous serez peut-être mieux avec RecyclerView.
RecylerView a ViewHolder intégré, il n'est pas nécessaire d'implémenter notre propre fichier comme dans listView. Il supporte notifier à un index particulier aussi
Des choses comme animer l'ajout ou la suppression d'éléments sont déjà implémenté dans le RecyclerView sans que vous ayez à faire quoi que ce soit
Nous pouvons associer un gestionnaire de disposition à un RecyclerView, cela peut être utilisé pour obtenir des vues aléatoires dans recycleview alors qu'il s'agissait d'une limitation dans ListView Dans un ListView, le seul type de vue disponible est le ListView vertical. Il n’existe aucun moyen officiel d’implémenter un ListView horizontal. Maintenant, en utilisant un RecyclerView, nous pouvons avoir un
i) LinearLayoutManager - qui prend en charge les axes vertical et horizontal listes, ii) StaggeredLayoutManager - qui prend en charge Pinterest tel que listes décalées, iii) GridLayoutManager - qui prend en charge l'affichage des grilles comme on le voit dans les applications de la galerie.
Et la meilleure chose à faire est que nous pouvons faire tout cela dynamiquement comme nous le souhaitons.
Avantage majeur :
ViewHolder
n'est pas disponible par défaut dans ListView
. Nous allons créer explicitement à l'intérieur de getView()
.RecyclerView
a intégré Viewholder
.
Je pense que la principale et la plus grande différence est que ListView
recherche la position de l’élément lors de sa création ou de sa mise en place, tandis que RecyclerView
recherche le type de l’élément. s'il existe un autre élément créé avec le même type, RecyclerView
ne le crée pas à nouveau. Il demande d'abord l'adaptateur, puis à recyclpool. Si le pool recyclé indique "Oui, j'ai créé un type similaire", alors RecyclerView
n'essaie pas de créer le même type. ListView
ne dispose pas de ce type de mécanisme de mise en commun.
En plus des différences ci-dessus, voici quelques autres:
RV sépare la création de la vue et la liaison des données à la vue . En LV, vous devez vérifier si convertView est null ou non pour créer la vue, avant de lier les données à celle-ci . Ainsi, dans le cas de RV, la vue créé uniquement lorsque cela est nécessaire, mais en cas de BT, on peut rater la vérification de convertview et créer une vue à chaque fois.
Basculer entre Grid et List est maintenant plus facile avec LayoutManager.
Pas besoin de notifier et mettre à jour tous les éléments, même si un seul élément est modifié.
Il fallait implémenter la mise en cache de vue dans le cas de LV . Elle est fournie dans RV par défaut. (Il existe une différence entre la mise en cache des vues et le recyclage.)
Animations d'objets très faciles en cas de VR.
Avantages de RecyclerView sur listview:
Contient ViewHolder par défaut.
Animations faciles.
Prend en charge les dispositions horizontales, en grille et en quinconce
Avantages de listView sur recyclerView:
Facile d'ajouter un séparateur.
Peut utiliser arrayAdapter intégré pour de simples listes simples
Prend en charge l'en-tête et le pied de page.
Prend en charge OnItemClickListner.
J'ai travaillé un peu avec RecyclerView
et préfère toujours ListView
.
Bien sûr, les deux utilisent ViewHolders
, donc ce n'est pas un avantage.
Un RecyclerView
est plus difficile à coder.
Une RecyclerView
ne contient pas d'en-tête et de pied de page, c'est donc un signe moins.
Une ListView
ne nécessite pas de créer un ViewHolder. Dans les cas où vous souhaitez avoir une liste avec des sections ou des en-têtes, il serait judicieux de créer des éléments indépendants (sans ViewHolder), cela est plus simple et ne nécessite pas de classes séparées.
À mon avis, RecyclerView
a été créé pour résoudre le problème du motif de recyclage utilisé dans les vues de liste car il rendait la vie du développeur plus difficile . Tous les autres que vous pouviez gérer plus ou moins . Par exemple, j'utilise le même adaptateur pour ListView
et GridView
peu importe dans les deux vues, la getView
, getItemCount
, getTypeCount
est utilisée, elle est donc identique .RecyclerView
n'est pas nécessaire si ListView
avec ListAdapter
ou GridView
avec adaptateurs de grille fonctionne déjà pour vous . Si vous avez correctement implémenté le modèle ViewHolder
dans vos listviews, vous ne constaterez aucune amélioration notable par rapport à RecycleView
.
Donc, si l'efficacité est votre souci, alors oui, c'est une bonne idée de remplacer un ListView par un RecyclerView.
Info RecyclerView
La RecyclerView
a été introduite avec Android 5.0 (Lollipop)
. il est inclus dans le Support Library . Ainsi, il est compatible avec Android API de niveau 7.
De la même manière que ListView
, RecyclerView’s
, l’idée principale est de fournir une fonctionnalité de listage conviviale. La partie "Recycleur" du nom de cette vue n’est pas là par hasard. La RecyclerView
peut réellement recycler les éléments avec lesquels elle travaille actuellement. Le processus de recyclage est effectué grâce à un modèle appelé View Holder .
Avantages et inconvénients de RecyclerView
Avantages:
Inconvénients:
Info liste
La ListView
existe depuis le début d'Android. Il était disponible même dans API Level 1
et a le même objectif que le RecyclerView
.
L'utilisation de ListView est en réalité très simple. Dans cet aspect, ce n’est pas comme son successeur. La courbe d'apprentissage est plus lisse que celle de RecyclerView. Ainsi, il est plus facile à saisir. Nous n’avons pas à nous occuper de choses comme LayoutManager, ItemAnimator ou DiffUtil.
Avantages et inconvénients de ListView
Avantages:
ExpandableListView
Inconvénients:
Réponse simple: vous devez utiliser RecyclerView dans une situation où vous souhaitez afficher de nombreux éléments et dont le nombre est dynamique. ListView ne doit être utilisé que lorsque le nombre d'éléments est toujours identique et limité à la taille de l'écran.
Vous trouvez cela plus difficile parce que vous pensez uniquement à la bibliothèque Android.
Il existe aujourd'hui de nombreuses options vous permettant de créer vos propres adaptateurs, ce qui facilite la création de listes et de grilles d'éléments dynamiques que vous pouvez sélectionner, réorganiser, utiliser des animations, des séparateurs, ajouter des pieds de page, des en-têtes, etc.
Ne vous inquiétez pas et essayez RecyclerView, vous pouvez commencer à aimer faire une liste de 100 éléments téléchargés sur le Web (comme Facebook news) dans un ListView et un RecyclerView, vous verrez la différence dans le UX (utilisateur). expérience) lorsque vous essayez de faire défiler, probablement l’application de test s’arrêtera avant même de pouvoir le faire.
Je vous recommande de vérifier ces deux bibliothèques pour créer des adaptateurs faciles: