我是使用RecyclerView和Picasso的新手。 基本上,我尝试做的是 - 将推文列表传递给适配器。在OnBind()方法中,我使用Picasso将图像加载到每张卡上(如果存在)。 当我向上和向下滚动时,之前加载图像的卡片会闪烁并重新加载图像。文字没有闪烁。闪烁只发生在图像的情况下。
我尝试在recyclerview对象上使用setItemViewCacheSize(int size)。此功能缓存指定数量的项目,并为我提供了我正在寻找的流畅的用户体验。但是我注意到它导致了一个" outOfMemory"错误。
我错过了RecyclerView或Picasso文档中的某些内容吗?
TweetsAdapter.java
package com.umangmathur.mynewtwitterclone;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import com.twitter.sdk.android.core.models.MediaEntity;
import com.twitter.sdk.android.core.models.Tweet;
import java.util.List;
public class TweetsAdapter extends RecyclerView.Adapter<TweetsAdapter.TweetHolder> {
private List<Tweet> tweetList;
public TweetsAdapter(List<Tweet> tweetList) {
this.tweetList = tweetList;
}
@Override
public TweetHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.tweet_layout, parent, false);
return new TweetHolder(view);
}
@Override
public void onBindViewHolder(TweetHolder holder, int position) {
Context context = holder.itemView.getContext();
Tweet tweet = tweetList.get(position);
holder.txtTweet.setText(tweet.text);
List<MediaEntity> mediaEntityList = tweet.entities.media;
if (mediaEntityList != null) {
String mediaUrl = mediaEntityList.get(0).mediaUrl;
Picasso.with(context).load(mediaUrl).into(holder.imgTweet);
} else {
holder.imgTweet.setImageDrawable(null);
}
}
@Override
public int getItemCount() {
return tweetList.size();
}
public class TweetHolder extends ViewHolder {
private TextView txtTweet;
private ImageView imgTweet;
public TweetHolder(View itemView) {
super(itemView);
this.txtTweet = (TextView) itemView.findViewById(R.id.tweetText);
this.imgTweet = (ImageView) itemView.findViewById(R.id.imgTweet);
}
}
}