Скользящая загрузка одного и того же изображения с учетом разных URL-адресов в Android RecycleView - Java - PullRequest
0 голосов
/ 09 июня 2018

Я реализовал Glide очень хорошо, но проблема в том, что он загружает одно и то же изображение для разных изображений с разными urls в recyclerview.

Основной вопрос: как я могузагрузить необходимые изображения и сохранить локальное кэширование для сохранения пользовательских данных?Вот мой код:

    Glide.with(context).load(objects.get(position)).apply(new RequestOptions().fitCenter().error(R.drawable.logo).placeholder(R.drawable.logo).diskCacheStrategy(DiskCacheStrategy.ALL)).into(new SimpleTarget<Drawable>() {
  @Override
  public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
    imageView.setImageDrawable(resource);
    progressBar.setVisibility(View.GONE);
  }
});

1 Ответ

0 голосов
/ 11 июля 2018

Вместо того, чтобы делать что-то вроде этого:

.into(new SimpleTarget<Drawable>() {
  @Override
  public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
    imageView.setImageDrawable(resource);
    progressBar.setVisibility(View.GONE);
  }
});

Просто вставьте в into функцию свой imageView.Если вы все еще хотите получать уведомления при каждой загрузке, вы можете использовать функцию listener.Ваш код должен выглядеть следующим образом:

Glide
   .with(context)
   .load(objects.get(position))
   .apply(new 
           RequestOptions()
                     .fitCenter()
                     .error(R.drawable.logo)
                     .placeholder(R.drawable.logo)
                     .diskCacheStrategy(DiskCacheStrategy.ALL)
          )
   .listener(new SimpleTarget<Drawable>() {
        @Override
        public void onResourceReady(@NonNull Drawable resource, @Nullable 
                                   Transition<? super Drawable> transition) {
            progressBar.setVisibility(View.GONE);
        }
   })
 .into(imageView);

Glide должен обрабатывать жизненный цикл RecyclerView самостоятельно.Единственное, что вам нужно сделать, это спрятать индикатор выполнения.Вам не нужно устанавливать рисование в ImageView самостоятельно.

ОБНОВЛЕНИЕ: Упомянутый подход является лучшим, однако он дает мне lint ошибки при использовании SimpleTarget<?>() внутри .listener(), возможно, из-за возможной разницы версий и заставил меня использовать RequestListener<Drawable>(), и это работает:

    Glide.with(holder.service_image.getContext()).load(imageArray.get(0)).apply(new RequestOptions().fitCenter().error(R.drawable.logo).placeholder(R.drawable.logo).diskCacheStrategy(DiskCacheStrategy.ALL)).listener(new RequestListener<Drawable>() {
      @Override
      public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
        return false;
      }

      @Override
      public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
        holder.progressBar.setVisibility(View.GONE);
        return false;
      }
    }).into( holder.service_image);
...