ListView中的图像重复出现

时间:2014-05-09 12:24:13

标签: android image android-layout android-listview baseadapter

我正在解析vk的组墙。有些帖子有照片(从1到10),有些没有。我需要展示它们。但是,所有图像都会重复出现。我无法使它们正确显示。我现在正在使用毕加索。它说它可以处理ListView图像,但事实并非如此。我在谷歌上的其他方式也不起作用。问题是如何正确处理图像。这是一段负责照片的代码。

private void place_photos(View view, ArrayList<VKPhoto> photos) {
    int pcount = photos.size();
    final View v = view;
    TableRow first = (TableRow)v.findViewById(R.id.first_row);
    TableRow second = (TableRow)v.findViewById(R.id.second_row);
    TableRow third = (TableRow)v.findViewById(R.id.third_row);

    for (int i = 0; i < pcount; i++) {
        if (i == 1) {
            ImageView img = new ImageView(mContext);
            String url = photos.get(i).photo_807;
            img.setTag(url);
            Picasso.with(mContext).load(url).into(img);
            if (first != null)
                first.addView(img);
        }
        if (i == 2 || i == 3) {
            ImageView img = new ImageView(mContext);
            String url = photos.get(i).photo_807;
            img.setTag(url);
            Picasso.with(mContext).load(url).into(img);
            if (second != null)
                second.addView(img);
        }
        if (i > 3) {
            ImageView img = new ImageView(mContext);
            String url = photos.get(i).photo_807;
            img.setTag(url);
            Picasso.with(mContext).load(url).into(img);
            if (third != null)
                third.addView(img);
        }
    }
}

这就是在getView方法中调用它的方式:

if (post.attachments.hasPhoto) {
        place_photos(v, post.attachments.photos);
} else {
        viewHolder.photo_wrapper.setVisibility(View.GONE);
}

UPD 以下是完整的适配器代码:https://gist.github.com/alexbat98/7f22598e7e73d301a4ef

2 个答案:

答案 0 :(得分:0)

尝试

ImageView img; 

在ViewHolder类中,然后将其用作

 viewHolder.img = viewHolder.photo;
     viewHolder.img.setTag(photo_100);
     imageLoader.DisplayImage(photo_100,  viewHolder.img);

答案 1 :(得分:0)

问题应该归因于ListView回收。

尝试覆盖getViewTypeCountgetItemViewType

如果您的视图类型不同,则返回类型计数,例如如果有3种不同的类型,那么

@Override
public int getViewTypeCount() {
    return 3;
}

然后告诉ListView项目的哪个位置与其他位置不同,例如,如果位置0和1与其他项目不同,则将其更改为

@Override
public int getItemViewType(int position){
    // return a unique number
    if(position == 0){
        return 0;
    }
    if(position == 1){
        return 1;
    }
    else {
        return 2;
    }
}