我在 RecyclerView.Adapter 中使用 NetworkImageView 来下载一些图像并将它们显示在列表中。
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final Post current = mDataSet.get(position);
NetworkImageView imgView = (NetworkImageView)holder.itemView.findViewById(R.id.post_image);
imgView.setImageUrl(current.getImagePath(), ControllerVolley.getInstance().getImageLoader());
}
但我意识到,即使图像已经缓存在磁盘上,每次它都会尝试再次下载图像。
此下载失败时会出现问题,因为我无法在此 NetworkImageView 中设置 Response.Listener 无法尝试再次下载它。
因此,我正在检查图像是否已被缓存以手动加载。我正在使用在这个问题上推荐的 CustomNetworkImageView。
CustomNetworkImageView imgView = (CustomNetworkImageView)holder.itemView.findViewById(R.id.post_image);
Cache.Entry entry = ControllerVolley.getInstance().getDiskCache().get("0:"+current.getImagePath());
if (entry != null) {
byte[] dataBitmap = entry.data;
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
imgView.setLocalImageBitmap(BitmapFactory.decodeByteArray(dataBitmap, 0, dataBitmap.length, options));
} else {
imgView.setImageUrl(current.getImagePath(), ControllerVolley.getInstance().getImageLoader());
}
但它不加载位图。
有没有更好的方法来处理这种情况?