¿Cómo sabe la Biblioteca de paginación de Android cargar más datos?

Soy bastante nuevo en el desarrollo de aplicaciones de Android y estoy tratando de hacer todo "de la manera correcta". Así que en este momento, estoy implementando la nueva Biblioteca de paginación de Android en mi proyecto, donde necesito cargar una lista de artículos desde un servidor de red.

Yo tengo unArticlesRepository clase que devuelve unaArticleList clase que contiene instancias deArticleListItem que me gustaría mostrar en un RecyclerView. La lista de artículos ya está paginada en el servidor, por lo que el repositorio envía una solicitud para la primera página y devuelve unaArticleList con elpage propiedad establecida en1 y elarticles propiedad que contiene unaList<ArticleListItem> de artículos en la página solicitada. No sé cuántos artículos puede haber en una página.

Ahora, pude implementar unPageKeyedDataSource<Integer, ArticleListItem>, pero solo obtiene la primera 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));
    }
}

Losprevious/nextas funciones @ devuelven unaInteger con el número de página anterior / siguiente onull si no hay uno.

En mi ViewModel, configuro la PagedList de esta manera:

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

De esta manera, puedo cargar la primera página, pero cuando me desplazo hasta la parte inferior de RecyclerView (que está dentro de NestedScrollView), no sucede nada. La depuración muestra que laPageKeyedDataSource.loadAfterl método @ no se invoca.

¿Debo decirle de alguna manera a PagedList que se debe cargar la siguiente página, o es el trabajo de RecyclerView / DataSource / GodKnowsWhatElse y estoy haciendo algo mal? Gracias por cualquier consejo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta