Du développeur Android ( Création de listes et de cartes ):
Le widget RecyclerView est une version plus avancée et flexible de ListView.
D'accord, ça a l'air cool, mais quand j'ai vu cet exemple d'image, je suis vraiment confus quant à la différence entre ces deux.
L'image ci-dessus peut être facilement créée en ListView
utilisant un adaptateur personnalisé.
Alors, dans quelle situation faut-il utiliser RecyclerView
?
android
listview
android-recyclerview
Blaze Tama
la source
la source
Réponses:
RecyclerView
a été créé comme uneListView
amélioration, donc oui, vous pouvez créer une liste jointe avecListView
contrôle, mais l'utilisationRecyclerView
est plus facile car elle:Réutilise les cellules tout en faisant défiler vers le haut / bas - cela est possible avec l'implémentation de View Holder dans l'
ListView
adaptateur, mais c'était une chose facultative, alors queRecycleView
c'est la façon par défaut d'écrire l'adaptateur.Découple la liste de son conteneur - vous pouvez donc placer facilement les éléments de la liste au moment de l'exécution dans les différents conteneurs (linearLayout, gridLayout) avec le paramètre
LayoutManager
.Exemple:
ItemAnimator
.Il y a plus
RecyclerView
, mais je pense que ces points sont les principaux.Donc, pour conclure,
RecyclerView
est un contrôle plus flexible pour le traitement des "données de liste" qui suit les schémas de délégation des préoccupations et ne laisse pour lui qu'une seule tâche - recycler les articles.la source
Pour que les vues de liste aient de bonnes performances, vous devez implémenter le modèle de support, et c'est facile à gâcher, surtout lorsque vous souhaitez remplir la liste avec plusieurs types de vues différents.
Le RecyclerView cuit ce modèle, ce qui 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.
la source
ListView
est l'ancêtre deRecyclerView
. Il y avait beaucoup de choses quiListView
ne fonctionnaient pas ou qui ne fonctionnaient pas bien. Si vous deviez rassembler les lacunes de laListView
et résolu le problème en résumant les problèmes dans différents domaines, vous vous retrouveriez avec quelque chose comme la vue du recycleur. Voici les principaux problèmes avec ListViews:N'a pas appliqué la
View
réutilisation pour les mêmes types d'élément (regardez l'un des adaptateurs utilisés dans unListView
, 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 une est passée dans via laconvertView
variable)N'a pas empêché coûteux
findViewById
utilisations (Même si vous recyclaient vues comme indiqué plus haut , il était possible pour les devs à appelleraientfindViewById
de mettre à jour le contenu affiché des vues de l' enfant. L'objectif principal duViewHolder
modèle dansListViews
était de mettre en cache lesfindViewById
appels. Toutefois , ce fut seulement disponible si vous le saviez car il ne faisait pas partie de la plate-forme du tout)Défilement vertical uniquement pris en charge avec les vues affichées en ligne (la vue Recycler ne se soucie pas de l'endroit où les vues sont placées et de la façon dont elles sont déplacées, elle est abstraite dans un
LayoutManager
. Un recycleur peut donc prendre en charge le traditionnelListView
comme indiqué ci-dessus, ainsi que des choses comme leGridView
, mais il ne se limite pas à cela, il peut faire plus, mais vous devez faire le travail de programmation pour y arriver).Les animations à ajouter / supprimer n'étaient pas un cas d'utilisation qui a été pris en compte. C'était à vous de comprendre comment procéder (comparez RecyclerView. Les classes d'adaptateurs notifient les offres de méthode * v ListViews pour avoir une idée).
En bref,
RecyclerView
c'est une approche plus flexible de laListView
, bien que davantage de codage puisse être nécessaire de votre part.la source
Réponse tirée d' Antonio leiva
RecyclerView
est en effet unpowerful view
queListView
. Pour plus de détails, vous pouvez visiter cette page .la source
Voici quelques points / différences clés entre RecyclerView et ListView. Prenez votre appel à bon escient.
la source
Avantage majeur :
ViewHolder
n'est pas disponible par défaut dansListView
. Nous allons créer explicitement à l'intérieur dugetView()
.RecyclerView
a intégréViewholder
.la source
En plus des différences ci-dessus, voici quelques autres:
RV sépare la création de la vue et la liaison des données à la vue. Dans LV, vous devez vérifier si convertView est nul ou non pour créer la vue, avant de lui associer des données. Ainsi, en cas de RV, la vue sera créée uniquement lorsque cela est nécessaire, mais en cas de LV, on peut manquer la vérification de convertview et créer une vue à chaque fois.
Basculer entre Grille et Liste est désormais plus facile avec LayoutManager.
Pas besoin de notifier et de mettre à jour tous les éléments, même si un seul élément est modifié.
Il fallait implémenter la mise en cache des vues en cas de LV. Il est fourni par défaut dans RV. (Il existe une différence entre la mise en cache des vues et le recyclage.)
Animations d'objets très faciles en cas de VR.
la source
Avantages de RecyclerVoir la liste:
Contient ViewHolder par défaut.
Animations faciles.
Prend en charge les dispositions horizontales, quadrillées et échelonnées
Avantages de listView sur recyclerView:
Diviseur facile à ajouter.
Peut utiliser arrayAdapter intégré pour des listes simples simples
Prise en charge de l'en-tête et du pied de page.
Prend en charge OnItemClickListner.
la source
recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
après avoir fait quelque chose commerecyclerView = view.findViewById(R.id.feed);
8 différences entre RecyclerView et ListView
1. Modèle ViewHolder
Modèle utilisé pour réduire les appels aux méthodes findViewById () .
Dans ListView, vous pouvez facilement créer une liste sans utiliser ViewHolder. Mais pas dans le cas de RecyclerView.
2. Adaptateur
Les deux sont des AdapterViews, oui. Il fonctionne en fonction de la classe d'adaptateur.
Il est facile de créer ListView à l'aide d'adaptateurs par défaut comme ArrayAdapter, CursorAdapter mais RecyclerView fournit la classe RecyclerView.Adapter, pour créer une nouvelle classe d'adaptateur personnalisée.
Vous ne pouvez pas utiliser ArrayAdapter ou tout autre adaptateur intégré avec RecyclerView.
3. Disposition des articles
J'ai créé Vertical ListView en code simple et moins. Mais que faire si nous devons créer une GridView?
RecyclerView utilise LayoutManager pour organiser ses éléments. Il existe 3 classes LayoutManager.
Des animations
ListView manque d'animations de base. Mais RecyclerView est livré avec des animations simples.
Séparateur
Les attributs android: divider et android: dividerHeight ou setDivider (), setDividerHeight () vous aident à créer un séparateur personnalisé dans ListView.
depuis le 25.1.0, vous pouvez utiliser la classe DividerItemDecoration pour créer un diviseur simple.
Cliquez sur Événements
RecyclerView manque OnItemClickListener , oui c'est très triste. Mais ils donnent plus de contrôle au développeur en fournissant RecyclerView.OnItemTouchListener.
Méthodes de notification
Vous devez appeler les méthodes de notification * appropriées pour effectuer des animations correctes. RecylcerView dispose de nombreuses méthodes de notification * lors de la comparaison avec ListView.
la source
Je pense que la principale et la plus grande différence qu'ils ont, c'est que
ListView
recherche la position de l'élément lors de la création ou de la mise, d'autre partRecyclerView
cherche le type de l'élément. s'il existe un autre élément créé avec le même type,RecyclerView
ne le créez pas à nouveau. Il demande d'abord l'adaptateur et demande ensuite à la piscine recyclée, si la piscine recyclée dit "ouais j'ai créé un type similaire", alorsRecyclerView
n'essaye pas de créer le même type.ListView
n'a pas ce type de mécanisme de mise en commun.la source
À mon avis, il a
RecyclerView
été fait pour résoudre le problème du modèle de recyclage utilisé dans les listes de visualisation, car cela rendait la vie du développeur plus difficile. Tous les autres que vous pourriez gérer plus ou moins. Par exemple, j'utilise le même adaptateur pourListView
etGridView
cela n'a pas d'importance dans les deux vuesgetView
, legetItemCount
,getTypeCount
est utilisé donc c'est la même chose.RecyclerView
n'est pas nécessaire siListView
avecListAdapter
ouGridView
avec des adaptateurs de réseau fonctionne déjà pour vous. Si vous avez correctement implémenté leViewHolder
modèle dans vos listes de vues, vous ne verrez aucune amélioration majeureRecycleView
.la source
J'ai un peu travaillé avec
RecyclerView
et je préfère encoreListView
.Bien sûr, les deux utilisent
ViewHolders
, donc ce n'est pas un avantage.A
RecyclerView
est plus difficile à coder.A
RecyclerView
ne contient pas d'en-tête et de pied de page, c'est donc un inconvénient.A
ListView
ne nécessite pas de créer un ViewHolder. Dans les cas où vous souhaitez avoir une liste avec des sections ou des sous-en-têtes, ce serait une bonne idée de créer des éléments indépendants (sans ViewHolder), c'est plus facile et ne nécessite pas de classes séparées.la source
Donc, si l'efficacité est votre préoccupation, alors oui, c'est une bonne idée de remplacer un ListView par un RecyclerView.
la source
Réponse simple: vous devez utiliser RecyclerView dans une situation où vous souhaitez afficher de nombreux éléments, et leur nombre est dynamique. 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, il existe de nombreuses options qui vous aident à 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., etc.
N'ayez pas peur et essayez RecyclerView, vous pouvez commencer à l'aimer en faisant une liste de 100 éléments téléchargés depuis le Web (comme les actualités facebook) dans un ListView et un RecyclerView, vous verrez la différence dans l'UX (utilisateur expérience) lorsque vous essayez de faire défiler, probablement l'application de test s'arrêtera avant même que vous puissiez le faire.
Je vous recommande de vérifier ces deux bibliothèques pour faire des adaptateurs faciles:
FastAdapter par mikepenz
FlexibleAdapter par davideas
la source
RecyclerVoir les informations
Le a
RecyclerView
été introduit avecAndroid 5.0 (Lollipop)
. il est inclus dans la bibliothèque de support . Ainsi, il est compatible avec l'API Android de niveau 7.De la même façon
ListView
,RecyclerView’s
l'idée principale est de fournir des fonctionnalités de référencement d'une manière respectueuse des performances. La partie «recycleur» du nom de cette vue n'est pas là par hasard. LeRecyclerView
peut réellement recycler les éléments avec lesquels il travaille actuellement. Le processus de recyclage se fait grâce à un motif appelé View Holder .Avantages et inconvénients de RecyclerView
Avantages:
Les inconvénients:
ListView info
Il
ListView
existe depuis le tout début d'Android. Il était disponible même enAPI Level 1
et il a le même objectif que leRecyclerView
.L'utilisation de ListView est en fait très simple. Dans cet aspect, ce n'est pas comme son successeur. La courbe d'apprentissage est plus fluide que celle du RecyclerView. Ainsi, il est plus facile à saisir. Nous n'avons pas à gérer des choses comme le LayoutManager, ItemAnimator ou DiffUtil.
Avantages et inconvénients de ListView
Avantages:
ExpandableListView
Les inconvénients:
la source
Il existe de nombreuses différences entre ListView et RecyclerView, mais vous devez être particulièrement attentif aux points suivants:
la source