Hey I am using Paging 3 library with ViewPager 2. In which it loads unlimited data.
implementation "androidx.paging:paging-runtime-ktx:3.0.0-alpha07"
DataSource.kt
package com.example.viewpagerexample
import java.util.*
class DataSource(
private val size: Int = 5,
private val currentDate: Date,
private val limitDate: Date?
) {
fun returnData(pageNumber: Int): List<Date> {
val dateList = mutableListOf<Date>()
val startDateForPage = startDate(pageNumber)
val tempCalendar = Calendar.getInstance()
tempCalendar.time = startDateForPage
val lastDateForPage = endDate(startDateForPage)
while (tempCalendar.time < lastDateForPage) {
if (limitDate == null ||
tempCalendar.time.before(limitDate) ||
tempCalendar.time == limitDate
) {
dateList.add(tempCalendar.time)
tempCalendar.add(Calendar.DATE, 1)
} else {
break
}
}
return dateList
}
private fun startDate(pageNumber: Int): Date {
if (pageNumber == 0) {
return currentDate
} else {
Calendar.getInstance().let {
it.time = currentDate
it.add(Calendar.DATE, pageNumber * size)
return it.time
}
}
}
private fun endDate(firstDateForPage: Date): Date {
Calendar.getInstance().let {
it.time = firstDateForPage
it.add(Calendar.DATE, size)
return it.time
}
}
}
ViewPagerPagingSource.kt
class ViewPagerPagingSource(
private val dataSource: DataSource
) : PagingSource<Int, Date>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Date> {
val position = params.key ?: 0
return try {
val data = dataSource.returnData(position)
LoadResult.Page(
data = data,
prevKey = if (data.isEmpty()) null else position - 1,
nextKey = if (data.isEmpty()) null else position + 1,
itemsBefore = LoadResult.Page.COUNT_UNDEFINED,
itemsAfter = LoadResult.Page.COUNT_UNDEFINED
)
} catch (exception: IOException) {
LoadResult.Error(exception)
}
}
}
All code working fine. when application starts it loads current date page.
Now when I am updating the library to this version
implementation "androidx.paging:paging-runtime-ktx:3.0.1"
It jumping to -1 page I guess and look like this
I don't understand why this is causing the issue and also i edited ViewPagerPagingSource to implement another method
override fun getRefreshKey(state: PagingState<Int, Date>): Int? {
return state.anchorPosition
}
I don't understand what is causing the issue after updating the library. I am adding my github repository Example. Please someone suggest me what is going wrong in code?
UPDATE
I tried to learn the paging concept and update my code. Also, do changes as per @dlam suggestion.
Again is jumping 1 page if I pass few days before date as current date. Github
2021-11-21 21:20:40.820 5460-5460/com.example.viewpagerexample E/Page -1: [06/11/2021, 07/11/2021, 08/11/2021, 09/11/2021, 10/11/2021]
2021-11-21 21:20:40.821 5460-5460/com.example.viewpagerexample E/Page 0: [11/11/2021, 12/11/2021, 13/11/2021, 14/11/2021, 15/11/2021]
2021-11-21 21:20:40.821 5460-5460/com.example.viewpagerexample E/Page 1: [16/11/2021, 17/11/2021, 18/11/2021, 19/11/2021, 20/11/2021]
from Updating Paging 3 alpha to stable cause indexing issue Android


No comments:
Post a Comment