某事使我感到困惑。由于某种原因,在我的照片应用程序中,我注意到,每当在Firebase Realtime Database
中编辑孩子/条目时(在该位置检索照片的位置名称),都会在我的应用程序中使用照片预览Activity
自动打开我编辑过其条目的照片...
也许我真的很傻,但是我看不出我的代码如何允许这种情况发生。我将在下面发布我认为相关的代码。
在我的ImageAdapter类中,onBindViewHolder
是处理用户单击图像的代码:
final StorageReference mStorageRef = FirebaseStorage.getInstance().getReference();
final StorageReference fullSizeImagesStoragePath = mStorageRef.child("images/" + getGridItem(position) + ".jpg");
final Task getFullImageStorageUrl = fullSizeImagesStoragePath.getDownloadUrl();
imageViewHolder.gridImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFullImageStorageUrl.addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(final @NonNull Task<Uri> task) {
Glide
.with(getActivity)
.asBitmap()
.load(thumbSizeImagesStoragePath)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
Palette.from(resource).maximumColorCount(20).generate
(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(@NonNull Palette palette) {
final Palette.Swatch dominantSwatch = palette.getDominantSwatch();
if (dominantSwatch != null) {
// This method finds and assigns the FireBase Database references, zeroes it down to the "Locations" item
// for the specific gridItem that was selected, and returns all the necessary color palette, url, and
// Location name info to the Photo-viewing activity.
mDatabaseImagesRef = FirebaseDatabase.getInstance().getReference().child("images_list");
DatabaseReference data = mDatabaseImagesRef.child(getGridItem(position).toString()).child("l");
data.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Object locationKey = dataSnapshot.getValue();
String locationNameString = (String) locationKey;
int dominantSwatchRgb = dominantSwatch.getRgb();
Uri uri = task.getResult();
String url = uri.toString();
int objectToInt = (Integer) getGridItem(position);
Intent intent = new Intent(getActivity, PhotoDetailsActivity.class);
intent.putExtra("Image int", objectToInt);
intent.putExtra("imageURL", url);
intent.putExtra("paletteColor", dominantSwatchRgb);
intent.putExtra("photoLocationName", locationNameString);
getActivity.startActivity(intent);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
});
}
});
}
});
}
});
对不起,我知道可能有很多代码需要阅读...我不确定要包含多少内容,所以我想我将所有方法都粘贴进去了。
我不明白的是,以上所有代码都包含在onClickListener
中,因此在更新Realtime Database
时如何自动调用或运行它?不应该只在用户实际单击照片列表中的图像时运行它吗?
还不明白的是,仅当正在编辑的Realtime Database
数据是我的RecyclerView
中当前在屏幕上或最近打开过的照片时,这种情况才会发生(所以我假设它在缓存中-即使我创建了一种方法,可以在退出照片预览时删除缓存...)。
我希望这篇文章有意义,我真的很想弄清楚为什么要这么做。