2014-05-09 52 views
0

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

+0

如果你使用自定义的适配器粘贴这里的代码 –

+0

@ Kat-hat上传到Gist –

+0

我不知道,但你设置viewholder.photo? – Cocorico

回答

0

尝试

ImageView img; 

ViewHolder类中和th en使用它作为

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

其实viewHolder.photo是一个用户头像。我没有问题。问题在于place_photos方法。这是一个屏幕截图:https://db.tt/9PvaoRPS –

+0

Sry,但代码实际上看起来有些杂乱......你可以做的是,你找到的适配器中的imageview正在重复,把它放到ViewHolder类中,并使用和我上面的“img”一样(ImageView) –

+0

是的,代码有点混乱。但我怎样才能使用ViewHolder?我以无限的方式创造了这些观点。所以,我没有在我的XML布局中拥有它们,我不知道我会有多少照片。 –

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; 
    } 
}