Du développeur Android ( Création de listes et de cartes ):
Le widget RecyclerView est une version plus avancée et flexible de ListView.
Ok, ça a l’air cool, mais quand j’ai vu cet exemple, je me suis vraiment trompé sur la différence entre les deux.
L’image ci-dessus peut être facilement créée par ListView
avec un adaptateur personnalisé.
Alors, dans quelle situation doit-on utiliser RecyclerView
?
RecyclerView a été créé en tant qu’amélioration de ListView, alors oui, vous pouvez créer une liste attachée avec le contrôle ListView, mais l’utilisation de RecyclerView est plus simple car elle:
Réutilise les cellules tout en faisant défiler vers le haut / bas – ceci est possible avec l’implémentation de View Holder dans l’adaptateur listView, mais c’était une option, tandis que dans RecycleView, c’est le mode d’écriture par défaut.
Découple la liste de son conteneur – de sorte que vous pouvez facilement mettre des éléments de liste à l’exécution dans les différents conteneurs (linearLayout, gridLayout) en définissant 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 flexible pour la gestion des “données de liste” qui suit les modèles de délégation des préoccupations et ne laisse pour lui qu’une seule tâche: le recyclage des articles.
Pour que les affichages de liste aient de bonnes performances, vous devez implémenter le modèle de support, ce qui est facile à gêner, en particulier lorsque vous souhaitez remplir la liste avec différents types de vues.
Le RecyclerView cuit ce modèle, ce qui rend plus difficile le gâchis. Il est également plus flexible, ce qui facilite la gestion de différentes dispositions, qui ne sont pas directement linéaires, comme une grid.
ListView
est l’ancêtre de RecyclerView
. Il y avait beaucoup de choses que ListView
n’a pas fait ou n’a pas bien fait. Si vous deviez rassembler les faiblesses de ListView
et résoudre le problème en intégrant les problèmes dans différents domaines, vous vous retrouveriez avec quelque chose comme la vue du recycleur. Voici les principaux problèmes rencontrés avec ListViews:
N’a pas appliqué la réutilisation de View
pour les mêmes types d’élément (regardez l’un des adaptateurs utilisés dans un 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). passé via la variable convertView
)
N’a pas empêché les findViewById
coûteuses de findViewById
(Même si vous findViewById
vues comme indiqué ci-dessus, les développeurs pouvaient appeler findViewById
pour mettre à jour le contenu affiché des vues enfants. L’objective principal du modèle 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 partie du tout de la plate-forme)
Défilement vertical uniquement pris en charge avec des vues affichées en ligne (la vue Recycler ne se soucie pas de l’emplacement des vues et de leur déplacement, elle est extraite dans un LayoutManager
. Un recycleur peut donc prendre en charge le GridView
, mais cela ne se limite pas à cela, il peut faire plus, mais vous devez faire le travail de programmation pour y arriver.
Les animations à append / supprimer n’étaient pas un cas d’utilisation considéré. C’est à vous de décider comment procéder (comparez le RecyclerView. Les classes d’adaptateurs notifient les offres de méthodes * v. ListViews pour avoir une idée).
En bref, RecyclerView
est une RecyclerView
plus flexible de ListView
, bien que vous ayez besoin de plus de codage de votre part.
RecyclerView
est un nouveau ViewGroup conçu pour restituer une vue basée sur un adaptateur de la même manière. Il est supposé être le successeur deListView and GridView
, et se trouve dans lalatest support-v7 version
. LeRecyclerView
a été développé avec l’ extensibilité en tête, il est donc possible de créer tout type de mise en page auquel vous pouvez penser, mais pas sans une petite dose de douleur.
Réponse de Antonio leiva
comstack 'com.android.support:recyclerview-v7:27.0.0'
RecyclerView
est en effet une powerful view
que ListView
. Pour plus de détails, vous pouvez visiter cette page .
Voici quelques points clés / différences entre RecyclerView & ListView. Prenez votre appel à bon escient.
Si ListView fonctionne pour vous, il n’y a aucune raison de migrer. Si vous écrivez une nouvelle interface utilisateur, vous pourriez être mieux avec RecyclerView.
RecylerView a intégré ViewHolder, n’a pas besoin d’implémenter notre propre comme dans listView. Il supporte également les notifications à un index particulier
Des choses comme animer l’ajout ou la suppression d’éléments sont déjà implémentées dans RecyclerView sans que vous ayez à faire quoi que ce soit.
Nous pouvons associer un gestionnaire de disposition à RecyclerView, cela peut être utilisé pour obtenir des vues aléatoires dans recycleview alors que cela était une limitation dans ListView Dans un ListView, le seul type de vue disponible est le ListView vertical. Il n’y a pas de moyen officiel d’implémenter une ListView horizontale. Maintenant, en utilisant un RecyclerView, nous pouvons avoir un
i) LinearLayoutManager – qui prend en charge les listes verticales et horizontales, ii) StaggeredLayoutManager – qui prend en charge les listes échelonnées comme Pinterest, iii) GridLayoutManager – qui prend en charge l’affichage des grids comme dans les applications Gallery.
Et la meilleure chose est que nous pouvons faire tout cela dynamicment comme nous le souhaitons.
Avantage majeur :
ViewHolder
n’est pas disponible par défaut dans ListView
. Nous allons créer explicitement dans getView()
. RecyclerView
a un Viewholder
intégré.
Je pense que la principale différence réside dans le fait que ListView
recherche la position de l’élément lors de la création ou de la mise en place, alors 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 plus. Il demande au premier adaptateur puis demande à pool récupéré, si le pool recyclé dit “oui j’ai créé un type similaire”, alors RecyclerView
n’essaie pas de créer le même type. ListView
n’a pas 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 vues et la liaison de données à afficher. Dans LV, vous devez vérifier si convertView est nul ou non pour créer une vue, avant de lui associer des données. Ainsi, en cas de RV, la vue ne sera créée que lorsque cela sera nécessaire, mais en cas de LV, on peut manquer la vérification de convertview et créer une vue à chaque fois.
La commutation entre la grid et la liste est maintenant plus facile avec LayoutManager.
Pas besoin de notifier et de mettre à jour tous les éléments, même si seul un élément est modifié.
Il fallait implémenter la mise en cache des vues en cas de LV. Il est fourni dans RV par défaut. (Il existe une différence entre la mise en cache des vues et le recyclage.)
Animation d’objects très facile en cas de RV.
À mon avis, RecyclerView
été conçu pour résoudre le problème du modèle de recyclage utilisé dans les listes de lecture, car cela rendait la vie des développeurs plus difficile. Tous les autres que vous pourriez gérer plus ou moins. Par exemple, j’utilise le même adaptateur pour ListView
et GridView
. Peu importe dans les deux vues, getItemCount
, getTypeCount
, getTypeCount
est utilisé, c’est la même chose. RecyclerView
n’est pas nécessaire si ListView
avec ListAdapter
ou GridView
avec des adaptateurs de grid fonctionne déjà pour vous. Si vous avez correctement implémenté le modèle ViewHolder
dans vos ViewHolder
de liste, vous ne verrez aucune amélioration RecycleView
rapport à RecycleView
.
J’ai travaillé un peu avec RecyclerView
et je 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.
Un RecyclerView
ne contient pas d’en-tête ni de pied de page, c’est donc un moins.
Un ListView
ne nécessite pas de créer un ViewHolder. Dans les cas où vous souhaitez avoir une liste de sections ou de sous-en-têtes, il serait judicieux de créer des éléments indépendants (sans ViewHolder), c’est plus simple et ne nécessite pas de classes distinctes.
Donc, si l’efficacité est votre préoccupation, alors oui, c’est une bonne idée de remplacer un ListView par un RecyclerView.
Avantages de RecyclerView sur listview:
Contient ViewHolder par défaut.
Animations faciles.
Prend en charge les dispositions horizontales, en grid et en quinconce
Avantages de listView sur recyclerView:
Facile à append diviseur.
Peut utiliser un arrayAdapter intégré pour des listes simples
Supporte l’en-tête et le pied de page.
Prend en charge OnItemClickListner.
Réponse simple: Vous devez utiliser RecyclerView dans une situation où vous souhaitez afficher un grand nombre d’éléments, dont le nombre est dynamic. ListView ne doit être utilisé que lorsque le nombre d’éléments est toujours le même et est limité à la taille de l’écran.
Vous trouvez cela plus difficile parce que vous ne pensez qu’à la bibliothèque Android.
Aujourd’hui, de nombreuses options vous permettent de créer vos propres adaptateurs, ce qui facilite la création de listes et de grids d’éléments dynamics que vous pouvez sélectionner, réorganiser, utiliser des animations, des séparateurs, append des bas de page, des en-têtes, etc.
Ne soyez pas effrayé et essayez RecyclerView, vous pouvez commencer à l’aimer en faisant une liste de 100 éléments téléchargés sur le Web (comme les nouvelles de Facebook) dans un ListView et un RecyclerView, vous verrez la différence dans l’UX expérience) lorsque vous essayez de faire défiler, l’application de test s’arrêtera probablement avant que vous puissiez même le faire.
Je vous recommande de vérifier ces deux bibliothèques pour créer des adaptateurs faciles:
FastAdapter par Mikepenz
FlexibleAdapter by davideas