android - 从相机捕获的图像中获取 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);
}
}
解决方案
添加 recyclerview.setAdapter(adapter); 到你的 onActivityResult
推荐阅读
- python-2.7 - 使用python将一系列ppm图像转换为视频
- flutter - 当键盘弹出时,将包含小部件的 TextField 移动到可查看区域,而不管底部的另一个小部件
- google-compute-engine - gcloud compute config-ssh 不产生主机条目
- django - NOT NULL 约束失败:users_details.user_id
- relational-database - 一个属性究竟应该被认为是派生的?
- sql-server - 生产 IIS 环境中的 .NET Core SQL 连接问题
- c# - 带有可选 ID 的路由控制器不在参数中
- node.js - 找不到模块'/src/bin/www' - Docker 和平均堆栈
- python - 使用 Google Cloud Function 在 Google Cloud 上禁用计费(Keyerror: 'data')
- c - 串行方法有什么作用?[阿杜诺]