web-dev-qa-db-fra.com

Pourquoi Glide faire clignoter l'élément ImageView lorsque notifydatasetchanged

J'utilise Glide 3.7.0 avec RecyclerView. La vue des éléments clignote toujours lors de l'actualisation (en appelant notifyDataSetChanged).

Voici mon code:

Glide
  .with(context)
  .load(filepath)
  .diskCacheStrategy(DiskCacheStrategy.NONE)
  .skipMemoryCache(true)
  .dontAnimate()
  .into(imageview);

Lorsque je n'utilise pas de cache, la variable ImageView a un bitmap nul lorsque la méthode notifyDataSetChanged est appelée et que Glide n'a pas fini de charger le bitmap.

Si j'utilise le code ci-dessous:

Glide
  .with(context)
  .load(filepath)
  .dontAnimate()
  .into(imageview);

Ensuite, l'élément ImageView ne clignote plus (à l'aide du cache).

Je souhaite mettre à jour la vue des éléments de manière dynamique, donc je désactive le cache de plané.

Existe-t-il des solutions pour résoudre ce problème de clignotement?

Merci beaucoup!

11
Yoyoy Chu

Après mes nombreuses tentatives, il suffit d’utiliser SimpleTarget pour résoudre mon problème Merci!

Glide
.with(context)
.load(filepath)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.dontAnimate()
.into(new SimpleTarget<Bitmap>() {

            @Override
            public void onResourceReady(Bitmap arg0, GlideAnimation<? super Bitmap> arg1) {
                // TODO Auto-generated method stub
                holder.mItemView.setImageBitmap(arg0);
            }
        });
21
Yoyoy Chu

Dans mon cas, j'ai résolu le problème en utilisant des dimensions définies sur ma imageView.

<ImageView
        Android:id="@+id/poster_imageview"
        Android:layout_width="130dp"
        Android:layout_height="183dp"
        Android:adjustViewBounds="true"
        Android:scaleType="centerCrop"
        Android:src="@drawable/placeholder" />
1
john invictus

Mettre à jour Glide de la version 3 à la version 4 et setSupportsChangeAnimations(false) pour RecyclerView problème résolu pour moi

RecyclerView.ItemAnimator animator = recyclerView.getItemAnimator();
if (animator instanceof SimpleItemAnimator) {
    ((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
}
1
MakBeard

N'oubliez pas non plus de setHasStableIds(true); dans votre adapter et de remplacer correctement la méthode getItemId().

0
Daniil Andashev