【发布时间】:2015-06-09 17:00:28
【问题描述】:
我有一个 ListView,每次我上下滚动时都会刷新图像
我正在从我提供给毕加索的 JSON 中挑选图片网址。
我正在使用 Picasso 加载图像。
所有图像的总大小为 516kb,知道这一点,我不认为这是缓存问题,因为图像大小实际上很小。
老实说,我已经在 S.O 上研究过这个问题,但还没有看到任何好的解决方案。
也许这个问题与毕加索无关,也许我的实现实际上是错误的。请我需要更多这方面的知识。
这是我下面的代码。
public class ImageAdapter extends ArrayAdapter<Genres> {
ArrayList<Genres> movieList;
TextView movietitle, moviecategory;
LayoutInflater vi;
int Resource;
ViewHolder holder;
private Context mContext;
public ImageAdapter(Context context, int resource, ArrayList<Genres> objects) {
super(context, resource, objects);
vi = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Resource = resource;
movieList = objects;
mContext = context;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
ImageView imageView;
if (v == null) {
holder = new ViewHolder();
v = vi.inflate(Resource, null);
holder.imageview = (ImageView) v.findViewById(R.id.movieimage);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(96, 128);
holder.imageview.setLayoutParams(layoutParams);
holder.imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
holder.imageview.setPadding(4, 4, 4, 4);
holder.imageview.setAdjustViewBounds(true);
holder.movietitle = (TextView) v.findViewById(R.id.movietitle);
holder.moviecategory = (TextView) v.findViewById(R.id.moviecategory);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
Picasso.with(mContext)
.load(movieList.get(position).getImage())
.noFade()
.into(holder.imageview);
holder.movietitle.setText(movieList.get(position).getMoviename());
holder.moviecategory.setText(movieList.get(position).getCategory());
return v;
}
static class ViewHolder {
public ImageView imageview;
public TextView movietitle;
public TextView moviecategory;
}
}
【问题讨论】:
-
如果您认为您的图像没有被缓存,您可以在 Picasso 实例上设置
setIndicatorsEnabled(true)以查看它是否从 memoryCache 加载。 Picasso -
“刷新”到底是什么意思?
-
@david.mihola 刷新是指图像在我滚动离开它们时消失,图像不在当前窗口中,当我向上滚动时,它会消失
-
每次滚动时它总是尝试再次请求图像
-
@mrtn 当我使用 setIndicators 和 setLogging 时,我发现图像实际上正在被缓存。它显示我“从记忆中完成”