【问题标题】:GridView Images not loaded correctlyGridView 图像未正确加载
【发布时间】:2015-09-02 00:47:15
【问题描述】:

我有一个带有 Image 和 TextViews 的 GridView。使用异步任务从 URL 加载图像。

这里是 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 或更少,图像就会正确加载。当加载更多图像时,会出现图像重复位置错误,少数图像无法加载的问题。但是要加载的图像数量是可以的。 不确定是什么导致了问题。

感谢您的帮助

【问题讨论】:

标签: android gridview


【解决方案1】:

如果你想从 url 加载图片,那么你需要使用picasso

Picasso 是一个强大的图像下载和缓存库,用于 安卓。

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

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

【讨论】:

  • 问题不在于从 URL 加载图像,它在 Gridview 上显示。加载图像工作正常。我会尝试使用它,因为它具有缓存功能。到底是什么导致了这个问题?
  • 以上单行代码是否足以启用缓存和加载图像,还是我需要添加更多内容?
  • @Ashok 请参考毕加索的文档
  • 我使用了上面的代码行,但是当再次加载滚动图像时(上面的代码再次被rid view调用),这是否意味着它再次从网络下载图像!?或图像从缓存加载。我担心的是更多的数据被下载/消耗!?
  • 我明白了,使用 Picasso.with(context).setIndicatorsEnabled(true);知道从哪里加载图像。感谢square.github.io/picasso
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 2016-09-25
  • 2021-03-18
  • 2018-02-25
  • 2021-07-01
  • 2013-05-28
相关资源
最近更新 更多