在uri的Arraylist中以listview显示图像

时间:2018-08-08 08:03:48

标签: android listview

我正在从图库中选择多张图像,这使我在arraylist<Uri>.中添加了多张uri图片 在我要在列表视图中查看uri中的所有arraylist个图像之后,我创建了一个自定义适配器类,该类将获取所有uri并转换每个{{ 1}}到位图,它将在uri中设置,这将列出图像,但它会提供空异常。

这是适配器类, 该课程存在于活动中

imageview

并单击UI中存在的特定徽标,我已在此处设置了适配器。

class CustomAdapter extends BaseAdapter{
@Override
public int getCount() {
    return ImageCount;
}

@Override
public Object getItem(int i) {
    return null;
}

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

@Override
public View getView(int i, View view, ViewGroup viewGroup) {


    view = getLayoutInflater().inflate(R.layout.imagelist_layout,null);
    ImageView imageview = (ImageView)findViewById(R.id.imageView);
    try {

// getting null exception
       Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),mArrayUri.get(i));
        imageview.setImageBitmap(bitmap);
    } catch (IOException e) {
        e.printStackTrace();
    }



    return view;
}

1 个答案:

答案 0 :(得分:0)

此行出错。

ImageView imageview = (ImageView)findViewById(R.id.imageView);

将其更改为

ImageView imageview = (ImageView) view.findViewById(R.id.imageView);

我强烈建议仅使用 ViewHolder Pattern 。修改您的课程。

class CustomAdapter extends BaseAdapter {
    @Override
    public int getCount() {
        return ImageCount;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder;
        if (view == null) {
            holder = new ViewHolder();
            view = getLayoutInflater().inflate(R.layout.imagelist_layout, null);
            holder.imageview = (ImageView) view.findViewById(R.id.imageView);
            view.setTag(holder);
        }
        else {
            holder = (ViewHolder) view.getTag();
        }
        try {

            // getting null exception
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),mArrayUri.get(i));
            holder.imageview.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }



        return view;
    }

    class ViewHolder {
        private ImageView imageview;
    }

}