Составьте паджин -3 потерянный свиток при обновлении в середине двух страницAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Составьте паджин -3 потерянный свиток при обновлении в середине двух страниц

Сообщение Anonymous »

Я подаю в пользу данных страниц с использованием 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»