2013-06-12 25 views
3

我正在使用Gridview來顯示服務器的一些圖像行。對於異步圖像加載,我使用新的網絡庫Volley。 最初的圖像加載工作正常,但只要我上下滾動圖像隨機顯示在錯誤的網格單元格內。但TextView內容始終正確顯示。GridView滾動問題使用Android Volley網絡庫

我的適配器碼:

 
    class BadgeGalleryAdapter extends BaseAdapter { 

     private LayoutInflater mInflater; 
     private ImageLoader mImageLoader; 

     // Constructor 
     public BadgeGalleryAdapter(Context c) { 
      mInflater = (LayoutInflater) c 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      mImageLoader = ImageCacheManager.getInstance().getImageLoader(); 
     } 

     @Override 
     public int getCount() { 
      return mBadgeList.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      return mBadgeList.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

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

      ViewHolder viewHolder; 

      // Use ViewHolder pattern to only inflate once 
      if (convertView == null) { 

       convertView = mInflater.inflate(R.layout.user_badge_grid_item, 
         parent, false); 

       viewHolder = new ViewHolder(); 
       viewHolder.badgeImage = (ImageView) convertView 
         .findViewById(R.id.grid_badge_image); 
       viewHolder.badgeName = (TextView) convertView 
         .findViewById(R.id.grid_badge_name); 

       convertView.setTag(viewHolder); 
      } else { 
       viewHolder = (ViewHolder) convertView.getTag(); 
      } 

      Badge badge = (Badge) getItem(position); 
      if (badge != null) { 
          //using Volley ImageLoader 
       mImageLoader.get(badge.imageUrl, ImageLoader 
         .getImageListener(viewHolder.badgeImage, 0, 0)); 
       viewHolder.badgeName.setText(badge.name); 
      } 
      return convertView; 

     } 
    } 

    static class ViewHolder { 
     ImageView badgeImage; 
     TextView badgeName; 
    } 

回答

0

使用一個小的解決方法凌空工作只是我的GridView適配器罰款。 如果用戶已經解鎖徽章,我通過Volley NetworkImageView加載它。如果沒有,我會顯示一個佔位符圖像。

... 
Badge badge = (Badge) getItem(position); 
    if (badge != null) { 
     // check if user already unlocked this badge 
     if (badge.unlocked && Utils.isUrl(badge.imageUrl)) { 
      viewHolder.badgeImage.setImageUrl(badge.imageUrl, 
        ImageCacheManager.getInstance().getImageLoader()); 
     } else { 
      // explicity set placeholder image to avoid messy image recycling issue 
      viewHolder.badgeImage.setImageUrl(badge.placeholderUrl, 
        ImageCacheManager.getInstance().getImageLoader()); 
     } 

     viewHolder.badgeName.setText(badge.name); 
    } 
... 

我也在我的ListAdapters中使用Volley的NetworkImageView。它對我來說也很好。