Просмотр списка и залп - изображение неправильно назначено

Я использую библиотеку 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-адреса, но изображение из другой строки...

Советы?

Благодарю вас!


person culebrins    schedule 24.11.2013    source источник
comment
установить URL-адрес изображения обратно на ноль в статусе else   -  person Selvin    schedule 24.11.2013
comment
@Selvin Вы должны писать как ответ, а не как комментарий   -  person Itai Hanski    schedule 25.11.2013


Ответы (2)


Как сказал @Selvin: вы должны сбрасывать URL-адрес изображения каждый раз после получения держателя:

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

Это сработало для меня.

person muetzenflo    schedule 29.01.2014
comment
Привет всем, я также столкнулся с той же проблемой, и установка setIamger (null, mImageLoader) не решает проблему. Я также пробовал setimageBitmap(null), но это тоже бесполезно. Эта проблема не возникает с библиотекой picasso. Кто-нибудь решил эту проблему. - person Manish; 14.03.2016
comment
Любая идея, как решить эту проблему в адаптере просмотра ресайклера? - person Antwan; 03.04.2016

Если кто-то использует более современную парадигму ViewHolder/getView с фиксированными getTag и SparseArray в Android 4.0+, вот как решить эту проблему.

 @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

person CQM    schedule 25.02.2014
comment
Привет всем, я также столкнулся с той же проблемой, и установка setIamger (null, mImageLoader) не решает проблему. Я также пробовал setimageBitmap(null), но это тоже бесполезно. Эта проблема не возникает с библиотекой picasso. Кто-нибудь решил эту проблему. - person Manish; 14.03.2016