我正在制作的应用需要拍照才能将其发送到服务器。
我至少需要拍摄6张照片。我有一个recyclerView,其中显示了我的照片预览。运行正常(我将Picasso用作照片库)。
我需要能够删除照片,然后再将它们发送出去(并因此将其预览)。单击预览,将其从“照片”选项卡中删除,并使用notifyDataSetChanged()更新recyclerview。 照片消失了。
当我拍摄另一张照片时,我有它的预览,但是从删除的照片开始的预览又回来了。 如果我删除三张照片并拍摄一张新照片,那么我将拥有新照片的预览和三张已删除照片的预览。
这是我的适配器中绑定我的视图的一部分
@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();
}
}
}
}
}
}
我试图使Picasso缓存无效,但是当我拍摄一张新照片时,当我没有一个很好的上载网址(黑叉)时,我会显示默认行为,而不是重新显示已删除的照片
有人可以帮忙吗:)?