1. Afficher les détenteurs
Dans ListView, la définition des détenteurs de vue était une approche suggérée pour conserver les références des vues. Mais ce n'était pas une contrainte. Bien qu'en ne le faisant pas, ListView a utilisé des données obsolètes. Un autre inconvénient majeur de ne pas utiliser de détenteurs de vue pourrait conduire à une opération lourde de recherche de vues par ID à chaque fois. Ce qui a abouti à des ListViews laggy.
Ce problème est résolu dans RecylerView par l'utilisation de la classe RecyclerView.ViewHolder. C'est l'une des principales différences entre RecyclerView et ListView. Lors de l'implémentation d'un RecyclerView, cette classe est utilisée pour définir un objet ViewHolder qui est utilisé par l'adaptateur pour lier ViewHolder à une position. Un autre point à noter ici, est que lors de l'implémentation de l'adaptateur pour RecyclerView, la fourniture d'un ViewHolder est obligatoire. Cela rend l'implémentation un peu complexe, mais résout les problèmes rencontrés dans ListView.
2. Gestionnaire de mise en page
Quand on parle de ListViews, un seul type de ListView est disponible à savoir le ListView vertical. Vous ne pouvez pas implémenter un ListView avec un défilement horizontal. Je sais qu'il existe des moyens d'implémenter un défilement horizontal, mais croyez-moi, il n'a pas été conçu pour fonctionner de cette façon.
Mais maintenant, lorsque nous examinons Android RecyclerView vs ListView, nous prenons également en charge les collections horizontales. En fait, il prend en charge plusieurs types de listes. Pour prendre en charge plusieurs types de listes, il utilise la classe RecyclerView.LayoutManager. C'est quelque chose de nouveau que ListView n'a pas. RecyclerView prend en charge trois types de gestionnaires de mise en page prédéfinis:
LinearLayoutManager - Il s'agit du gestionnaire de disposition le plus couramment utilisé dans le cas de RecyclerView. Grâce à cela, nous pouvons créer des listes de défilement horizontales et verticales. StaggeredGridLayoutManager - Grâce à ce gestionnaire de mise en page, nous pouvons créer des listes échelonnées. Tout comme l'écran Pinterest. GridLayoutManager - Ce gestionnaire de mise en page peut être utilisé pour afficher des grilles, comme n'importe quelle galerie d'images.
3. Animateur d'objets
Les animations dans une liste sont une toute nouvelle dimension, qui a des possibilités infinies. Dans un ListView, en tant que tel, il n'y a pas de dispositions spéciales à travers lesquelles on peut animer, ajouter ou supprimer des éléments. Au lieu de cela plus tard, ViewPropertyAnimator a été suggéré par Google's Chet Haase dans ce didacticiel vidéo pour les animations dans ListView.
D'autre part, en comparant Android RecyclerView et ListView, il dispose de la classe RecyclerView.ItemAnimator pour la gestion des animations. Grâce à cette classe, des animations personnalisées peuvent être définies pour les événements d'ajout, de suppression et de déplacement d'éléments. En outre, il fournit un DefaultItemAnimator, au cas où vous n'auriez pas besoin de personnalisations.
4. Adaptateur
Les adaptateurs ListView étaient simples à implémenter. Ils avaient une méthode principale getView où toute la magie se produisait. Où les vues étaient liées à une position. De plus, ils avaient une méthode intéressante registerDataSetObserver où l'on peut définir un observateur directement dans l'adaptateur. Cette fonctionnalité est également présente dans RecyclerView, mais la classe RecyclerView.AdapterDataObserver est utilisée pour cela. Mais le point en faveur de ListView est qu'il prend en charge trois implémentations par défaut d'adaptateurs:
ArrayAdapter CursorAdapter SimpleCursorAdapter Alors que l'adaptateur RecyclerView, possède toutes les fonctionnalités des adaptateurs ListView, à l'exception de la prise en charge intégrée des curseurs DB et des ArrayLists. Dans RecyclerView.Adapter à partir de maintenant, nous devons créer une implémentation personnalisée pour fournir des données à l'adaptateur. Tout comme le fait un BaseAdapter pour ListViews. Bien que si vous souhaitez en savoir plus sur l'implémentation de l'adaptateur RecyclerView, reportez-vous à l'exemple Android RecyclerView.
5. Notification des changements de données
Lorsque vous travaillez avec un ListView, si l'ensemble de données est modifié, vous devez appeler la méthode notifyDataSetChanged de l'adaptateur sous-jacent pour actualiser les données. Ou définissez la méthode setNotifyOnChange sur true si vous souhaitez appeler automatiquement la méthode notifyDataSetChanged. Mais dans les deux cas, le résultat est très lourd sur la liste. Fondamentalement, il actualise les vues de la liste.
Mais au contraire, dans un adaptateur RecyclerView, si un seul élément ou une plage d'éléments a changé, il existe des méthodes pour notifier le changement en conséquence. Ceux-ci sont respectivement notifyItemChanged et notifyItemRangeChanged et bien d'autres comme:
notifyItemInsterted notifyItemMoved notifyItemRangeInsterted notifyItemRangeRemoved Et bien sûr, il a la méthode originale pour actualiser toute la liste, c'est-à-dire notifyDataSetChanged qui notifie l'adapté que l'ensemble de données a changé.
6. Décoration d'article
Pour afficher des diviseurs personnalisés dans un ListView, on aurait pu facilement ajouter ces paramètres dans le XML ListView:
XHTML android: divider = "@ android: color / transparent" android: dividerHeight = "5dp" 1 2 android: divider = "@ android: color / transparent" android: dividerHeight = "5dp" La partie intéressante d'Android RecyclerView est que, à partir de maintenant, il n'affiche pas de séparateur entre les éléments par défaut. Bien que les gars de Google aient dû laisser cela de côté pour la personnalisation, intentionnellement. Mais cela augmente considérablement l'effort d'un développeur. Si vous souhaitez ajouter un séparateur entre les éléments, vous devrez peut-être effectuer une implémentation personnalisée à l'aide de la classe RecyclerView.ItemDecoration.
Ou vous pouvez appliquer un hack en utilisant ce fichier à partir d'exemples officiels: DividerItemDecoration.java
7. OnItemTouchListener
Les listviews avaient une implémentation simple pour la détection des clics, c'est-à-dire par l'utilisation de l'interface AdapterView.OnItemClickListener.
Mais d'autre part, l'interface RecyclerView.OnItemTouchListener est utilisée pour détecter les événements tactiles dans Android RecyclerView. Cela complique un peu l'implémentation, mais cela donne un plus grand contrôle au développeur pour intercepter les événements tactiles. La documentation officielle indique qu'il peut être utile pour les manipulations gestuelles car il intercepte un événement tactile avant qu'il ne soit livré à RecyclerView.
RecyclerView
est beaucoup plus rapide et polyvalent avec une bien meilleure API. Des choses comme l'animation de l'ajout ou de la suppression d'éléments sont déjà implémentées dans leRecyclerView
sans que vous ayez à faire quoi que ce soit. Il n'y a aucun doute là-dessus, jetez votreListView
poubelle à la poubelle,RecyclerView
c'est là pour voler la vedette.