我知道这个问题以前曾经多次被问过。但这些解决方案中没有一个适合我。我试图从服务器获取一些数据并将其显示在customlistview中。我已成功完成,但问题是当我向下滚动列表时。它在错误的行上显示错误的图像。像行(2)上的行(1)的图像和行(1)上的行(2)的图像或重复相同的图像。我正在使用UIL libaray来加载图像。 下面是我正在使用的代码。
public class CustomListAdapter extends BaseAdapter {
Context context;
Main values;
LayoutInflater inflater;
public CustomListAdapter(Context context,Main values){
this.context=context;
this.values=values;
inflater = ( LayoutInflater )context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return values.getPosts().size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
ImageLoader imageLoader=ImageLoader.getInstance();
if(convertView==null){
viewHolder= new ViewHolder();
convertView=inflater.inflate(R.layout.item_list,parent,false);
viewHolder.category=(TextView)convertView.findViewById(R.id.category);
viewHolder.title=(TextView)convertView.findViewById(R.id.title);
viewHolder.date=(TextView)convertView.findViewById(R.id.date);
viewHolder.imageView=(ImageView)convertView.findViewById(R.id.image);
convertView.setTag(viewHolder);
}
else {
viewHolder=(ViewHolder)convertView.getTag();
}
viewHolder.category.setText(values.getPosts().get(position).getCategories().get(0).getTitle());
viewHolder.title.setText(Html.fromHtml(values.getPosts().get(position).getTitle()));
viewHolder.date.setText(values.getPosts().get(position).getDate());
ImageSize targetSize = new ImageSize(700,228);
final ViewHolder finalViewHolder = viewHolder;
imageLoader.loadImage(values.getPosts().get(position).getThumbnail_images().getFull().getUrl(),targetSize, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// Do whatever you want with Bitmap
Bitmap bitmap = loadedImage;
Drawable dr = new BitmapDrawable(bitmap);
finalViewHolder.imageView.setBackground(dr);
}
});
return convertView;
}
private static class ViewHolder{
public TextView category;
public TextView title;
public TextView date;
public ImageView imageView;
}
}
答案 0 :(得分:1)
我遇到了这个问题因为我没有缓存图像。因此,每当我向下滚动它发送一个下载图像的请求(需要时间),然后它会在正确的项目上膨胀实际图像。
我在应用程序类中添加了以下代码。
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder().
cacheInMemory(true).cacheOnDisk(true)
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.build();
ImageLoader.getInstance().init(config);