网格/列表视图的概念如何将图像发送到imageitem类

时间:2015-09-27 19:09:47

标签: android gridview picasso

在我的项目中,我想加载url图像并在gridview活动中显示它们。但是如何将这些图像加载到gridview适配器?

所以我试图理解e.ListItem.Text = row.Item("SURNAME") & " " & row.Item("PRENAME") 适配器的概念,据我所知。在一个基本的例子中,它包含3个活动:

1主要活动

使用它包含grid/list view布局的定义,方法gridview的定义(第三个活动),在网格视图中设置适配器。和要在GridViewAdapter方法中发送的数据或数组图像(第二个活动)。

GridViewAdapter

好吧我的问题是在gridview适配器中发送图像的方法是什么?

在这个example中他们用这种方式,但我不需要TypedArray用于我的项目,实际上是在什么时候我需要使用它?

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        gridView = (GridView) findViewById(R.id.gridView);
        gridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout, getData());
        gridView.setAdapter(gridAdapter);
    }

在另一个example中他们使用了资源

  private ArrayList<ImageItem> getData() {
        final ArrayList<ImageItem> imageItems = new ArrayList<>();
        TypedArray imgs = getResources().obtainTypedArray(R.array.image_ids);
        for (int i = 0; i < imgs.length(); i++) {
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), imgs.getResourceId(i, -1));
            imageItems.add(new ImageItem(bitmap, "Image#" + i));
        }
        return imageItems;
    }

在另一个example他们使用了静态图片

好的我知道他们从drawable那里得到了图像,但是我应该怎么做才能在我的活动中显示它们

- 我继续我的解释,因为我做错了

2-Imageitem 它是另一个存储图像的活动,无需进入。

3- GridViewAdapter

好的,我们在这里创建了类的构造函数,我们创建了getview方法,在进入之前,我应该添加mItems = new ArrayList<GridViewItem>(); Resources resources = getResources(); mItems.add(new GridViewItem(resources.getDrawable(R.drawable.aim), getString(R.string.aim))); : mItems.add(new GridViewItem(resources.getDrawable(R.drawable.youtube), getString(R.string.youtube))); 方法还是getcount() convertview用于获取旧视图,持有者用于保存图像。 现在getitem()的课程是空的,因为我没有在主要活动中定义它。那怎么办呢?

ImageItem

EDT

public class GridViewAdapter extends ArrayAdapter {
    private Context context;
    private int layoutResourceId;
    private ArrayList data = new ArrayList();

    public GridViewAdapter(Context context, int layoutResourceId, ArrayList data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ViewHolder holder = null;

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new ViewHolder();
            holder.imageTitle = (TextView) row.findViewById(R.id.text);
            holder.image = (ImageView) row.findViewById(R.id.image);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        ImageItem item = data.get(position);
        holder.imageTitle.setText(item.getTitle());
        holder.image.setImageBitmap(item.getImage());


    Picasso.
    with(mContext).
    load(ImageItem .Getimage())
    .placeholder(R.drawable.ic_launcher) 
     .fit() 
    .into(holder.imageView);

        return row;
    }

    static class ViewHolder {
        TextView imageTitle;
        ImageView image;
    }
}

1 个答案:

答案 0 :(得分:1)

你不应该在适配器中使用位图,因为当它在listview或gridview中时会消耗大量的内存,listview无法立即回收。因此,尝试使用picasso从url加载位图或图像。