首页 > 解决方案 > 从相机捕获的图像中获取 URI

问题描述

我是编程新手,我正在尝试用相机捕获的图像填充 RecyclerView。每当我捕获一张新图片时,我都希望将其添加到 RecyclerView 并更新 RecyclerView。

RecyclerView 适用于 TextViews(例如),但它不显示 Imageviews。我认为当我尝试获取捕获的图像的 URI 时会出现问题。

我还没有找到太多关于这个主题的解决方案,所以我问你们。

这是模型类。

public class Attachment {
private Uri image;
private String text;

public Attachment(Uri image, String text) {
    this.image = image;
    this.text = text;
}

public Uri getImage() {
    return image;
}

public String getText(){
    return text;
}

这是适配器。

public class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.ViewHolder> {

private Context context;
private List<Attachment> lista;
private LayoutInflater layoutInflater;


public ListViewAdapter(List<Attachment> lista, Context context) {
    this.lista = lista;
    this.context = context;
    layoutInflater=LayoutInflater.from(context);
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view=layoutInflater.inflate(R.layout.listview_layout, parent, false);
    ViewHolder viewHolder=new ViewHolder(view);

    return viewHolder;
}

@Override
public void onBindViewHolder(ListViewAdapter.ViewHolder holder, int position) {
    holder.imageView.setImageURI(lista.get(position).getImage());
    holder.textView.setText(lista.get(position).getText());
}

@Override
public int getItemCount() {
    return lista.size();
}

public static class ViewHolder extends RecyclerView.ViewHolder{

    public ImageView imageView;
    public TextView textView;

    public ViewHolder(View itemView) {
        super(itemView);

        imageView=itemView.findViewById(R.id.listviewAttachmentImageView);
        textView=itemView.findViewById(R.id.textView);
    }
}

public void update(List<Attachment> newList) {
    lista.clear();
    lista.addAll(newList);
    notifyDataSetChanged(); }

在这里,我传递了意图。

buttonAddAttachment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (intent.resolveActivity(getPackageManager())!=null){
                startActivityForResult(intent,CAM_REQUEST);
            }
        }
    });

这里我初始化RecyclerView。

    list=new ArrayList<>();

    recyclerView=(RecyclerView)findViewById(R.id.recyclerview);
    recyclerView.setHasFixedSize(true);

    adapter=new ListViewAdapter(list, this);
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    adapter.update(list);

这是 onActivityResult 方法(点击相机按钮的结果)。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == CAM_REQUEST && resultCode == RESULT_OK) {

        Uri uri = data.getData();
        Attachment att = new Attachment (uri, "BUNA");
        list.add(att);
    }

}

标签: androidandroid-recyclerview

解决方案


添加 recyclerview.setAdapter(adapter); 到你的 onActivityResult


推荐阅读