我已经在我现有的项目中开始实施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),然后意识到资源已加载,但鉴于视图加载失败。