如何在另一个回收站视图中使用相机和回收站视图?

时间:2021-04-13 19:55:04

标签: java android android-studio android-intent android-recyclerview

我是应用程序开发的初学者,我需要帮助或想法,我正在创建一个将通过 ftp 发送的照片应用程序,但我的问题是在 cardview 中查看文件。让我解释。 我有几个卡片视图,它们将根据用户通过 Recyclerview 选择的选项动态添加,在这些卡片中,我们有一个图像视图,他将调用相机并通知要保存在 onActivityResult 中的文件的名称,以及下面我们有 recyclerview,其中每张卡片的图像应与拍摄的照片相对应。 我的问题是如何将此图像添加到相应的回收站视图中。 有可能这样做吗? 在我的代码下面,对不起,我会在完成后进行重构。

public class PhotoFragment extends AbstractFragment {


private TextView bar;
private DescriptionsPhoto descriptionsPhoto;
private MainAdapter mainAdapter;
private GalleryAdapter galleryAdapter;
private RecyclerView recyclerViewMain, recyclerViewPhoto;
private MaterialButton send;
static final int REQUEST_IMAGE_CAPTURE = 1;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = super.onCreateView(inflater, container, savedInstanceState);

    bar = view.findViewById(R.id.text_view_photo);
    recyclerViewMain = view.findViewById(R.id.recycler_view_main);

    send = view.findViewById(R.id.button_send);
    descriptionsPhoto = new DescriptionsPhoto();

    mainAdapter = new MainAdapter();
    recyclerViewMain.setAdapter(mainAdapter);
    recyclerViewMain.setLayoutManager(new LinearLayoutManager(getContext()));

    galleryAdapter = new GalleryAdapter();
    recyclerViewPhoto = view.findViewById(R.id.recycler_view_gallery);
    recyclerViewPhoto.setAdapter(galleryAdapter);
    recyclerViewPhoto.setLayoutManager(new LinearLayoutManager(getContext(),RecyclerView.HORIZONTAL, false ));


    if (getArguments() != null) {
        descriptionsPhoto.setEquip(getArguments().getString("equip"));
        descriptionsPhoto.setOs(getArguments().getString("os"));
        descriptionsPhoto.setUser(getArguments().getString("user"));
    }

    bar.setText(descriptionsPhoto.toString());

    send.setOnClickListener(v -> {
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        SendImageFragment sendImageFragment = new SendImageFragment();
        fragmentTransaction.addToBackStack("send");
        fragmentTransaction.replace(R.id.main_frame_layout, sendImageFragment);
        fragmentTransaction.commit();

    });

    return view;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    List<String> list = new ArrayList<String>();
    String[] listString;
    int[] selectedItems;

    galleryAdapter.setListImageCamera(searchFile());
    galleryAdapter.notifyDataSetChanged();

    switch (descriptionsPhoto.getEquip()) {
        case "Motores":
            listString = getResources().getStringArray(R.array.equipment_motor);
            Collections.addAll(list, listString);
            descriptionsPhoto.setInitials("MO");
            mainAdapter.setStringList(list);
            mainAdapter.notifyDataSetChanged();
            break;
        case "Bombas":
            listString = getResources().getStringArray(R.array.equipment_bomb);
            Collections.addAll(list, listString);
            descriptionsPhoto.setInitials("BO");
            mainAdapter.setStringList(list);
            mainAdapter.notifyDataSetChanged();
            break;
        case "Motor Média":
            listString = getResources().getStringArray(R.array.equipment_motor_media);
            Collections.addAll(list, listString);
            descriptionsPhoto.setInitials("MM");
            mainAdapter.setStringList(list);
            mainAdapter.notifyDataSetChanged();
            break;
        case "Gerador":
            listString = getResources().getStringArray(R.array.equipment_generator);
            Collections.addAll(list, listString);
            descriptionsPhoto.setInitials("GE");
            mainAdapter.setStringList(list);
            mainAdapter.notifyDataSetChanged();
            break;
        case "Drives":
            listString = getResources().getStringArray(R.array.equipment_drivers);
            Collections.addAll(list, listString);
            descriptionsPhoto.setInitials("DR");
            mainAdapter.setStringList(list);
            mainAdapter.notifyDataSetChanged();
            break;
        case "Transformadores":
            listString = getResources().getStringArray(R.array.equipment_transformers);
            Collections.addAll(list, listString);
            descriptionsPhoto.setInitials("TF");
            mainAdapter.setStringList(list);
            mainAdapter.notifyDataSetChanged();
            break;
        case "Redutores":
            listString = getResources().getStringArray(R.array.equipment_reducer);
            Collections.addAll(list, listString);
            descriptionsPhoto.setInitials("RE");
            mainAdapter.setStringList(list);
            mainAdapter.notifyDataSetChanged();
            break;
        default:
            Toast.makeText(getContext(), "Error ao escolher Categoria", Toast.LENGTH_SHORT).show();
            break;
    }


}

@Override
protected int getLayout() {
    return R.layout.fragment_photo;
}

private File createImageFile(String namePhoto) throws IOException {

    File storageDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image =  new File(storageDir, namePhoto);

    return image;
}

private Uri dispatchTakePictureIntent(String nameFile) {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {

        File photoFile = null;
        try {
            photoFile = createImageFile(nameFile);
        } catch (IOException ex) {
            Log.e("CAMERA", ex.getMessage(), ex);
        }

        if (photoFile != null) {
            Uri photoURI = FileProvider.getUriForFile(getContext(),
                    "br.com.jcamelo.appfotos.fileprovider",
                    photoFile);
            Log.d("Teste", photoURI.toString());
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);

            return photoURI;
        }
    }
    return null;
}

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        galleryAdapter.setListImageCamera(searchFile());
        galleryAdapter.notifyDataSetChanged();
    }
}

private class ViewHolderMain extends RecyclerView.ViewHolder {

    private TextView descPhoto;
    private ImageView camera;
    private MaterialCardView cardView;
    private RecyclerView recyclerView;

    public ViewHolderMain(@NonNull View itemView) {
        super(itemView);
        descPhoto = itemView.findViewById(R.id.text_view_item_desc_photo);
        camera = itemView.findViewById(R.id.image_view_camera);
        cardView = itemView.findViewById(R.id.card_view_photo);
        recyclerView = itemView.findViewById(R.id.recycler_view_photo);
        camera.setVisibility(View.GONE);
    }

}

private class MainAdapter extends RecyclerView.Adapter<ViewHolderMain> {

    private List<String> stringList = new ArrayList<>();

    public void setStringList(List<String> stringList) {
        this.stringList = stringList;
    }

    @NonNull
    @Override
    public ViewHolderMain onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ViewHolderMain(getLayoutInflater().inflate(R.layout.item_photo, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolderMain holder, int position) {
        String category = stringList.get(position);
        holder.recyclerView.setAdapter(new ItemAdapter());
        holder.recyclerView.setLayoutManager(new LinearLayoutManager(getContext(),RecyclerView.HORIZONTAL, false ));

        holder.descPhoto.setText(category);
        holder.cardView.setOnClickListener(v -> {
            if (holder.camera.getVisibility() != View.VISIBLE) {
                holder.camera.setVisibility(View.VISIBLE);
            } else {
                holder.camera.setVisibility(View.GONE);
            }
        });

        holder.camera.setOnClickListener(v -> {
            String date = new SimpleDateFormat("ddMMyyyyHHmmss").format(new Date());
            String nameFile = descriptionsPhoto.getOs() +"_" + descriptionsPhoto.getInitials() +
            "_"  + descriptionsPhoto.getUser() + "_" + String.valueOf(position + 1) + "_";
            String nameFileComplete = nameFile + date + ".jpg";
            Uri uri = dispatchTakePictureIntent(nameFileComplete);
        });

    }


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


}

private class ViewHolderItem extends RecyclerView.ViewHolder{

    private ImageView imageView;

    public ViewHolderItem(@NonNull View itemView) {
        super(itemView);

        imageView = itemView.findViewById(R.id.image_view_photo);
    }

    public void bind(Uri uri){
        Picasso.get().load(uri).resize(100, 100)
                .centerCrop().into(imageView);

    }
}


private class ItemAdapter extends RecyclerView.Adapter<ViewHolderItem>{

    private List<Uri> fileList = new ArrayList<>();


    public void setFileList(List<Uri> fileList) {
        this.fileList = fileList;
    }

    @NonNull
    @Override
    public ViewHolderItem onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ViewHolderItem(getLayoutInflater().inflate(R.layout.item_photo_camera, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolderItem holder, int position) {
        holder.bind(fileList.get(position));

    }

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

}


private class ViewHolderGallery extends RecyclerView.ViewHolder{

    private ImageView imageView;
    private TextView textView;

    public ViewHolderGallery(@NonNull View itemView) {
        super(itemView);

        imageView = itemView.findViewById(R.id.image_view_photo);

    }

    private void bind(File file){
        Picasso.get().load(file).resize(100, 100)
                .centerCrop().into(imageView);

        imageView.setOnClickListener(v -> {
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
            alertDialog.setTitle("Excluir Imagem");
            alertDialog.setMessage("Deletar o arquivo: " + file.getName() + " ?");
            alertDialog.setNeutralButton("Cancelar",((dialog, which) -> {
                dialog.cancel();
            }));
            alertDialog.setPositiveButton("DELETAR",((dialog, which) -> {
                deleteFile(file);
                dialog.cancel();
            }));

            alertDialog.create().show();

        });
    }

}

private class GalleryAdapter extends RecyclerView.Adapter<ViewHolderGallery>{

   private List<File> listImageCamera = new ArrayList<>();

    public void setListImageCamera(List<File> listImageCamera) {
        this.listImageCamera = listImageCamera;
    }

    @NonNull
    @Override
    public ViewHolderGallery onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ViewHolderGallery(getLayoutInflater().inflate(R.layout.item_photo_camera, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolderGallery holder, int position) {
        holder.bind(listImageCamera.get(position));
    }

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

private List<File> searchFile(){
    List<File> list = new ArrayList<>();
    String path = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES).toString();
    File directory = new File(path);
    File[] files = directory.listFiles();
    Log.d("Files", "Size: "+ files.length);
    for (int i = 0; i < files.length; i++) {
        Log.d("Files", "FileName:" + path + "/" +files[i].getName());
        list.add(files[i]);
    }

    return list;
}

private void deleteFile(File file){
    file.delete();
    galleryAdapter.setListImageCamera(searchFile());
    galleryAdapter.notifyDataSetChanged();
}

}

0 个答案:

没有答案