RecyclerView vs. ListView

De l'android developer ( la Création de Listes et Cartes ):

le widget RecyclerView est une version plus évoluée et flexible de ListView.

ok, ça a l'air cool, mais quand j'ai vu cet exemple, je me suis vraiment embrouillé sur la différence entre les deux.

enter image description here

l'image ci-dessus peut être facilement créé par ListView avec adaptateur personnalisé.

alors, dans quelle situation faut-il utiliser RecyclerView ?

239
demandé sur chewbapoclypse 2014-11-04 08:57:27

13 réponses

RecyclerView a été créé comme une amélioration de ListView, donc oui, vous pouvez créer une liste jointe avec ListView control, mais utiliser RecyclerView est plus facile que cela:

  1. réutilise les cellules en faisant défiler - c'est possible avec l'implémentation du support de vue dans l'adaptateur listView, mais c'était une option, alors que dans le RecycleView c'est la manière par défaut d'écrire l'adaptateur.

  2. Découples liste de son conteneur - de sorte que vous pouvez mettre des éléments de liste facilement au cours de l'exécution dans les différents conteneurs (linearLayout, gridLayout) avec le réglage LayoutManager .

exemple:

mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
  1. Anime liste commune des actions - les Animations sont découplées et délégué à ItemAnimator .

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 les modèles de délégation des préoccupations et ne laisse pour lui - même qu'une seule tâche-le recyclage des articles.

317
répondu daneejela 2016-11-22 13:32:41

pour des vues de liste pour avoir une bonne performance, vous aurez besoin de mettre en œuvre le modèle de support, et c'est facile de gâcher en particulier quand vous voulez peupler la liste avec plusieurs types de vues différentes.

le RecyclerView emballe ce modèle, ce qui rend la tâche plus difficile. Il est également plus flexible, ce qui le rend plus facile à manipuler différents layouts, qui ne sont pas linéaire, comme une grille.

34
répondu CaptRespect 2015-02-23 20:13:16

ListView est l'ancêtre de RecyclerView . Il y avait beaucoup de choses que ListView soit n'a pas fait, ou n'a pas bien fait. Si vous deviez rassembler les défauts du ListView et résoudre le problème en résumant les problèmes dans différents domaines, vous finiriez avec quelque chose comme la vue recycler. Voici les principaux points problématiques avec ListViews:

  • N'a pas fait respecter View réutiliser pour les mêmes types d'Articles (voir l'une des cartes qui sont 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, même si l'on est passées par le convertView et la variable

  • N'a pas empêché les utilisations coûteuses findViewById (même si vous étiez des vues de recyclage comme indiqué ci-dessus, il était possible pour les devs d'appeler findViewById pour mettre à jour le contenu affiché des vues des enfants. Le but principal de le motif ViewHolder dans ListViews devait cacher les appels findViewById . Cependant, ce n'était disponible que si vous le saviez car il ne faisait pas partie de la plate-forme du tout)

  • ne supporte que le défilement Vertical avec les vues de ligne affichées (Recycler view ne se soucie pas de l'endroit où les vues sont placées et comment elles sont déplacées, il est résumé dans un LayoutManager . Un recycleur peut donc supporter le traditionnel ListView comme indiqué ci-dessus, Eh bien , comme le GridView , mais il n'est pas limité à cela, il peut faire plus, mais vous devez faire le travail de pied de programmation pour le faire se produire).

  • les Animations à Ajouter/Supprimer n'étaient pas un cas d'utilisation qui a été considéré. C'était entièrement à vous de décider comment faire (comparez le RecyclerView. Les classes d'adaptateurs notifient* les offres de méthode v. Les ListViews pour avoir une idée).

In le raccourci RecyclerView est une version plus souple du ListView , bien qu'il faille peut-être faire plus de codage de votre part.

29
répondu Jim Baca 2017-10-23 11:52:48

le RecyclerView est un nouveau groupe de vue qui est prêt à rendre adaptateur de vue d'une manière similaire. Il est supossed à l' successeur de ListView and GridView , et il peut être trouvé dans la latest support-v7 version . Le RecyclerView a été développé avec extensibilité à l'esprit, il est donc possible de créer toute sorte de mise en page que vous pouvez penser, mais pas sans un peu de douleur-dans-le-cul dose.

réponse tirée de Antonio leiva

 compile 'com.android.support:recyclerview-v7:27.0.0'

RecyclerView est en effet un powerful view que ListView . Pour plus de détails, vous pouvez visiter cette page .

19
répondu IntelliJ Amiya 2017-11-11 06:40:45

voici quelques points/différences clés entre RecyclerView et ListView. Prenez votre appel avec sagesse.

si ListView fonctionne pour vous, il n'y a aucune raison de migrer. Si vous êtes en écrivant une nouvelle interface utilisateur, vous pourriez être mieux avec RecyclerView.

RecylerView a un ViewHolder intégré, n'a pas besoin de mettre en œuvre notre propre comme dans listView. Il soutien notifier à l'index particulier ainsi

des choses comme l'animation de l'ajout ou le retrait d'éléments sont déjà mis en œuvre dans le RecyclerView sans que vous ayez à faire quoi que ce soit

nous pouvons associer un responsable de la mise en page à un RecyclerView, cela peut être utilisé pour obtenir des vues aléatoires dans recycleview alors que c'était limite dans ListView dans un ListView, le seul type de vue disponible est le ListView vertical. Il n'y a même pas de moyen officiel de mettre en œuvre un ListView horizontal. Maintenant, en utilisant un RecyclerView, nous pouvons avoir un

i) Linéarlayoutmanager - qui supporte à la fois vertical et horizontal listes, ii) Stageredlayoutmanager - qui soutient Pinterest comme listes décalées, iii) GridLayoutManager - qui soutient l'affichage les grilles telles que vues dans les applications Gallery.

et la meilleure chose est que nous pouvons faire tout cela dynamiquement comme nous le voulons.

15
répondu Pawan Maheshwari 2018-07-13 05:16:40

avantage majeur:

ViewHolder n'est pas disponible par défaut dans ListView . Nous allons créer explicitement à l'intérieur du getView() . RecyclerView a intégré les Viewholder .

13
répondu Mohammed Imran N 2016-09-14 07:05:48

je pense que la principale et la plus grande différence qu'ils ont est que ListView cherche la position de l'article tout en le créant ou en le mettant, d'autre part RecyclerView cherche le type de l'article. s'il y a un autre élément créé avec le même type RecyclerView ne le crée pas à nouveau. Il demande d'abord adaptateur et ensuite demande à recycledpool, si recycled pool dit "oui j'ai créé un type similaire à lui", puis RecyclerView n'essaie pas de créer le même type. ListView n'est pas ont ce type de mécanisme de mise en commun.

3
répondu Mustafa Güven 2016-09-14 06:44:14

en plus des différences ci-dessus sont peu plus:

  1. RV sépare la création de la vue et de la liaison de données à afficher. Dans LV, vous devez vérifier si convertView est null ou non pour la création de la vue, avant de lier des données à elle. Ainsi, dans le cas de rv, la vue ne sera créée que lorsqu'elle est nécessaire, mais dans le cas de LV, on peut rater la vérification de convertview et créer la vue à chaque fois.

  2. commutation entre la grille et la liste est plus facile maintenant avec LayoutManager.

  3. il N'est pas nécessaire de notifier et de mettre à jour tous les éléments, même si un seul élément est modifié.

  4. il fallait implémenter la mise en cache de vue en cas de LV. Il est fourni en RV par défaut. (Il y a une différence entre la vue cache n recyclage.)

  5. animations d'articles très simples en cas de RV.

3
répondu Virat18 2017-05-06 20:47:25

à mon avis RecyclerView a été fait pour résoudre le problème avec le modèle de recyclage utilisé dans les listviews parce que cela rendait la vie du développeur plus difficile. Tout le reste, tu pourrais le supporter plus ou moins. Par exemple, j'utilise le même adaptateur pour ListView et GridView . getView , getItemCount , getTypeCount c'est la même chose. RecyclerView n'est pas nécessaire si ListView avec ListAdapter ou GridView avec adaptateurs grille est déjà au travail pour vous. Si vous avez implémenté correctement le modèle ViewHolder dans vos listviews, vous ne verrez pas d'amélioration importante par rapport à RecycleView .

2
répondu aimiliano 2016-09-14 06:35:23

j'ai travaillé un peu avec RecyclerView et je préfère encore ListView .

  1. bien sûr, les deux utilisent ViewHolders , donc ce n'est pas un avantage.

  2. Un RecyclerView est plus difficile à coder.

  3. A RecyclerView ne contient pas d'en-tête et de pied de page, donc c'est un moins.

  4. Un ListView ne nécessite pas de faire un viseur. Dans les cas où vous voulez avoir une liste avec des sections ou des sous-en-têtes, ce serait une bonne idée de faire des articles indépendants (sans un viseur), c'est plus facile et ne nécessite pas de classes séparées.

2
répondu CoolMind 2016-11-12 14:29:22
  1. vous pouvez utiliser une interface pour fournir un écouteur de clic. J'utilise cette technique avec ListViews, too.
  2. pas de diviseur: il suffit d'ajouter dans votre rangée une vue avec une largeur de match_parent et une hauteur de 1dp et lui donner une couleur de fond.
  3. utilisez simplement un sélecteur StateList pour le fond de la rangée.
  4. addHeaderView peut aussi être évité dans les ListViews: il suffit de mettre la L'en-tête hors de la Vue.

donc, si l'efficacité est votre préoccupation, alors oui, c'est une bonne idée de remplacer un ListView par un RecyclerView.

1
répondu Jay Patel 2017-11-12 18:27:42

avantages de RecyclerView sur listview:

  1. Contient ViewHolder par défaut.

  2. Facile d'animations.

  3. Supports horizontaux, quadrillés et étalés

avantages de listView sur recyclerView:

  1. facile à ajouter diviseur.

  2. Peut utiliser intégré arrayAdapter pour de simples listes de

  3. supporte L'en-tête et le pied de page .

  4. Prend En Charge OnItemClickListner .

1
répondu Redman 2018-04-10 12:19:43

réponse Simple: vous devriez utiliser RecyclerView dans une situation où vous voulez montrer beaucoup d'articles, et le nombre d'entre eux est dynamique. ListView doit être utilisé uniquement lorsque le nombre d'éléments est toujours le même et est limitée à la taille de l'écran.

vous le trouvez plus difficile parce que vous pensez juste avec la bibliothèque Android à l'esprit.

Aujourd'hui, il existe beaucoup d'options qui vous aident à construire vos propres adaptateurs, ce qui rend facile à construire des listes et les grilles des éléments dynamiques que vous pouvez choisir, réorganiser, utiliser l'animation, intercalaires, ajouter des pieds de page, en-têtes, etc, etc.

N'ayez pas peur et essayez de RecyclerView, vous pouvez commencer à l'aimer faire une liste de 100 articles téléchargés à partir du web (comme facebook news) dans un ListView et un RecyclerView, vous verrez la différence dans les UX (expérience utilisateur) lorsque vous essayez de faire défiler, probablement l'application de test s'arrêtera avant même que vous pouvez le faire.

I vous recommande de vérifier ces deux bibliothèques pour faire des adaptateurs faciles:

FastAdapter by mikepenz

FlexibleAdapter by davideas

0
répondu Erick Moya 2017-11-15 02:19:44