Я довольно новичок в разработке приложений для Android и пытаюсь сделать все «правильно». Итак, сейчас я внедряю новую библиотеку подкачки Android в свой проект, где мне нужно загрузить список статей с сетевого сервера. .
У меня есть класс ArticlesRepository
, который возвращает класс ArticleList
, содержащий экземпляры ArticleListItem
, которые я хотел бы отобразить в RecyclerView. Список статей разбит на страницы уже на сервере, поэтому хранилище отправляет запрос на первую страницу и возвращает ArticleList
со свойством page
, установленным на 1
, и свойством articles
, содержащим List<ArticleListItem>
статьи на запрашиваемой странице. Я не знаю, сколько статей может быть на одной странице.
Теперь я смог реализовать PageKeyedDataSource<Integer, ArticleListItem>
, но он выбирает только первую страницу:
@Override
public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull LoadInitialCallback<Integer, ArticleListItem> callback) {
ArticleList list = load(1);
if (list != null) {
callback.onResult(list.articles, null, next(list));
}
}
@Override
public void loadBefore(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, ArticleListItem> callback) {
ArticleList list = load(previous(params.key));
if (list != null) {
callback.onResult(list.articles, previous(list));
}
}
@Override
public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, ArticleListItem> callback) {
ArticleList list = load(next(params.key));
if (list != null) {
callback.onResult(list.articles, next(list));
}
}
Функции previous
/ next
возвращают Integer
с номером предыдущей / следующей страницы или null
, если его нет.
В моей ViewModel я настраиваю PagedList следующим образом:
PagedList.Config config = new PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setInitialLoadSizeHint(1)
.setPageSize(1)
.setPrefetchDistance(1)
.build();
Таким образом, я могу загрузить первую страницу, но когда я прокручиваю до конца RecyclerView (который находится внутри NestedScrollView), ничего не происходит. Отладка показывает, что метод PageKeyedDataSource.loadAfter
не вызывается.
Должен ли я как-то сообщить PagedList, что должна быть загружена следующая страница, или это работа RecyclerView / DataSource / GodKnowsWhatElse, и я просто что-то делаю не так? Спасибо за любой совет.