首页 > 解决方案 > 从 uri 的 Arraylist 在列表视图中显示图像

问题描述

我正在从图库中选择多个图像,这为我提供了我添加的多个图像 uriarraylist<Uri>. 在获取所有uri图像后,arraylist我想在列表视图中查看它,我创建了一个自定义适配器类,它将获取所有uri和 on将每个转换uri为将设置的位图imageview,这将列出图像,但它给出空异常。

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

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;
}

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

 viewimage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            CustomAdapter customadapter = new CustomAdapter();
            images_listview.setAdapter(customadapter);
        }
    });

标签: androidlistview

解决方案


此行出错。

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

将其更改为,

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

我强烈建议仅使用ViewHolder 模式。修改你的类。

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;
    }

}

推荐阅读