我是应用程序开发的初学者,我需要帮助或想法,我正在创建一个将通过 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();
}
}