Фотография удалена, но появляется снова при съемке новой фотографии - PullRequest
1 голос
/ 23 сентября 2019

Приложение, которое я создаю, должно делать фотографии, чтобы отправить их на сервер.

Мне нужно сделать как минимум 6 фотографий.У меня есть просмотрщик, в котором я показываю предварительный просмотр моей фотографии.Он работает отлично (я использую Picasso в качестве библиотеки фотографий).

Мне нужно иметь возможность удалять фотографии перед их отправкой (и, следовательно, их предварительный просмотр).Щелкнув по предварительному просмотру, я удаляю его из вкладки с фотографиями и обновляю свой просмотр с помощью notifyDataSetChanged ().Фотография исчезает.

Когда я делаю другую фотографию, у меня есть ее предварительный просмотр, но возвращается предварительный просмотр из удаленного изображения.Если я удаляю три изображения и беру новое, у меня есть предварительный просмотр нового и 3 удаленных изображения.

Вот часть моего адаптера, где я связываю свой вид

@Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        mImageView = holder.mPhotoIV;
        File mFile = new File(String.valueOf(Uri.parse(mListOfPhotos.get(position))));

        int width = mImageView.getLayoutParams().width;
        int height = mImageView.getLayoutParams().height;

        Picasso.get()
                .load(mFile)
                .resize(200, 200)
                .error(R.drawable.ic_no_photo_foreground)
                .into(mImageView, new com.squareup.picasso.Callback() {
                    @Override
                    public void onSuccess() {

                    }

                    @Override
                    public void onError(Exception e) {

                    }
                });
    }

Здесь часть моей деятельности, в которой я вызываю свой адаптер

        mTakePhotoFAB.setOnClickListener(view -> {
            mDir = new File(getExternalCacheDir(), "PhotosAuthentifier");
            boolean success = true;

            if (!mDir.exists()) {
                success = mDir.mkdir();
            }

            if (success) {
                File mFile = new File(mDir, new SimpleDateFormat("yyyyMMdd-HHmmss", Locale.getDefault()).format(new Date()) + ".jpg");

                mImageCapture.takePicture(mFile,
                        new ImageCapture.OnImageSavedListener() {
                            @Override
                            public void onImageSaved(@NonNull File file) {
                                mListOfPhotos.add(file.getAbsolutePath());
                                mNumberOfPhotoTV.setText(getResources().getString(R.string.minPhotos, mListOfPhotos.size()));

                                if (mListOfPhotos.size() >= 6) {
                                    mSendPhotoFAB.setVisibility(View.VISIBLE);
                                }

                                mAdapter = new CameraPhotoAdapter(mListOfPhotos, getBaseContext());
                                mRecyclerView.setAdapter(mAdapter);
                            }


                            @Override
                            public void onError(@NonNull ImageCapture.ImageCaptureError imageCaptureError, @NonNull String message, @Nullable Throwable cause) {
                                String mMessage = "Photo capture failed: " + message;
                                Toast.makeText(CameraActivity.this, mMessage, Toast.LENGTH_SHORT).show();

                                assert cause != null;
                                cause.printStackTrace();
                            }
                        });
            }

        });

Функция (в моем адаптере) для удаления изображения

        protected void removePhoto(Context context, ArrayList<String> array, int position) {

            File mDir = new File(context.getExternalCacheDir(), "PhotosAuthentifier");
            File mFile = new File(array.get(position));

            if (mDir.exists()) {
                File[] mFilesIntoDir = mDir.listFiles();

                if (mFilesIntoDir == null) {
                    return;
                } else {
                    for (int i = 0; i < mFilesIntoDir.length; i++) {
                        if (mFilesIntoDir[i].getAbsolutePath().equals(mFile.getAbsolutePath())) {
                            boolean mSuccess = mFilesIntoDir[i].delete();

                            if (mSuccess) {
                                Picasso.get().invalidate(mFile.getAbsolutePath());
                                mListOfPhotos.remove(mFile.getAbsolutePath());
                                notifyDataSetChanged();
                            }

                        }
                    }
                }
            }
        }

Я пытался сделать недействительным кеш Пикассо, но когдаЯ делаю новый снимок, вместо того, чтобы снова появиться удаленный снимок. У меня такое поведение по умолчанию, когда у меня нет хорошего URL для загрузки (черный крест)

Может кто-нибудь помочь, пожалуйста:)?

...