2015-08-31 53 views
1

我有一个GridView与图像和TextViews。使用异步任务从URL加载图像。GridView图像加载不正确

这里是GridView的代码:

public class GridviewAdapter extends BaseAdapter { 
    private ArrayList<String> listImgUrl; 
    private ArrayList<String> listCost; 
    private ArrayList<String> listItem; 
    private ArrayList<String> listStore; 

    private Activity activity; 
// private Context context; 

    public GridviewAdapter(Context context) { 
     super(); 
    // this.context = context; 


    } 

    public void GridviewAdapterInit(Activity activity, ArrayList<String> listImgUrl, 
      ArrayList<String> listCost, ArrayList<String> listItem, 
      ArrayList<String> listStore) { 
     this.activity = activity; 

     this.listImgUrl = listImgUrl; 
     this.listCost = listCost; 
     this.listItem = listItem; 
     this.listStore = listStore; 

    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return listImgUrl.size(); 
    } 

    @Override 
    public String getItem(int position) { 
     // TODO Auto-generated method stub 
     return listImgUrl.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    public static class ViewHolder { 
     public ImageView imgViewFlag; 
     public TextView tvCost; 
     public TextView tvItem; 
     public TextView tvStore; 
    } 

    @SuppressLint("InflateParams") 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ViewHolder view; 
     LayoutInflater inflator = activity.getLayoutInflater(); 

     if (convertView == null) { 
      view = new ViewHolder(); 
      convertView = inflator.inflate(R.layout.gridview_row, null); 

      view.imgViewFlag = (ImageView) convertView 
        .findViewById(R.id.imageView1); 
      view.tvCost = (TextView) convertView.findViewById(R.id.tvCost); 
      view.tvItem = (TextView) convertView.findViewById(R.id.tvItem); 
      view.tvStore = (TextView) convertView.findViewById(R.id.tvStore); 



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


      LoadImageFromURL(listImgUrl.get(position), view.imgViewFlag); 
      view.tvCost.setText(listCost.get(position)); 
      view.tvItem.setText(listItem.get(position)); 
      view.tvStore.setText(listStore.get(position)); 

     return convertView; 
    } 

    private void LoadImageFromURL(String url, ImageView imgView) 

    { 
     new ImageViewUpdator(imgView).execute(url); 

    } 

} 

利用上述代码中,图像被正确地装载,如果图像是6或更少。加载更多图像时,会出现问题,例如图像重复位置错误,很少图像未加载。但是要加载的图片数量没问题。 不知道是什么导致了这个问题。

感谢您的帮助

+0

这可能会帮助你http://stackoverflow.com/questions/21029223/loading-images-in-a-gridview-with -async-task-not-loading-correctly –

回答

1

如果要加载从URL图像,那么你需要使用picasso

毕加索是 Android的强大的图像下载和缓存库。

的代码只需一行解决您的图像加载问题:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 
+0

问题不在于加载图像从URL中显示在GridView上。加载图像正常工作。我会尝试使用它,因为它具有缓存功能。无论如何是什么导致这个问题? – Ashok

+0

是上面的单行代码是足以启用缓存和加载图像还是我需要添加更多? – Ashok

+0

@Ashok请参考毕加索 – SANAT