diff --git a/database/src/main/java/com/firebase/ui/database/ObservableSnapshotArray.java b/database/src/main/java/com/firebase/ui/database/ObservableSnapshotArray.java index 2918103d6..a5449f9d7 100644 --- a/database/src/main/java/com/firebase/ui/database/ObservableSnapshotArray.java +++ b/database/src/main/java/com/firebase/ui/database/ObservableSnapshotArray.java @@ -23,6 +23,8 @@ public abstract class ObservableSnapshotArray extends ImmutableList mListeners = new CopyOnWriteArrayList<>(); protected final SnapshotParser mParser; + private boolean mHasDataChanged = false; + /** * Create an ObservableSnapshotArray where snapshots are parsed as objects of a particular * class. @@ -56,6 +58,9 @@ public ChangeEventListener addChangeEventListener(@NonNull ChangeEventListener l for (int i = 0; i < size(); i++) { listener.onChildChanged(ChangeEventListener.EventType.ADDED, get(i), i, -1); } + if (mHasDataChanged) { + listener.onDataChanged(); + } return listener; } @@ -66,6 +71,11 @@ public ChangeEventListener addChangeEventListener(@NonNull ChangeEventListener l @CallSuper public void removeChangeEventListener(@NonNull ChangeEventListener listener) { mListeners.remove(listener); + + // Reset mHasDataChanged if there are no more listeners + if (!isListening()) { + mHasDataChanged = false; + } } /** @@ -98,6 +108,7 @@ protected final void notifyChangeEventListeners(ChangeEventListener.EventType ty } protected final void notifyListenersOnDataChanged() { + mHasDataChanged = true; for (ChangeEventListener listener : mListeners) { listener.onDataChanged(); }