@@ -31,11 +31,12 @@ public abstract class FirebaseRecyclerPagingAdapter<T, VH extends RecyclerView.V
31
31
32
32
private final String TAG = "FirebasePagingAdapter" ;
33
33
34
- private final SnapshotParser <T > mParser ;
35
- private final LiveData <PagedList <DataSnapshot >> mPagedList ;
36
- private final LiveData <LoadingState > mLoadingState ;
37
- private final LiveData <DatabaseError > mDatabaseError ;
38
- private final LiveData <FirebaseDataSource > mDataSource ;
34
+ private DatabasePagingOptions <T > mOptions ;
35
+ private SnapshotParser <T > mParser ;
36
+ private LiveData <PagedList <DataSnapshot >> mPagedList ;
37
+ private LiveData <LoadingState > mLoadingState ;
38
+ private LiveData <DatabaseError > mDatabaseError ;
39
+ private LiveData <FirebaseDataSource > mDataSource ;
39
40
40
41
41
42
/*
@@ -86,7 +87,16 @@ public void onChanged(@Nullable DatabaseError databaseError) {
86
87
public FirebaseRecyclerPagingAdapter (@ NonNull DatabasePagingOptions <T > options ){
87
88
super (options .getDiffCallback ());
88
89
89
- mPagedList = options .getData ();
90
+ mOptions = options ;
91
+
92
+ init ();
93
+ }
94
+
95
+ /**
96
+ * Initializes Snapshots and LiveData
97
+ */
98
+ public void init () {
99
+ mPagedList = mOptions .getData ();
90
100
91
101
//Init Data Source
92
102
mDataSource = Transformations .map (mPagedList ,
@@ -117,12 +127,11 @@ public LiveData<DatabaseError> apply(PagedList<DataSnapshot> input) {
117
127
}
118
128
});
119
129
120
- mParser = options .getParser ();
130
+ mParser = mOptions .getParser ();
121
131
122
- if (options .getOwner () != null ) {
123
- options .getOwner ().getLifecycle ().addObserver (this );
132
+ if (mOptions .getOwner () != null ) {
133
+ mOptions .getOwner ().getLifecycle ().addObserver (this );
124
134
}
125
-
126
135
}
127
136
128
137
/**
@@ -151,6 +160,28 @@ public void refresh(){
151
160
mFirebaseDataSource .invalidate ();
152
161
}
153
162
163
+ /**
164
+ * Re-initialize the Adapter with a new set of options. Can be used to change the query without
165
+ * re-constructing the entire adapter.
166
+ */
167
+ public void updateOptions (@ NonNull DatabasePagingOptions <T > options ) {
168
+ mOptions = options ;
169
+
170
+ // Tear down old options
171
+ boolean hasObservers = mPagedList .hasObservers ();
172
+ if (mOptions .getOwner () != null ) {
173
+ mOptions .getOwner ().getLifecycle ().removeObserver (this );
174
+ }
175
+ stopListening ();
176
+
177
+ // Reinit Options
178
+ init ();
179
+
180
+ if (hasObservers ) {
181
+ startListening ();
182
+ }
183
+ }
184
+
154
185
/**
155
186
* Start listening to paging / scrolling events and populating adapter data.
156
187
*/
0 commit comments