Android Recyclerview vs ListView avec Viewholder
je suis récemment tombé sur l'android RecycleView
qui a été publié avec Android 5.0 et il semble que RecycleView
est juste un encapsulé traditionnel ListView
avec le motif de porte-Vue intégré dans elle, ce qui favorise la réutilisation de la vue, plutôt que la création à chaque fois.
Quels sont les autres avantages d'utiliser RecycleView
?
Si les deux ont le même effet en termes de performance, pourquoi choisirait-on D'utiliser RecycleView ?
Modifier
j'ai trouvé que les gens ont posé des questions similaires et les réponses ne sont pas concluantes, les ajoutant ici pour la tenue de dossiers.
Recyclerview vs Listview
devrions-nous utiliser RecyclerView pour remplacer ListView?
pourquoi RecyclerView n'a-t-il pas onItemClickListener()? et comment RecyclerView est différent de Listview?
5 réponses
avec L'avènement D'Android Lollipop, le RecyclerView fait son chemin officiellement. Le RecyclerView est beaucoup plus puissant, flexible et une amélioration majeure par rapport à ListView . Je vais essayer de vous donner un aperçu détaillé.
1) Motif De Porte-Vues
dans un ListView, il a été recommandé d'utiliser le motif des afficheurs, mais ce n'était jamais une contrainte. En cas de RecyclerView, c'est obligatoire en utilisant le RecyclerView.Titulaire de la vue catégorie. C'est l'une des principales différences entre ListView et RecyclerView.
cela rend les choses un peu plus complexes dans RecyclerView, mais beaucoup de problèmes que nous avons rencontrés dans ListView sont résolus efficacement.
2) LayoutManager
il s'agit d'une autre amélioration massive apportée à la RecyclerView. 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 une ListView horizontale.
maintenant en utilisant un RecyclerView, nous pouvons avoir un
i) LinearLayoutManager - qui supporte les listes verticales et horizontales,
ii) StaggeredLayoutManager - qui supporte Pinterest comme des listes décalées,
iii) GridLayoutManager - qui supporte l'affichage des grilles comme vu dans les applications Gallery.
et la meilleure chose est que nous pouvons faire tout cela dynamiquement comme nous le voulons.
3) Article Animateur
Les ListViewsmanquent de support pour les bonnes animations, mais la RecyclerView apporte une toute nouvelle dimension à celle-ci. En utilisant le RecyclerView.Classe d'animation les vues deviennent tellement faciles et intuitives.
4) Article Décoration
dans le cas des ListViews, il n'a jamais été facile de décorer dynamiquement des objets comme l'ajout de bordures ou de séparateurs. Mais dans le cas de RecyclerView, la RecyclerView.La classe ItemDecorator donne un contrôle énorme aux développeurs, mais rend les choses un peu plus longues et complexes.
5) OnItemTouchListener
intercepter les clics d'objets sur un ListView était simple, grâce à son AdapterView .Onitemclicklistener interface. Mais le RecyclerView donne beaucoup plus de puissance et de contrôle à ses développeurs par le RecyclerView.OnItemTouchListener mais cela complique un peu les choses pour le développeur.
en termes simples, le RecyclerView est beaucoup plus personnalisable que le ListView et donne beaucoup de contrôle et puissance à ses développeurs.
OK si peu de creuser et j'ai trouvé ces gemmes de Bill Philips article sur RecycleView
RecyclerView peut faire plus que ListView, mais la catégorie elle-même a moins de responsabilités que ListView. Hors de la boîte, RecyclerView n'est pas:
- la Position des éléments sur l'écran
- Animer les points de vue
- poignée tous les événements tactiles sauf le défilement
toutes ces choses ont été cuites à ListView, mais RecyclerView utilise classes de collaborateurs pour faire ces travaux à la place.
les afficheurs que vous créez sont aussi plus beaux. Ils sous-classe
RecyclerView.ViewHolder
, qui a un tas de méthodesRecyclerView
utiliser.ViewHolders
savoir à quelle position ils sont actuellement liés, comme ainsi que quel ID d'article (si vous avez ces). Dans le processus,ViewHolder
a été anobli. C'était le travail de ListView de s'accrocher à la vue d'ensemble de l'article, etViewHolder
seulement tenu à de petits morceaux de celui-ci.maintenant, le titulaire de la vue s'accroche à tout cela dans le
ViewHolder.itemView
champ, qui est assigné dans le constructeur de ViewHolder pour vous.
L'autre plus de l'utilisation de RecycleView
est l'animation, il peut être fait en deux lignes de code
RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
recyclerView.setItemAnimator(itemAnimator);
mais le widget est encore cru, E. g vous ne pouvez pas créer en-tête et pied de page .
plus de article de Bill Phillip (allez le lire!), mais j'ai pensé qu'il était important de souligner ce qui suit.
dans ListView, il y avait une certaine ambiguïté sur la façon de gérer les événements clics: les vues individuelles devraient-elles gérer ces événements, ou la ListView devrait-elle les gérer par L'Intermédiaire d'OnItemClickListener? Dans RecyclerView, cependant, le titulaire de la vue est dans une position claire pour agir comme un objet de contrôleur de niveau de rangée qui traite sortes de détails.
nous avons vu plus tôt que LayoutManager manipulait les vues de positionnement, et ItemAnimator les animait. ViewHolder est le dernier élément: il est responsable de gérer tous les événements qui se produisent sur un article spécifique que RecyclerView affiche.
j'ai utilisé un ListView
avec Glide image loader, ayant la croissance de la mémoire. Puis j'ai remplacé le ListView
par un RecyclerView
. Il est non seulement plus difficile dans le codage, mais conduit également à une utilisation de mémoire plus qu'un ListView
. Au moins, dans mon projet.
Dans une autre activité, j'ai utilisé une liste complexe avec EditText's
. Dans certains d'entre eux une méthode d'entrée peut varier, aussi un TextWatcher
peut être appliqué. Si j'ai utilisé un ViewHolder
, Comment pourrais-je remplacer un TextWatcher
pendant le défilement? Donc, j'ai utilisé un ListView
sans ViewHolder
, et ça fonctionne.