3

我正在使用 volley 库从互联网加载图像。我有一个列表视图,有些行是使用 volley 的库“NetworkImageView”加载的,而其他行是由静态资源加载的。

似乎出了点问题,因为我有错误分配图像的行。

我有一个 ArrayAdapter,这里有我的 getView 方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder;

    House house = houses.get(position);

    if (convertView == null) {
        LayoutInflater inflater = ((Activity)getContext()).getLayoutInflater();
        convertView=inflater.inflate(this.layout, parent, false);

        holder=new ViewHolder();
        holder.image=(NetworkImageView) convertView.findViewById(R.id.imageView1);
        holder.name=(TextView) convertView.findViewById(R.id.housename_listelement_houseslist);
        holder.rating=(TextView) convertView.findViewById(R.id.houserating_listelement_houseslist);         

        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    if(house.getUrl()!=null){
        String url=house.getUrl();
        holder.image.setImageUrl(url, ((TopHousesListViewPager)getContext()).mImageLoader);
    }else{
        holder.image.setBackgroundResource(R.drawable.defaulthouse);
    }


    holder.name.setText(house.getName());
    holder.rating.setText(String.format("%.2f",house.getRate()));
return convertView;
}

正如你所看到的,如果我的对象有一个 url,我只显示来自互联网的图像,但是我有对象没有 url 但图像来自其他行的行...

建议?

谢谢!

4

2 回答 2

10

正如@Selvin 所说:每次获得持有人后,您都必须重置图片网址:

    } else {
        holder = (SuggestionViewHolder) convertView.getTag();
        holder.image.setImageUrl(null, imageLoader);
    }

    if(house.getUrl()!=null){
       String url=house.getUrl();
       holder.image.setImageUrl(url, ((TopHousesListViewPager)getContext()).mImageLoader);
    } else {
       holder.image.setBackgroundResource(R.drawable.defaulthouse);
    } 

这对我有用。

于 2014-01-29T22:24:50.830 回答
3

如果有人在 Android 4.0+ 中使用更现代的 ViewHolder/getView 范例和固定getTagSparseArray,这里是你解决这个问题的方法

 @Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) {
        convertView = LayoutInflater.from(context)
                .inflate(R.layout.mLayout, parent, false);
    }

    );

            NetworkImageView mView = ViewHolder.get(convertView, R.id.mview);
           mView.setImageUrl(null, mImageLoader);

此时将 imageUrl 设置为 null,然后在稍后在 getView 中将列表对象加载到当前位置后,在此处设置正确的 imageUrl

于 2014-02-25T16:27:50.923 回答