0

J'utilise l'affichage recycleur avec vue grille (chaque élément contient une grille) avec des images miniatures après l'ajout des images dans la vue, il commence à télécharger, et j'ai besoin de changer certaines valeurs (statut) dans le modèle au moment du début et de la fin du téléchargement. Ce que je suis en train de faire est de modifier des valeurs dans le modèle et appellent notifyDataSetChanged, mais il provoque de ralentir l'application (se bloquer quelques fois), car il mise à jour tous les enfants de la liste :( peut me aider?Comment rafraîchir les données dans l'adaptateur sans appeler notifyDataSetChanged

+0

Toutes les valeurs varient ou certaines valeurs seulement? – hehe

+0

@gj à la fois la valeur d'un élément change à partir de la grille. – Ankit

+0

il existe d'autres méthodes comme notifydatarangeinserted., NotifyItemChanged (position int, Objet charge utile) vérifier les doc http://developer.android.com/intl/es/reference/android/support/v7/widget/RecyclerView.Adapter.html/ – Raghunandan

Répondre

0

appelez notifydatasetchanged() pour adaptateur Gridview particulier seulement. ne pas appeler notifydatasetchanged() pour adaptateur recyclerview complet.

0

essayez de le configurer à nouveau à l'adaptateur.

gridview.setAdapter (adaptateur) -passing votre nouveau liste à votre adaptateur

+0

@nikhil Than Il ne me laissera pas défiler vers le bas, continuer à régler l'adaptateur. – Ankit

1

Je crois notifyDataSetChanged met à jour toutes vos valeurs, peu importe si elles ont un changement ou non, c'est pourquoi il est lent. Je suggère que vous essayez d'utiliser notifyItemChanged(int position) à la place.

Selon recyclerview docs c'est ce que notifyDataSetChanged fait:

Cet événement ne précise pas sur l'ensemble de données a changé, ce qui oblige les observateurs à supposer que tous les éléments existants et la structure ne peuvent plus être valides. LayoutManagers sera obligé de relier entièrement et de relancer toutes les vues visibles.

+0

J'ai utilisé notifyItemChanged (position int), mais si j'utilise plus de 10 images dans une grille, j'appelle notifyItemChanged 10 fois en 1 seconde pour que le problème reste le même. – Ankit

+0

Hmmm, pourquoi ne pas utiliser observable de rxandroid? Je ne l'ai pas encore essayé mais je pense que ça vaut le coup. Qu'est-ce qui se passera, vous appelez 'notifyItemChanged' tout en même temps. – hehe

0

Ancienne question mais similaire à ce que je vis. RecyclerView est généralement incroyablement rapide lors de la modification des détails de la liste. Mais manipuler beaucoup d'images peut vraiment le ralentir si vous n'êtes pas careul.

Je vous recommande d'essayer de supprimer les images et répétez-le pour que vous puissiez voir si c'est aussi lent. Je pense que ce sera beaucoup plus rapide.

Si tel est le cas, assurez-vous que vous manipulez les images hors du fil d'interface utilisateur. Les documentations Android vous recommandent d'utiliser une bibliothèque telle que Glide qui gère également le sous-échantillonnage de l'image pour s'assurer qu'elle est de la bonne taille.

Espérons que ça aide!