2016-09-28 112 views
-4

下载图像后,即使某些行没有ImageID,某些图像也会在列表视图行中重复显示,但适配器视图会复制下载的图像,当我突然滚动列表视图下载时在ListView中复制图像

我在getView

public View getView(final int position, View convertView, ViewGroup parent) { 
    int anotherPosition = position; 


    if (inflater == null) { 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 
    final Holder holder; 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.list_item, null); 
     holder = new Holder(); 

     holder.title = (TextView) convertView.findViewById(R.id.description); 
     holder.exp = (TextView) convertView.findViewById(R.id.expiration); 
     holder.someImages = (ImageView) convertView.findViewById(R.id.listview_image); 
     holder.isFavouriteImage = (ImageView) convertView.findViewById(R.id.isFavourite); 

     convertView.setTag(holder); 
     convertView.setTag(R.id.listview_image, holder.someImages); 
     convertView.setTag(R.id.description, holder.title); 
     convertView.setTag(R.id.expiration, holder.exp); 
     convertView.setTag(R.id.isFavourite, holder.isFavouriteImage); 
    } else { 
     holder = (Holder) convertView.getTag(); 
    } 
    RowItemLoyalty rowItemLoyalty = data.get(position); 

    if(rowItemLoyalty != null) { 
     holder.someImages.setTag(position); 
     holder.someImages.setImageBitmap(null); 
     holder.title.setText(data.get(position).getDescription()); 
     holder.exp.setText(data.get(position).getDateEnd()); 

     Log.d("TrueOrFalse", String.valueOf(holder.someImages)); 
     if(holder.someImages != null) { 
      if (data.get(position).getImageId() != 0) { 
       data.get(position).setBitmap(email, password, data.get(position).getImageId(), data.get(position).getBitmap(), new RowItemLoyalty.RetrieveBitmapListener() { 
        @Override 
        public void onSuccess(Bitmap bitmap) { 
         Log.d("ImageID123", String.valueOf(data.get(position).getImageId())); 
         holder.someImages.setImageBitmap(null); 
         if (data.get(position).getBitmap() != null) { 
          Log.d("True", "True"); 
          holder.someImages.setImageBitmap(bitmap); 
         } 
        } 
       }); 
      } 
     } else if(holder.someImages == null) { 
      Drawable placeholder = ContextCompat.getDrawable(context, R.drawable.placeholderwhite); 
      holder.someImages.setImageDrawable(placeholder); 
      Log.d("PlaceHolder2", String.valueOf(placeholder)); 
     } 

     //----------- placeholder for imageview list ----------- 

     //holder.someImages.setImageBitmap(null); 
     if (data.get(position).getBitmap() != null && holder.someImages != null) { 
      holder.someImages.setImageBitmap(data.get(position).getBitmap()); 
      Log.d("PlaceHolder", "Implemented"); 
      Log.d("PlaceHolder", String.valueOf(data.get(position))); 
     } else if (data.get(position).getBitmap() == null) { 
      Drawable placeholder = ContextCompat.getDrawable(context, R.drawable.placeholderwhite); 
      holder.someImages.setImageDrawable(placeholder); 
      Log.d("PlaceHolder2", String.valueOf(placeholder)); 
     } 

     //------------ for favourite logo------------- 
     if (data.get(position).getIsFavorite() == false) { 
      Drawable placeholderIsNotFavourite = ContextCompat.getDrawable(context, R.drawable.ic_favourite_icon); 
      holder.isFavouriteImage.setImageDrawable(placeholderIsNotFavourite); 
     } else if (data.get(position).getIsFavorite() == true) { 
      Drawable favourited = ContextCompat.getDrawable(context, R.drawable.favourite_two); 
      holder.isFavouriteImage.setImageDrawable(favourited); 
     } 
    } 

    return convertView; 
} 

我Holder类代码

public static class Holder { 
    TextView title; 
    TextView exp; 
    TextView tokensFor; 
    ImageView promotionImages; 
    ImageView isFavouriteImage; 
} 
+0

的'Holder'类 – Gattsu

+0

显示的代码也许你应该实现onFailure处方法上RowItemLoyalty.RetrieveBitmapListener – cgr

+0

@行家看到编辑一个 –

回答

-1

删除检查convertView == NULL条件的一些有用的库。像

convertView = inflater.inflate(R.layout.list_item, null); 
    holder = new Holder(); 

    holder.title = (TextView) convertView.findViewById(R.id.description); 
    holder.exp = (TextView) convertView.findViewById(R.id.expiration); 
    holder.someImages = (ImageView) convertView.findViewById(R.id.listview_image); 
    holder.isFavouriteImage = (ImageView) convertView.findViewById(R.id.isFavourite);  
+1

这就是应用程序的坏处。用这个所谓的解决方案,你摆脱了视图的回收... – Selvin

+0

@Selvin你有适当的解决方案吗?如果是,请分享。 –

+0

@Selvin如果你有一个很好的解决方案,请分享它 –