Ответ
Лучше использовать пейджинг по дате, так как он более предсказуем для пользователя и лучше работает с бесконечной лентой. При пейджинге по количеству могут возникать проблемы при изменении данных (удаление/добавление сообщений), что приведёт к дублированию или пропуску контента.
Пример реализации на Kotlin с Paging 3:
class MessagesPagingSource : PagingSource<Long, Message>() {
override suspend fun load(params: LoadParams<Long>): LoadResult<Long, Message> {
val beforeTime = params.key ?: System.currentTimeMillis()
val messages = api.getMessages(beforeTime, params.loadSize)
return LoadResult.Page(
data = messages,
prevKey = null, // только вперед
nextKey = messages.lastOrNull()?.timestamp
)
}
}