2828import java .util .List ;
2929import java .util .Map ;
3030
31- public class FirebaseIndexArray <T > extends CachingObservableSnapshotArray <T > implements ChangeEventListener {
31+ public class FirebaseIndexArray <T > extends CachingObservableSnapshotArray <T >
32+ implements ChangeEventListener {
3233 private static final String TAG = "FirebaseIndexArray" ;
3334
3435 private DatabaseReference mDataRef ;
@@ -107,7 +108,7 @@ protected void onDestroy() {
107108 public void onChildChanged (EventType type , DataSnapshot snapshot , int index , int oldIndex ) {
108109 switch (type ) {
109110 case ADDED :
110- onKeyAdded (snapshot );
111+ onKeyAdded (snapshot , index );
111112 break ;
112113 case MOVED :
113114 onKeyMoved (snapshot , index , oldIndex );
@@ -175,16 +176,16 @@ private boolean isKeyAtIndex(String key, int index) {
175176 return index >= 0 && index < size () && mDataSnapshots .get (index ).getKey ().equals (key );
176177 }
177178
178- protected void onKeyAdded (DataSnapshot data ) {
179+ private void onKeyAdded (DataSnapshot data , int newIndex ) {
179180 String key = data .getKey ();
180181 DatabaseReference ref = mDataRef .child (key );
181182
182183 mKeysWithPendingUpdate .add (key );
183184 // Start listening
184- mRefs .put (ref , ref .addValueEventListener (new DataRefListener ()));
185+ mRefs .put (ref , ref .addValueEventListener (new DataRefListener (newIndex )));
185186 }
186187
187- protected void onKeyMoved (DataSnapshot data , int index , int oldIndex ) {
188+ private void onKeyMoved (DataSnapshot data , int index , int oldIndex ) {
188189 String key = data .getKey ();
189190
190191 // We can't use `returnOrFindIndexForKey(...)` for `oldIndex` or it might find the updated
@@ -199,7 +200,7 @@ protected void onKeyMoved(DataSnapshot data, int index, int oldIndex) {
199200 }
200201 }
201202
202- protected void onKeyRemoved (DataSnapshot data , int index ) {
203+ private void onKeyRemoved (DataSnapshot data , int index ) {
203204 String key = data .getKey ();
204205 ValueEventListener listener = mRefs .remove (mDataRef .getRef ().child (key ));
205206 if (listener != null ) mDataRef .child (key ).removeEventListener (listener );
@@ -243,10 +244,14 @@ public String toString() {
243244 /**
244245 * A ValueEventListener attached to the joined child data.
245246 */
246- protected class DataRefListener implements ValueEventListener {
247+ private final class DataRefListener implements ValueEventListener {
247248 /** Cached index to skip searching for the current index on each update */
248249 private int currentIndex ;
249250
251+ public DataRefListener (int index ) {
252+ currentIndex = index ;
253+ }
254+
250255 @ Override
251256 public void onDataChange (DataSnapshot snapshot ) {
252257 String key = snapshot .getKey ();
0 commit comments