在 Jetpack Compose 中调用分页数据的刷新方法无法正常工作
Calling refresh method on paging data in jetpack compose not working correctly
我正在使用下面的分页源实现从网络中获取数据并通过 collectAsLazyPagingItems()
在可组合中观察它。但是,在LazyPagingItems
上调用refresh()
方法时,不是从page 0
取数据,而是从上次取的页码取数据,导致无数据显示。这里出了什么问题?难道是因为 val page = params.key ?: 0
?
class CommentDataSource(
private val postId: Long,
private val commentApi: CommentApi
) : PagingSource<Int, Comment>() {
override fun getRefreshKey(state: PagingState<Int, Comment>): Int? {
return state.anchorPosition
}
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Comment> {
return try {
val page = params.key ?: 0
val responseData = commentApi.getPostComments(
postId = postId,
page = page
).data
LoadResult.Page(
data = responseData.comments,
prevKey = if (page == 0) null else page - 1,
nextKey = if (!responseData.hasNextPage) null else responseData.currentPage + 1
)
} catch (e: IOException) {
LoadResult.Error(e)
} catch (e: HttpException) {
LoadResult.Error(e)
}
}
}
我通过在 getRefreshKey()
方法
中返回 null 来解决这个问题
我正在使用下面的分页源实现从网络中获取数据并通过 collectAsLazyPagingItems()
在可组合中观察它。但是,在LazyPagingItems
上调用refresh()
方法时,不是从page 0
取数据,而是从上次取的页码取数据,导致无数据显示。这里出了什么问题?难道是因为 val page = params.key ?: 0
?
class CommentDataSource(
private val postId: Long,
private val commentApi: CommentApi
) : PagingSource<Int, Comment>() {
override fun getRefreshKey(state: PagingState<Int, Comment>): Int? {
return state.anchorPosition
}
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Comment> {
return try {
val page = params.key ?: 0
val responseData = commentApi.getPostComments(
postId = postId,
page = page
).data
LoadResult.Page(
data = responseData.comments,
prevKey = if (page == 0) null else page - 1,
nextKey = if (!responseData.hasNextPage) null else responseData.currentPage + 1
)
} catch (e: IOException) {
LoadResult.Error(e)
} catch (e: HttpException) {
LoadResult.Error(e)
}
}
}
我通过在 getRefreshKey()
方法