web-dev-qa-db-fra.com

RecyclerView vs ListView

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. 

enter image description here

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

Alors, dans quelle situation faut-il utiliser RecyclerView

251
Blaze Tama

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: 

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

  2. 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));
  1. Anime des actions de liste communes - Les animations sont découplées et déléguées à 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 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.

330
daneejela

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.

35
CaptRespect

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.

33
Jim Baca

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 de ListView and GridView, et on peut le trouver dans le fichier latest support-v7 version. La RecyclerView 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 .

20
IntelliJ Amiya

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.

15
Pawan Maheshwari

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.

13
Mohammed Imran N

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. 

3
Mustafa Güven

En plus des différences ci-dessus, voici quelques autres:

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

  2. Basculer entre Grid et List est maintenant plus facile avec LayoutManager.

  3. Pas besoin de notifier et 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 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.)

  5. Animations d'objets très faciles en cas de VR.

3
Virat18

Avantages de RecyclerView sur listview:

  1. Contient ViewHolder par défaut.

  2. Animations faciles.

  3. Prend en charge les dispositions horizontales, en grille et en quinconce

Avantages de listView sur recyclerView:

  1. Facile d'ajouter un séparateur.

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

  3. Prend en charge l'en-tête et le pied de page.

  4. Prend en charge OnItemClickListner.

3
Manohar Reddy

J'ai travaillé un peu avec RecyclerView et préfère toujours ListView.

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

  2. Un RecyclerView est plus difficile à coder.

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

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

2
CoolMind

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

2
aimiliano
  1. Vous pouvez utiliser une interface pour fournir un écouteur de clics. J'utilise également cette technique avec ListViews.
  2. Pas de séparateur: Ajoutez simplement dans votre ligne une vue d'une largeur de Match_parent et d'une hauteur de 1dp et attribuez-lui une couleur de fond.
  3. Utilisez simplement un sélecteur StateList pour l’arrière-plan de la ligne.
  4. addHeaderView peut également être évité dans ListViews: mettez simplement l'en-tête en dehors de la vue.

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

1
Jay Patel

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:

  • animations intégrées pour l'ajout, la mise à jour et la suppression d'éléments
  • applique le recyclage des vues à l'aide du modèle ViewHolder
  • prend en charge les grilles et les listes
  • prend en charge le défilement vertical et horizontal
  • peut être utilisé avec DiffUtil

Inconvénients:

  • ajoute de la complexité
  • no OnItemClickListener

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:

  • utilisation simple
  • adaptateurs par défaut
  • disponible OnItemClickListener
  • c’est le fondement de la ExpandableListView

Inconvénients:

  • n'embrasse pas l'utilisation du modèle ViewHolder
0
Basi

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:

FastAdapter de mikepenz

FlexibleAdapter de davideas

0
Erick Moya