Java 在Recyclerview中显示捕获图像和英勇图像

Java 在Recyclerview中显示捕获图像和英勇图像,java,android,android-recyclerview,android-camera,Java,Android,Android Recyclerview,Android Camera,我正在尝试在Recyclerview中显示摄像头捕获图像和胆囊图像。它工作正常,但当我拍摄第二张图像或从gallary中选择时,它会替换Recyclerview中的第一张图像。我想在Recyclerview中显示我从相机中选择或捕获的所有图像 活动代码: public void ShowDialog() { final Dialog dialog = new Dialog(AttachDisputeDocActivity.this, android.R.style.Theme_Trans

我正在尝试在
Recyclerview
中显示摄像头捕获图像和胆囊图像。它工作正常,但当我拍摄第二张图像或从gallary中选择时,它会替换
Recyclerview
中的第一张图像。我想在
Recyclerview
中显示我从相机中选择或捕获的所有图像

活动代码:

public void ShowDialog() {
    final Dialog dialog = new Dialog(AttachDisputeDocActivity.this, android.R.style.Theme_Translucent_NoTitleBar);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.rc_img_dialog_layt);
    WindowManager.LayoutParams layoutParams = dialog.getWindow().getAttributes();
    layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
    layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
    layoutParams.gravity = Gravity.BOTTOM;
    layoutParams.dimAmount = 0.5f;
    dialog.getWindow().setAttributes(layoutParams);
    dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

    RelativeLayout UploadImage = dialog.findViewById(R.id.rela_upload);
    RelativeLayout TakeCamera = dialog.findViewById(R.id.rela_camera);
    UploadImage.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            try {
                if (ActivityCompat.checkSelfPermission(AttachDisputeDocActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(AttachDisputeDocActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, DspConstant.REQUEST_GALLARY_IMAGE);
                } else {
                    gallaryintent();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            dialog.dismiss();
        }
    });


    dialog.show();
    TakeCamera.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            try {
                if (ActivityCompat.checkSelfPermission(AttachDisputeDocActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(AttachDisputeDocActivity.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, DspConstant.REQUEST_CAPTURE_IMAGE);
                } else {
                    openCameraIntent();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            dialog.dismiss();
        }
    });
}

private void openCameraIntent() {
    Intent pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    pictureIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    if (pictureIntent.resolveActivity(getPackageManager()) != null) {
        File photoFile = null;
        try {
            photoFile = createImageFile();
        } catch (IOException ex) {
        }
        if (photoFile != null) {
            Uri photoURI = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID+".fileprovider", photoFile);
            pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            startActivityForResult(pictureIntent, DspConstant.REQUEST_CAPTURE_IMAGE);
        }
    }
}

private void gallaryintent() {
    Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    galleryIntent .setType("image/*");
    startActivityForResult(galleryIntent, DspConstant.REQUEST_GALLARY_IMAGE);
}

private File createImageFile() throws IOException {
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
    String imageFileName = "IMG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );
    imagefilepath = image.getAbsolutePath();
    return image;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == DspConstant.REQUEST_GALLARY_IMAGE && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = {MediaStore.Images.Media.DATA};
        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
        cursor.moveToFirst();
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();
        loadRecyclerView(picturePath);
    } else if (requestCode == DspConstant.REQUEST_CAPTURE_IMAGE && requestCode == RESULT_OK && null != data) {
        loadRecyclerView(imagefilepath);
    }
}

private void loadRecyclerView(String image) {
    documentlist.add(image);
    attachDocAdapter = new AttachDocAdapter(this, documentlist);
    recyclerView.setAdapter(attachDocAdapter);
    attachDocAdapter.updateList(documentlist);
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case DspConstant.REQUEST_GALLARY_IMAGE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                gallaryintent();
            } else {
                Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
            }
            break;
        case DspConstant.REQUEST_CAPTURE_IMAGE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                openCameraIntent();
            } else {
                Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
            }
            break;
    }
}
适配器代码:

public class AttachDocAdapter extends RecyclerView.Adapter<AttachDocAdapter.MyViewHolder> {

private ArrayList<String> imageslist=new ArrayList<>();
private Activity activity;

public AttachDocAdapter(Activity activity,ArrayList<String> imageslist)
{
    this.activity=activity;
    this.imageslist=imageslist;
}

public class MyViewHolder extends RecyclerView.ViewHolder{

    ImageView img_document;
    CitiTextView txt_deleteimage;
    public MyViewHolder(View itemView) {
        super(itemView);
        img_document=itemView.findViewById(R.id.img_document);
        txt_deleteimage=itemView.findViewById(R.id.txt_delete);
    }
}
@Override
public AttachDocAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemview= LayoutInflater.from(parent.getContext()).inflate(R.layout.rc_img_attach_layout,parent,false);
    return new MyViewHolder(itemview);
}

@Override
public void onBindViewHolder(AttachDocAdapter.MyViewHolder holder, int position) {
    Glide.with(activity).load(imageslist.get(position)).into(holder.img_document);
    holder.txt_deleteimage.setOnClickListener(view -> removeItem(holder.getAdapterPosition()));
}

@Override
public int getItemCount() {
    if (imageslist==null)
    {
        return 0;
    }return imageslist.size();
}
public void updateList(ArrayList<String> imageslist) {
    this.imageslist = imageslist;
    notifyDataSetChanged();
}
public void removeItem(int position) {
    imageslist.remove(position);
    notifyItemRemoved(position);
}
   }
公共类AttachDocAdapter扩展了RecyclerView.Adapter{
私有ArrayList imageslist=新ArrayList();
私人活动;
public AttachDocAdapter(活动活动,ArrayList imageslist)
{
这个。活动=活动;
this.imageslist=imageslist;
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
ImageView img_文件;
CitiTextView txt_deleteimage;
公共MyViewHolder(查看项目视图){
超级(项目视图);
img_document=itemView.findviewbyd(R.id.img_document);
txt_deleteimage=itemView.findViewById(R.id.txt_delete);
}
}
@凌驾
public AttachDocAdapter.MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemview=LayoutInflater.from(parent.getContext()).flate(R.layout.rc\u img\u attach\u布局,parent,false);
返回新的MyViewHolder(itemview);
}
@凌驾
BindViewHolder上的公共无效(AttachDocAdapter.MyViewHolder,int位置){
使用(活动)滑动。加载(imageslist.get(position))。到(holder.img_文档);
holder.txt_deleteimage.setOnClickListener(查看->删除项(holder.getAdapterPosition());
}
@凌驾
public int getItemCount(){
if(imageslist==null)
{
返回0;
}返回imageslist.size();
}
公共无效更新列表(ArrayList imageslist){
this.imageslist=imageslist;
notifyDataSetChanged();
}
公共无效删除项(内部位置){
图像列表。移除(位置);
已移除(位置)的项目;
}
}

当我点击TakeCamera时,三星S5上什么也没有发生。

attachDocAdapter.updateList(documentlist)这是多余的,因为每次拾取新映像时都要创建新适配器。需要查看
onCreate
onStart
活动代码。