Что-то меня смущает. По какой-то причине в моем приложении для фотографий я заметил, что всякий раз, когда я редактирую детей / записи в моем 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
или была открыта недавно (поэтому я предполагаю, что она находится в кеш - хотя я и создал метод удаления кеша при выходе из предварительного просмотра фотографии ...).
Надеюсь, этот пост имеет смысл, я действительно хочу выяснить, почему он это делает.