2

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());

    }

しかし、それはビットマップをロードしません。

この状況を処理するためのより良い方法はありますか?

4

0 に答える 0