私のアプリはAndroidのArchitecture componentsライブラリを使用しており、無限のスクロールエフェクトを使用してページ分割されたREST APIからフェッチされたアイテムのリストを表示しています。AndroidPaging LibraryとNetworkBoundResourceを統合する方法
私がしようとしているのは、NetworkBoundResourceと組み合わせてPaging Libraryを使用することです。ユーザーがリストをスクロールすると、データベースから次のアイテムがフェッチされ、存在し、APIが表示されます。同時にDB内の項目を更新するために呼び出されます。
私はこれらの2つのパターンが共生している例は見つかりませんでした。ここで
はDAOである:ここでは
@Query("SELECT * FROM items ORDER BY id DESC")
LivePagedListProvider<Integer,MyItem> loadListPaginated();
は私NetworkBoundResource
実装です:
public class PagedListNetworkBoundResource extends NetworkBoundResource<PagedList<MyItem>, List<MyItem>> {
@Override
protected void saveCallResult(@NonNull List<MyItem> items) {
// Inserting new items into DB
dao.insertAll(items);
}
@Override
protected boolean shouldFetch(@Nullable PagedList<MyItem> data) {
return true;
}
@NonNull
@Override
protected LiveData<PagedList<MyItem>> loadFromDb() {
return Transformations.switchMap(dao.loadListPaginated().create(INITIAL_LOAD_KEY, PAGE_SIZE),
new Function<PagedList<MyItem>, LiveData<List<MyItem>>>() {
@Override
public LiveData<PagedList<MyItem>> apply(final PagedList<MyItem> input) {
// Here I must load nested objects, attach them,
// and return the fully loaded items
}
});
}
@NonNull
@Override
protected LiveData<ApiResponse<List<MyItem>>> createCall() {
// I don't get the current paged list offset to perform a call to the API
return ...;
}
}