我通过universalImageDownloader从互联网上获取图像,我正在使用ViewHolder来显示它们:
public class ListAdapter2 extends BaseAdapter {
Activity activity;
public ArrayList<HashMap<String, String>> list;
public ListAdapter2(Activity activity, ArrayList<HashMap<String, String>> list) {
super();
this.activity = getActivity();
this.list = list;
}
public HashMap<String, String> geting(int position) {
return list.get(position);
}
public void addAll(ArrayList<HashMap<String, String>> result) {
if (this.list == null) {
this.list = result;
} else {
this.list.addAll(result);
}
notifyDataSetChanged();
}
public int getCount() {
return list.size();
}
public Object getItem(int position) {
return list.get(position);
}
public long getItemId(int arg0) {
return 0;
}
private class ViewHolder {
ImageView img;
}
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
LayoutInflater inflater = activity.getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate(R.layout.row_grids, null);
holder = new ViewHolder();
holder.img = (ImageView) convertView.findViewById(R.id.image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
item = list.get(position);
if(item.get("img").length()>0)
imageLoader.displayImage("http://website.com/img/" + item.get("img"), holder.img, options,
imageListener);
else
holder.img.setImageDrawable(getResources().getDrawable(R.drawable.fix));
}
return convertView;
}
public void clear() {
if (this.list.size() > 0)
this.list.clear();
}
}
private static class ImageDisplayListener extends SimpleImageLoadingListener {
static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (loadedImage != null) {
ImageView imageView = (ImageView) view;
boolean firstDisplay = !displayedImages.contains(imageUri);
if (firstDisplay) {
FadeInBitmapDisplayer.animate(imageView, 500);
displayedImages.add(imageUri);
}
}
}
}
我已经用3部手机测试了它并且工作正常但是当我在朋友的手机上测试时,有时其中一张图片没有显示。
例如,当我来到活动时,它会显示所有图像,当我向下滚动最后一个项目不再显示的位置时,然后我向上滚动,突然之前显示的一个图像不再显示了它显示它的默认图像。
这段代码有什么问题吗? 顺便说一句,我有4个选项卡,这会在选项卡中发生。
谢谢
答案 0 :(得分:2)
displayImage方法的问题,在某些情况下无法正确编码URL ..更好的approch你应该使用Picasso库
如果您正在使用android studio,请添加
编译'com.squareup.picasso:picasso:2.5.2'
在build.gradle文件中并同步:
或者Picasso Site下载eclipse的Jar文件
之后,您可以使用Picasso库并用
替换您的行if(item.get("img").length()>0)
imageLoader.displayImage("http://website.com/img/" + item.get("img"), holder.img, options,
imageListener);
else
holder.img.setImageDrawable(getResources().getDrawable(R.drawable.fix));
}
String imgUrl = "http://website.com/img/" + item.get("img");
if (!imgUrl.equals(""))
Picasso.with(activity).load(imgUrl).into(holder.img);
else
Picasso.with(activity).load(R.drawable.fix).into(holder.img );
答案 1 :(得分:0)
使用“lazyImageLoaderAdapter.notifyDataSetChanged();” 其中lazyImageLoaderAdapter是任何适配器的对象。