Entonces habrá un total de 6 componentes importantes que tendremos que entender e implementar.
0. Dependencias
def paging_version = “2.1.2”
implementation “androidx.paging:paging-runtime:$paging_version”
1. Fuente de datos
Por el nombre en sí, encontrará que este componente será proporcione datos para mostrar el reciclador.
Entonces, ¿de dónde obtiene la fuente de datos los datos? Puede ser cualquier recurso de la API web o de la base de datos local.
Sin embargo, en esta biblioteca tenemos 3 tipos de fuentes de datos y en base a nuestro caso de uso tenemos que elegir una.
- Fuente de datos posicionales
Usamos esta fuente de datos cuando tenemos que leer datos en cualquier posición, es decir, cuando existe la posibilidad de que el usuario cargue primero los primeros 10 elementos (1-10) y luego salte a la posición en la que debería cargar otros 10 elementos a partir de, digamos, 70 elementos. (70–80).
por ejemplo: aplicación Contactos.
2. Fuente de datos con elemento clave
Usamos esta fuente de datos cuando el siguiente bloque de datos a cargar depende del último elemento del bloque cargado actualmente.
3. Fuente de datos con una página clave
Usamos esta fuente de datos cuando los números de página se enumeran en los bloques.
Por ejemplo: vea la animación a continuación
Usaré para este artículo fuente de datos con una página clave porque se implementa con mucha frecuencia en la mayoría de las API. La API que usaremos para esta implementación es la propia API de marcador de posición JSON. Sin embargo, solo necesita cambiar la URL de acuerdo con el resto del punto final de la API, todos serán iguales.
https://jsonplaceholder.typicode.com/post¿con? página = 1
Esta API devuelve una lista de 20 publicaciones según el número de página especificado como parámetro de consulta.
2. Fábrica de fuentes de datos
Esta carpeta está aquí crear una instancia la fuente de datos seleccionada anteriormente en nuestro caso y instancia de fuente de datos con una página clave
¿Por qué no crear una instancia directamente con una nueva palabra clave? Esto tiene que ver con la implementación de patrones de diseño de arquitectura pura en Java. El uso de una clase de fábrica para crear una instancia de un objeto es uno de los 23 patrones de diseño y se conoce como patrón de diseño de fábrica.
3. Almacenamiento
Si alguna vez implementó MVVM en Android, es posible que conozca este componente. Para quienes no lo sepan, la función principal de este componente es eliminar detalles de implementación sobre cómo recuperar datos y si recuperar datos de Internet o de una base de datos local.
En nuestra implementación, esto crea una instancia de la fuente de datos usando la fábrica de fuentes de datos y devuelve una instancia de la lista paginada.
Lista paginada es como un ArrayList (porque también implementa AbstractList), que lee sus datos en bloques (páginas) de una fuente de datos.
4. ViewModel
Este componente es un intermediario entre la capa de datos (almacenamiento) y la capa de interfaz de usuario (actividad / fragmento).
Llama al repositorio para recuperar los datos como una lista paginada y pasarlos a la actividad o al fragmento.
5. Actividad / fragmento
Este componente es responsable de recuperar datos como una lista paginada del componente de modelo de visualización y crear una instancia del PagedListAdapter y pasar la lista paginada que recibe del ViewModel al PagedListAdapter.
6. PagedListAdapter
Como discutimos al comienzo de la publicación, necesitaremos usar el PagedListAdapter para implementar la paginación usando la biblioteca Paging2.
Finalmente, veamos nuestra estructura de carpetas.
Los adaptadores tendrán las clases PostRecyclerAdapter, LoadingViewHolder y PostViewHolder
La carpeta del modelo tendrá PostDataSource, un POJO para la carpeta Publicar en la entidad y una carpeta PostRepository en la carpeta de repositorios.
La carpeta de red tiene una API y una implementación de RetrofitClient
El modelo de vista tendrá las clases MainActivityViewModel y MainActivityViewModelFactory
La carpeta de visualización tendrá una clase MainActivity
Un conjunto de constantes que contiene todas las constantes que se utilizarán en todo el proyecto. Actualmente estamos almacenando constantes de estado de carga, es decir, EN CURSO, FALLIDO y ÉXITO