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 将自动从缓存中加载。
此代码片段可能对您有所帮助....
viewholder 中指定的图像大小有问题。由于未加载图像,View holder 指定的宽度和高度为 match_parent。甚至请求侦听器都失败了,然后我尝试使用 submit()(按照建议 ),然后意识到资源已加载但在视图中加载它们失败了。
我已经开始在我现有的项目中实施 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 将自动从缓存中加载。
此代码片段可能对您有所帮助....
viewholder 中指定的图像大小有问题。由于未加载图像,View holder 指定的宽度和高度为 match_parent。甚至请求侦听器都失败了,然后我尝试使用 submit()(按照建议