Да, было бы хорошо иметь решение, как в iOS TableView внутри ScrollView, где есть прокрутка родительского scrollview, а затем прокрутка внутреннего табличного представления независимо. И Tableview заполнить весь экран, если прокручивать, чтобы заполнить экран.
ольно новичок в разработке приложений для 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, и я просто что-то делаю не так? Спасибо за любой совет.