Я подаю в пользу данных страниц с использованием Paging3 в Compose. Когда я запускаю обновление и список находится в середине двух страниц (размер страницы составляет 20 элементов, а прокрутка - от 17 до 21) в списке показан элемент 21 и загрузку сверху и снизу. После этого свиток сбрасывается в верхнюю часть первой страницы. Когда свиток не в середине двух страниц, у меня нет проблем. Страница 1 и страница 3 Показать загрузку ?? < /p>
Это ожидаемое поведение ?? это ошибка? Я что -то пропустил в конфигурации? p>
my pagingsource: < /p>
class GenericPagingDataSource (
private val networkCall: suspend (Int) -> Result,
private val mapItemList: (List) -> List
) : PagingSource() {
private var nextPageNumber: Int = 1
override suspend fun load(params: LoadParams): LoadResult {
nextPageNumber = params.key ?: 1
return when (val response = networkCall.invoke(nextPageNumber)) {
is Result.Success -> {
try {
val items = mapItemList(response.data.results)
val prevKey = response.data.page - 1
val nextKey = response.data.page + 1
LoadResult.Page(
items,
if (prevKey < 1) null else prevKey,
if (items.isEmpty()) null else nextKey
)
} catch (e: Exception) {
if (e is CancellationException) {
throw e
}
Timber.e(e, "Mapping error in pagination")
LoadResult.Error(Exception())
}
}
is Result.Error -> {
LoadResult.Error(Exception())
}
}
}
override fun getRefreshKey(state: PagingState): Int? {
return state.anchorPosition?.let { anchorPosition ->
val anchorPage = state.closestPageToPosition(anchorPosition)
anchorPage?.prevKey?.plus(1) ?: anchorPage?.nextKey?.minus(1)
}
}
}
< /code>
Как я запрошу данные: < /p>
override fun getListItems(listId: Long): Flow {
return Pager(
config = PagingConfig(
pageSize = 20,
enablePlaceholders = false,
),
pagingSourceFactory = {
GenericPagingDataSource(
networkCall = { page ->
listRemoteDataSource.getListItems(
listId = listId,
page = page
)
},
mapItemList = {
it.toModel(
baseUrlPoster = urlProvider.BASE_URL_POSTER,
baseUrlBackdrop = urlProvider.BASE_URL_BACKDROP
)
}
)
}
).flow
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... -two-pages