【问题标题】:Images in ListView are repeatedListView 中的图像重复
【发布时间】:2014-05-09 12:24:13
【问题描述】:

我正在解析 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

【问题讨论】:

  • 如果您使用自定义适配器,请在此处粘贴该代码
  • @Kat-hat 上传到 Gist
  • 我不确定,但你设置了 viewholder.photo 吗?
  • 尝试使用这个“AndroidQuery”很棒的库从服务器异步加载图像code.google.com/p/android-query
  • 我在 Gist 中没有找到 viewHolder.photo_wrapper。这个 imageview(viewHolder.photo_wrapper) 是重复的吗?

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


【解决方案1】:

试试

ImageView img; 

在 ViewHolder 类中,然后将其用作

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

【讨论】:

  • 其实viewHolder.photo是一个用户头像。我没有问题。问题在于 place_photos 方法。这是截图:db.tt/9PvaoRPS
  • 对不起,但代码实际上看起来有点乱......你可以做的是你发现适配器中的图像视图正在重复,将它放入 ViewHolder 类并使用与我在上面为“ img"(图像视图)
  • 是的,代码有点乱。但是如何使用 ViewHolder?我动态地创建这些视图。所以,我的 xml 布局中没有它们,我不知道我会有多少张照片。
【解决方案2】:

问题应该是由于ListView 回收。

尝试覆盖getViewTypeCountgetItemViewType

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

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

然后,然后告诉ListView item 的哪个位置与其他项不同,例如,如果位置 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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 2011-02-04
    • 1970-01-01
    • 2014-06-19
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多