Glide v4 RecyclerView 预加载图像不显示

Glide v4 RecyclerView Preload Images not displayed

我已经开始在我现有的项目中实施 Glide,并且一直在阅读文档和示例。我检查了 Flickr 的示例应用程序,并尝试像它一样预加载图像。

我正在片段中初始化 GlideRequest,然后将其传递给适配器以预加载图像并显示。但是当我 运行 我的应用程序时,我既没有收到任何错误也没有显示任何图像。我对示例应用程序中的代码进行了轻微修改,因为我不需要任何模型加载器。

这是我在片段中的初始化:

private GlideRequests instructorRequestBuilder;
instructorRequestBuilder = GlideApp.with(this);

我在里面赋值给

preloadRequest

适配器构造函数中的变量。

bindViewHolder 的代码如下:

  private void setImage(final String image, final ImageView imageView)
  {
    preloadRequest.load(image)
        .centerCrop()
        .placeholder(R.drawable.placeholder_explore_user)
        .error(R.mipmap.ic_launcher)
        .listener(new RequestListener<Drawable>()
        {
          @Override public boolean onLoadFailed(@Nullable GlideException e, Object model,
              Target<Drawable> target, boolean isFirstResource)
          {
            Log.d(TAG, "onLoadFailed: " + e);
            return false;
          }

          @Override
          public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target,
              DataSource dataSource, boolean isFirstResource)
          {
            Log.d(TAG, "onLoadFailed: " + isFirstResource);
            Log.d(TAG, "onLoadFailed: " + dataSource);
            return false;
          }
        })
        .into(imageView);
  }

我的适配器实现

ListPreloader.PreloadModelProvider

这是实现方法的代码:

  @NonNull @Override public List<IConnectType> getPreloadItems(int position)
  {
    return iConnectInstructors.subList(position, position + 1);
  }

  @Nullable @Override
  public RequestBuilder<Drawable> getPreloadRequestBuilder(@NonNull IConnectType item)
  {
    return preloadRequest.load(((User) item)
        .getProfileImage250())
        .placeholder(R.drawable.placeholder_explore_user)
        .centerCrop()
        .error(R.mipmap.ic_launcher);
  }

PreloadSize 和 PreLoader 初始化如下:

ViewPreloadSizeProvider<IConnectType> preloadSizeProvider = new ViewPreloadSizeProvider<>();
RecyclerViewPreloader<IConnectType> preloader = new RecyclerViewPreloader<IConnectType>(
    GlideApp.with(this), adapter,
    preloadSizeProvider, 6);
rvInstructor.addOnScrollListener(preloader);
rvInstructor.setItemViewCacheSize(0);

为什么在回收站视图中没有显示任何项目?

您正在尝试在 onbind view holder 中加载图像,并在要显示项目时调用它,因此它会延迟加载图像...

而不是尝试首先加载缓存中的所有图像列表。如果在本地缓存中可用,glide 将自动从缓存中加载。

此代码片段可能对您有所帮助....

https://github.com/bumptech/glide/issues/2499

viewholder 中指定的图像大小有问题。由于未加载图像,View holder 指定的宽度和高度为 match_parent。甚至请求侦听器都失败了,然后我尝试使用 submit()(按照建议 ),然后意识到资源已加载但在视图中加载它们失败了。