Да, было бы хорошо иметь решение, как в 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, и я просто что-то делаю не так? Спасибо за любой совет.

Ответы на вопрос(1)

Ваш ответ на вопрос