Skip to content

Commit b4cffd0

Browse files
PatilShreyassamtstern
authored andcommitted
Method to Update Options at runtime [RTDB Paging Adapter] (#1694)
1 parent 2e9fe25 commit b4cffd0

File tree

1 file changed

+41
-10
lines changed

1 file changed

+41
-10
lines changed

database/src/main/java/com/firebase/ui/database/paging/FirebaseRecyclerPagingAdapter.java

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@ public abstract class FirebaseRecyclerPagingAdapter<T, VH extends RecyclerView.V
3131

3232
private final String TAG = "FirebasePagingAdapter";
3333

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;
3940

4041

4142
/*
@@ -86,7 +87,16 @@ public void onChanged(@Nullable DatabaseError databaseError) {
8687
public FirebaseRecyclerPagingAdapter(@NonNull DatabasePagingOptions<T> options){
8788
super(options.getDiffCallback());
8889

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();
90100

91101
//Init Data Source
92102
mDataSource = Transformations.map(mPagedList,
@@ -117,12 +127,11 @@ public LiveData<DatabaseError> apply(PagedList<DataSnapshot> input) {
117127
}
118128
});
119129

120-
mParser = options.getParser();
130+
mParser = mOptions.getParser();
121131

122-
if (options.getOwner() != null) {
123-
options.getOwner().getLifecycle().addObserver(this);
132+
if (mOptions.getOwner() != null) {
133+
mOptions.getOwner().getLifecycle().addObserver(this);
124134
}
125-
126135
}
127136

128137
/**
@@ -151,6 +160,28 @@ public void refresh(){
151160
mFirebaseDataSource.invalidate();
152161
}
153162

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+
154185
/**
155186
* Start listening to paging / scrolling events and populating adapter data.
156187
*/

0 commit comments

Comments
 (0)