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.