Дублируйте изображения при загрузке изображений из ресурсов Android в виде растрового изображения и настройке ImaegView с помощью glideV4

Я попытался извлечь растровое изображение из ресурсов, а затем попытаться загрузить горизонтальный список изображений в режиме повторного просмотра, используя скольжение как asBitmap(), Я получаю дубликаты изображений и изображения несоответствия (загрузка неправильного изображения вместо требуемого изображения). На приведенном ниже снимке экрана показан ноутбук и мобильные телефоны с одинаковой загрузкой, а Footware и Bus с неправильной загрузкой Это работало хорошо после того, как я удалил кеш скольжения .skipMemoryCache(true),

Я хочу разрешить то же самое, использовать скользящий кэш для загрузки изображений.

Попробовал следующие пункты, которые были предложены на этой странице: Glide recyclerview loading duplicate image 1) Я добавил держателя поля. 2) очистка растрового изображения -> Glide.with(context).clear(holder.imgcat); или используя holder.imgcat.setImageBitmap(null); 3) skipMemoryCache(true) работал хорошо, но требуется кэш для загрузки изображений.

InputStream selectedInputStream = Application.get().getAssets().open(ImageSaver.selectedAssets + "/" + mValues.get(position).getImage_url());
                Drawable selectedImagesDrawable = Drawable.createFromStream(selectedInputStream, null);
                Bitmap selectedicon = ((BitmapDrawable) selectedImagesDrawable).getBitmap();
                if(selectedInputStream != null) {
                    try {
                        selectedInputStream.close();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
                GlideApp.with(context)
                        .asBitmap()
                        .load(selectedicon)
                        .diskCacheStrategy(DiskCacheStrategy.ALL)
                        .error(R.drawable.placeholder)
                        .placeholder(R.drawable.placeholder)
                        .into(holder.imgcat);

Я получаю дубликаты изображений и изображения несоответствия (загрузка неправильного изображения вместо требуемого изображения) во время установки .diskCacheStrategy(DiskCacheStrategy.RESOURCE) или же .diskCacheStrategy(DiskCacheStrategy.ALL),

skipMemoryCache(true) работал хорошо, но требуется кэш для загрузки изображений

1 ответ

Эта проблема иногда возникает в обзорах переработчиков. Представления переработчиков используют одни и те же ViewHolders для отображения элементов списка. таким образом, есть вероятность, что к одному ImageView ваших виджетов одновременно вызывается более одного запроса. Исправить это можно было бы, чтобы остановить любые другие запросы Glide, уже происходящие для этого ImageView.

//in your onBindViewHolder 
fun onBindViewHolder( holder:ViewHolder ,position:Int){
   //call this to clear previous requests
   Glide.with(context).clear(holder.imageView)
   //then make new request
   Glide.with(context).load(items[position].url).into(holder.imageview)
   //other codes
}
Другие вопросы по тегам