2016-04-24 20 views
1

私はリストデータを表示するためにRecyclerViewを持っていますが、上下にスクロールすると、Volleyを使ったURLからの画像ロードが消えて再び表示されます。このHow ListView's recycling mechanism worksを読んだ後、リストは商品をリサイクルすることがわかります。ここで私のアダプターはどこですか?あなたの実装でリストをスクロールした後、RecyclerViewでAndroidイメージが消えますか?

public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder> { 

private ArrayList<Post> posts; 
private Context context; 
private ImageLoader imageLoader; 

public PostAdapter(ArrayList<Post> posts, Context context) { 
    this.posts = posts; 
    this.context = context; 
    imageLoader = MySingleton.getInstance(context).getImageLoader(); 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.item_post, parent, false); 
    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.name.setText(posts.get(position).getName()); 
    holder.timestamp.setText(posts.get(position).getTimestamp()); 
    holder.status.setText(posts.get(position).getStatus()); 
    holder.avatar.setImageUrl(Constants.URL_IMAGE + posts.get(position).getAvatar(), imageLoader); 
    if(!posts.get(position).getImage().equals("")) { 
     holder.image.setVisibility(View.VISIBLE); 
     holder.image.setImageUrl(Constants.URL_IMAGE + posts.get(position).getImage(), imageLoader); 
    } else { 
     holder.image.setVisibility(View.GONE); 
    } 
} 

@Override 
public int getItemCount() { 
    return posts.size(); 
} 

public static class ViewHolder extends RecyclerView.ViewHolder { 
    NetworkImageView image, avatar; 
    TextView status, timestamp, name; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     avatar = (NetworkImageView) itemView.findViewById(R.id.profilePic); 
     image = (NetworkImageView) itemView.findViewById(R.id.feedImage1); 
     status = (TextView) itemView.findViewById(R.id.txtStatusMsg); 
     name = (TextView) itemView.findViewById(R.id.name); 
     timestamp = (TextView) itemView.findViewById(R.id.timestamp); 
    } 
}} 
+1

好き@tuanpitねえ、同じ問題に直面して、あなたはこのために修正を発見しましたか?はいの場合は共有してください。 –

+0

@BipinVayalu私の場合、私はコンピュータをモバイルアプリのサーバーとして使用しています。おそらく接続が遅いか、他のいくつかのプロンプトがこの問題を引き起こしました。アプリケーションを実サーバに入れると、すべて正常に動作します。遅い応答のために申し訳ありませんが、あなたと他の人々を助けることを願っています – tuanptit

答えて

0

あなたはビューホルダーにバインドするたびsetImageUrl()を呼んでいます。 ImageLoaderはキャッシュをサポートし、使用していますが、これはネットワーキングレベルにあり、URLの設定と画像の表示(消えて表示)の間に少し時間がかかります。

この良く処理するために、あなたはあなたのイメージのためのインメモリキャッシュを実装し、 cacheは、独自の実装になり

String image = posts.get(position).getImage(); 
if("".equals(image)) { 
    holder.image.setVisibility(View.GONE); 
} else if (cache.hasImage(image)) { 
    holder.image.setVisibility(View.VISIBLE); 
    holder.image.setImageBitmap(cache.getImage(image)); 
} else { 
    holder.image.setVisibility(View.VISIBLE); 
    holder.image.setImageUrl(Constants.URL_IMAGE + image, imageLoader); 
} 

のように直接これらを設定する必要があります。

-1

この

holder.image.setVisibility(View.VISIBLE); 
if(!posts.get(position).getImage().equals("")) {   
     holder.image.setImageUrl(Constants.URL_IMAGE + posts.get(position).getImage(), imageLoader); 
    } else { 
     holder.image.setVisibility(View.GONE); 
    } 
関連する問題