我已经在我现有的项目中开始实施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);


为什么这在recyclerview中不显示任何项目?

最佳答案

视口中指定的图像尺寸有问题。由于未加载图像,因此指定了视图持有者match_parent的宽度和高度。甚至请求侦听器都失败了,然后我尝试使用commit()(如建议的here),然后意识到资源已加载,但鉴于视图加载失败。

10-07 19:28
查看更多