2016-07-29 2 views
2

J'ai un élément dans RecyclerView qui n'a pas besoin d'être mis à jour lorsque j'appelle notifyDataSetChanged.Comment rendre l'élément spécifié ne pas mettre à jour lorsque notifyDataSetChanged dans RecyclerView

Mais je n'ai trouvé aucune méthode pour éviter que l'élément spécifié ne soit mis à jour. Est-il possible de faire cela ?


que je dois faire cela parce que l'élément est un WebView, il avait chargé une page html, si j'ai appelé notifyDataSetChanged, cet élément clignote.

La raison pour laquelle je poste cette question évite le flash du WebView lorsque notifyDataSetChanged (voir this quesion). Après l'échec de l'utilisation des méthodes notifyItemRangeXXX, je publie cette question.

Mais après avoir vérifié vos réponses et commentaires, il semble qu'il est impossible d'éviter la mise à jour lors de l'utilisation notifyDataSetChanged.

+1

Si vous ne voulez pas la mettre à jour, ne changez pas la source de données –

+0

Si viable, vous pouvez également utiliser 'notifyItemChanged (pos)' pour les autres, sauf l'élément en question. – Shaishav

+0

Si vous utilisez l'outil RecyclerView.Adapter. Vous pouvez envisager les méthodes notifyItemChanged (position int), notifyItemRangeChanged (int positionStart, int itemCount) –

Répondre

2

Le but de notifyDataSetChanged IS est de mettre à jour tous les articles. Ne l'utilisez pas si vous ne voulez pas de ce comportement!

L'approche correcte consiste à mettre à jour uniquement les données que vous avez modifiées. Il y a quelques méthodes qui vous aideront à invalider seulement les données désirées:

notifyItemChanged(int position) 
notifyItemInserted(int position) 
notifyItemMoved(int fromPosition, int toPosition) 
notifyItemRangeChanged(int positionStart, int itemCount) 
notifyItemRangeRemoved(int positionStart, int itemCount) 
notifyItemRemoved(int position) 
1

Vous devriez penser différemment - quels éléments doivent être mis à jour. Pour mettre à jour l'interface utilisateur de l'article, après que les données ont changé, utilisez la méthode notifyitemchanged

2

Oui, c'est réellement possible de faire ainsi. notifyDataSetChanged() indique à RecyclerView que tous les éléments de l'ensemble de données ont été modifiés.

Comme vous ne voulez pas que cela se produise et d'exclure des éléments spécifiques.

for(int i = 0; i< mAdapter.getItemCount(); i++){ 
    if(i != itemPositionToExclude){ 
     mAdapter.notifyItemChanged(i); 
    } 
} 

Donc, nous avons besoin de faire une boucle à travers tous les éléments de l'adaptateur et appeler notifyItemChanged() uniquement pour les postes which you do not want to exclude.