即使我使用viewholder,ListView中的错误项目上的图像也是错误的

时间:2015-12-15 11:19:40

标签: android listview baseadapter

我知道这个问题以前曾经多次被问过。但这些解决方案中没有一个适合我。我试图从服务器获取一些数据并将其显示在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;
}
}

1 个答案:

答案 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);