You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 15:32:46