RecyclerView vs. ListView

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.

entrer la description de l'image ici

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:

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

  2. 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)); 
  1. Anime les 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 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 de ListView and GridView , et se trouve dans la latest support-v7 version . Le RecyclerView 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:

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

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

  3. Pas besoin de notifier et de mettre à jour tous les éléments, même si seul un élément est modifié.

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

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

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

  2. Un RecyclerView est plus difficile à coder.

  3. Un RecyclerView ne contient pas d’en-tête ni de pied de page, c’est donc un moins.

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

  1. Vous pouvez utiliser une interface pour fournir un écouteur de clic. J’utilise également cette technique avec ListViews.
  2. Aucun diviseur: Ajoutez simplement dans votre ligne un View avec une largeur de match_parent et une hauteur de 1dp et donnez-lui une couleur d’arrière-plan.
  3. Utilisez simplement un sélecteur StateList pour l’arrière-plan de la ligne.
  4. addHeaderView peut également être évité dans ListViews: placez simplement l’en-tête en dehors 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.

Avantages de RecyclerView sur listview:

  1. Contient ViewHolder par défaut.

  2. Animations faciles.

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

Avantages de listView sur recyclerView:

  1. Facile à append diviseur.

  2. Peut utiliser un arrayAdapter intégré pour des listes simples

  3. Supporte l’en-tête et le pied de page.

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