Como a Biblioteca de paginação do Android sabe carregar mais dados?

Sou bastante novo no desenvolvimento de aplicativos para Android e estou tentando fazer tudo "da maneira certa". Então, neste momento, estou implementando a nova Biblioteca de Paginação Android no meu projeto, onde preciso carregar uma lista de artigos de um servidor de rede.

eu tenho umArticlesRepository classe que retorna umArticleList classe contendo instâncias deArticleListItem que eu gostaria de exibir em um RecyclerView. A lista de artigos já está paginada no servidor, portanto, o repositório envia uma solicitação para a primeira página e retorna umArticleList com opage propriedade definida como1 e aarticles propriedade contendo umList<ArticleListItem> de artigos na página solicitada. Não sei quantos artigos podem estar em uma página.

Agora, eu pude implementar umPageKeyedDataSource<Integer, ArticleListItem>, mas busca apenas a primeira página:

@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));
    }
}

oprevious/next funções retornam umInteger com o número da página anterior / seguinte ounull se não houver.

No meu ViewModel, eu configuro o PagedList assim:

PagedList.Config config = new PagedList.Config.Builder()
            .setEnablePlaceholders(false)
            .setInitialLoadSizeHint(1)
            .setPageSize(1)
            .setPrefetchDistance(1)
            .build();

Dessa forma, eu consigo carregar a primeira página, mas quando rolar para a parte inferior do RecyclerView (que fica dentro de um NestedScrollView), nada acontece. A depuração mostra que oPageKeyedDataSource.loadAfter O método não é chamado.

Preciso dizer de alguma forma à PagedList que a próxima página precisa ser carregada ou é o trabalho do RecyclerView / DataSource / GodKnowsWhatElse e estou apenas fazendo algo errado? Obrigado por qualquer conselho.

questionAnswers(1)

yourAnswerToTheQuestion