1

RecyclerViewダウンロードした画像をレンダリングするためにand volleyを使用NetworkImageViewしています。ビューは、作成者の画像、いくつかのテキスト フィールド、および画像で構成されます。以下は、ビューを設定するためのコード スニペットです。

// vh is the viewholder    
vh.picture.setDefaultImageResId(R.drawable.default_image);
vh.picture.setImageUrl(post.getImageUrl(), mImageLoader);

私が直面している問題は、スクロールすると、たとえば 20 枚の画像のうち、ほとんどが 18 枚まで表示されることです。ログから、すべての画像がダウンロードされてキャッシュにあることがわかりますが、レンダリングされていない画像もあります。これらのビューでは、デフォルトの画像でさえ表示されません。ビューが無効になっている場合 (もう一度上下にスクロール)、画像が表示されます。

面白いことに、写真が表示されないビューでは、そのすぐ上の投稿で同じ著者の写真が表示されていても、著者の写真も表示されません。ビュー全体に画像の表示に問題があるかのようです。

画像がダウンロードされたら、手動で呼び出す方法はありますinvalidate()か? または他のアイデアはありますか?postInvalidate()NetworkImageView

4

1 に答える 1

0

これもここで聞かれました。NetworkImageView をまったく使用しないことで、最終的にこの問題を回避しました。私は通常の ImageView の使用を開始しましたが、カスタム イメージ リクエストと onResponse() を介して画像をボレー経由で取得し、ビューに画像を適用しています。これはかなりうまくいくようです。

    public void getImage(String url, final ImageView v) {
    if (TextUtils.isEmpty(url)) return; // don't fetch a null url

    ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
        @Override
        public void onResponse(Bitmap response) {
            v.setImageBitmap(response);
        }
    }, 0, 0, null, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Error- " + error.getMessage());
        }
    });

    mRequestQueue.addToRequestQueue(imageRequest);
}
于 2016-12-09T22:17:28.563 に答える