29
29
import java .util .List ;
30
30
import java .util .Map ;
31
31
32
- public class FirebaseIndexArray <T > extends CachingObservableSnapshotArray <T > implements ChangeEventListener {
32
+ public class FirebaseIndexArray <T > extends CachingObservableSnapshotArray <T >
33
+ implements ChangeEventListener {
33
34
private static final String TAG = "FirebaseIndexArray" ;
34
35
35
36
private DatabaseReference mDataRef ;
@@ -108,7 +109,7 @@ protected void onDestroy() {
108
109
public void onChildChanged (ChangeEventType type , DataSnapshot snapshot , int index , int oldIndex ) {
109
110
switch (type ) {
110
111
case ADDED :
111
- onKeyAdded (snapshot );
112
+ onKeyAdded (snapshot , index );
112
113
break ;
113
114
case MOVED :
114
115
onKeyMoved (snapshot , index , oldIndex );
@@ -176,16 +177,16 @@ private boolean isKeyAtIndex(String key, int index) {
176
177
return index >= 0 && index < size () && mDataSnapshots .get (index ).getKey ().equals (key );
177
178
}
178
179
179
- protected void onKeyAdded (DataSnapshot data ) {
180
+ private void onKeyAdded (DataSnapshot data , int newIndex ) {
180
181
String key = data .getKey ();
181
182
DatabaseReference ref = mDataRef .child (key );
182
183
183
184
mKeysWithPendingUpdate .add (key );
184
185
// Start listening
185
- mRefs .put (ref , ref .addValueEventListener (new DataRefListener ()));
186
+ mRefs .put (ref , ref .addValueEventListener (new DataRefListener (newIndex )));
186
187
}
187
188
188
- protected void onKeyMoved (DataSnapshot data , int index , int oldIndex ) {
189
+ private void onKeyMoved (DataSnapshot data , int index , int oldIndex ) {
189
190
String key = data .getKey ();
190
191
191
192
// We can't use `returnOrFindIndexForKey(...)` for `oldIndex` or it might find the updated
@@ -201,7 +202,7 @@ protected void onKeyMoved(DataSnapshot data, int index, int oldIndex) {
201
202
}
202
203
}
203
204
204
- protected void onKeyRemoved (DataSnapshot data , int index ) {
205
+ private void onKeyRemoved (DataSnapshot data , int index ) {
205
206
String key = data .getKey ();
206
207
ValueEventListener listener = mRefs .remove (mDataRef .getRef ().child (key ));
207
208
if (listener != null ) mDataRef .child (key ).removeEventListener (listener );
@@ -255,10 +256,14 @@ public String toString() {
255
256
/**
256
257
* A ValueEventListener attached to the joined child data.
257
258
*/
258
- protected class DataRefListener implements ValueEventListener {
259
+ private final class DataRefListener implements ValueEventListener {
259
260
/** Cached index to skip searching for the current index on each update */
260
261
private int currentIndex ;
261
262
263
+ public DataRefListener (int index ) {
264
+ currentIndex = index ;
265
+ }
266
+
262
267
@ Override
263
268
public void onDataChange (DataSnapshot snapshot ) {
264
269
String key = snapshot .getKey ();
0 commit comments