Jetpack Compose导航返回时Paging 3列表自动重新加载的问题咨询
问题:Jetpack Compose + Paging3 返回页面时列表重置与下拉刷新冲突
我目前正在用Jetpack Compose、Paging 3库以及Jetpack Navigation做开发,核心功能是通过Paging 3从远程数据源拉取数据,并用LazyColumn展示出来。
核心代码片段
ViewModel部分
fun getImages(): Flow<PagingData<ObjectImage>> = Pager( PagingConfig(PAGE_SIZE, enablePlaceholders = false) ) { DataHome(RANDOM) }.flow.cachedIn(viewModelScope)
HomeView部分
val images = viewModelHome.getImages().collectAsLazyPagingItems() LazyColumn { ... }
遇到的具体问题
- 当我用
navHostController.navigate()跳转到其他页面,再返回HomeView时,LazyColumn会直接重置,重新从网络加载数据,体验很不好 - 我尝试过在ViewModel里手动缓存数据,虽然解决了列表重置的问题,但SwipeRefresh的状态判断完全失效了,我的状态判断逻辑是这样的:
data.apply { when { // 刷新中 loadState.refresh is LoadState.Loading -> { ItemLoading() } // 加载更多中 loadState.append is LoadState.Loading -> {...} // 刷新错误 loadState.refresh is LoadState.Error -> {...} // 加载更多错误 loadState.append is LoadState.Error -> {...} } }
我的依赖版本
implementation("androidx.paging:paging-runtime-ktx:3.1.0") implementation("androidx.paging:paging-compose:1.0.0-alpha14")
我怀疑是不是因为Paging Compose还处于alpha版本才导致的这些问题?另外我自己试了个临时解决方法,但不确定是否合理,想请教下大家:
// 获取图片数据 var images: Flow<PagingData<ObjectImage>> = Pager(PagingConfig(PAGE_SIZE)) { DataHome(RANDOM) }.flow.cachedIn(viewModelScope) // 重新加载数据 fun reload(){ images = Pager(PagingConfig(PAGE_SIZE)) { DataHome(RANDOM) }.flow.cachedIn(viewModelScope) }
现在我不再调用lazy items的.refresh()方法,而是通过调用viewModel的reload()来实现刷新,这个方案是否可行?有没有什么潜在问题?
内容的提问来源于stack exchange,提问作者Saksham Khurana
相关产品推荐
相关产品推荐

