Как отключить перезагрузку изображения в recyclerview

#android #android-recyclerview #android-glide

#Android #android-recyclerview #android-glide

Вопрос:

В моем recyclerview при прокрутке вверх / вниз изображения перезагружаются снова. это портит пользовательский интерфейс.

Я знаю поведение recyclerview по умолчанию. Но я хочу реализовать то же самое, что и Whatsapp. Они не перезагружают изображение, если оно уже загружено. Кто-нибудь мне посоветует.

Мой код библиотеки Glide:

    BitmapTypeRequest glideRequestmgr = Glide.with(context).load(getGlideURL(path, context)).asBitmap();

        glideRequestmgr.diskCacheStrategy(DiskCacheStrategy.ALL)
                .dontTransform()
                .dontAnimate()
                .into(new SimpleTarget<Bitmap>() {

                    @Override
                    public void onResourceReady(Bitmap arg0, GlideAnimation<? super Bitmap> arg1) {
                        imageView.setImageBitmap(arg0);
                    }
                });
  

Ответ №1:

Наконец, я исправил эту проблему, поместив recyclerview внутрь NestedScrollView

Шаг 1:

 <android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</android.support.v4.widget.NestedScrollView>
  

Шаг 2:

 recyclerView.setNestedScrollingEnabled(false);
  

Комментарии:

1. Очень интересное решение, могу я узнать, как это работает? У меня это тоже сработало. Но любопытно узнать, как.

2. Скорее всего, это приведет к ошибке OutOfMemeory.

3. @SukithaUdugamasooriya да, я согласен. Это возможно из-за ошибки OutOfMemory. Но в моем случае у меня меньше данных. Если вы нашли какое-либо хорошее решение, опубликуйте свой ответ, чтобы помочь другим.

Ответ №2:

Попробуйте это

 GlideApp.with(context)
                    .asBitmap()
                    .load(pathToLoad)
                    .error(R.drawable.ob_glide_app_img_loader)
                    .listener(requestListener)
                    .into(simpleTarget)
  

Комментарии:

1. хороший улов. Я использую старую версию. спасибо за предложение, я попробую

2. также добавьте .DiskCacheStrategy(DiskCacheStrategy.ALL).

Ответ №3:

Используйте свойство RecyclerView,

 recyclerview.setHasFixedSize(true);