如何解决分页3-为什么我的重试页脚不调用PagingSource的load方法?
在代码实验室之后,我已经在我的应用程序中实现了Paging 3,并通过withLoadStateHeaderAndFooter
添加了带有重试按钮的页脚:
recycler_view_results.adapter = adapter.withLoadStateHeaderAndFooter(
header = UnsplashLoadStateAdapter { adapter.retry() },footer = UnsplashLoadStateAdapter { adapter.retry() }
)
当我单击页脚的ViewHolder中的重试按钮时,确实会调用adapter.retry()
,因此此处的设置正确。但是,此方法永远不会像通常那样调用我的PagingSource的load
方法。
我的PagingSource(我检查在错误情况下是否正确返回了LoadResult.Error
)
class UnsplashPagingSource(
private val unsplashApi: UnsplashApi,private val query: String
) : PagingSource<Int,UnsplashPhoto>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int,UnsplashPhoto> {
val position = params.key ?: UNSPLASH_STARTING_PAGE_INDEX
return try {
val response = unsplashApi.searchPhotos(query,position,params.loadSize)
val photos = response.results
LoadResult.Page(
data = photos,prevKey = if (position == UNSPLASH_STARTING_PAGE_INDEX) null else position - 1,nextKey = if (photos.isEmpty()) null else position + 1
)
} catch (exception: IOException) {
return LoadResult.Error(exception)
} catch (exception: HttpException) {
return LoadResult.Error(exception)
}
}
}
我的存储库:
class UnsplashRepository @Inject constructor(private val unsplashApi: UnsplashApi) {
fun getSearchResultStream(query: String): Flow<PagingData<UnsplashPhoto>> {
return Pager(
config = PagingConfig(
pageSize = NETWORK_PAGE_SIZE,enablePlaceholders = false
),pagingSourceFactory = { UnsplashPagingSource(unsplashApi,query) }
).flow
}
companion object {
private const val NETWORK_PAGE_SIZE = 20
}
}
在我的片段中,我这样做:
private fun searchPhotos(query: String) {
searchJob?.cancel()
searchJob = lifecycleScope.launch {
viewModel.searchPhotos(query).collectLatest {
adapter.submitData(it)
}
}
}
有趣的是,空列表的重试按钮有效:
retry_button.setOnClickListener {
adapter.retry()
// this works
}
解决方法
在我将页面依赖从“ 3.0.0-alpha02”更新为“ 3.0.0-alpha03”之后,现在可以使用了。看起来这是库中的错误。
随后,我还找到了相应的错误报告:https://issuetracker.google.com/issues/160194384
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。