我正在jetpack库中学习使用paging3分页,我正在调用一个API来接收文章列表,我注意到使用Pager在存储库中调用后收到的结果是一个包含所需结果的PagingData流,如下所示:
Flow<PagingData<Articles>>
当我在我的ViewModel中接收到这个流时,我想将它转换成一个状态流。我尝试过使用stateIn运算符,但它需要一个默认值,我认为这将是一个状态流,这是我卡住的地方。我如何将PagingData流转换成一个状态流?这样做是否可取?
zzwlnbp81#
我还有一个问题:当你得到文章并在UI上显示它们时,为什么你想把PagingData的流转换成Stateflow?在我的实践中,不需要触摸Stateflow。如果我想获得带有分页库3的文章。请注意Flow,ArticleRemoteMediator: RemoteMediator<Int, ArticleEntity> ...我认为这篇文章可以帮助你存档你的目标。(获取文章与寻呼3)https://medium.com/nerd-for-tech/pagination-in-android-with-paging-3-retrofit-and-kotlin-flow-2c2454ff776e
Flow
ArticleRemoteMediator: RemoteMediator<Int, ArticleEntity>
olmpazwi2#
我认为这取决于使用情况,而使用常规流时,每个新订户都会触发新流发射,这可能导致资源浪费(不必要的网络请求)在配置改变例如屏幕配给时,如果您希望这样一种行为,那么在不考虑使用StateFlow情况下使用Regular是可以的。您可以使用stateIn扩展将常规流量排放转换为StateFlow,并将初始状态设置为空,如下所示。
stateIn
someFlow.stateIn(coroutineScope, SharingStarted.WhileSubscribed(), PagingData.empty())
根据文档,PagingData.empty()会立即显示一个空的项目列表,并将任何加载状态更新发送给演示者
PagingData.empty()
2条答案
按热度按时间zzwlnbp81#
我还有一个问题:当你得到文章并在UI上显示它们时,为什么你想把PagingData的流转换成Stateflow?
在我的实践中,不需要触摸Stateflow。如果我想获得带有分页库3的文章。请注意
Flow
,ArticleRemoteMediator: RemoteMediator<Int, ArticleEntity>
...我认为这篇文章可以帮助你存档你的目标。(获取文章与寻呼3)https://medium.com/nerd-for-tech/pagination-in-android-with-paging-3-retrofit-and-kotlin-flow-2c2454ff776e
olmpazwi2#
我认为这取决于使用情况,而使用常规流时,每个新订户都会触发新流发射,这可能导致资源浪费(不必要的网络请求)在配置改变例如屏幕配给时,如果您希望这样一种行为,那么在不考虑使用StateFlow情况下使用Regular是可以的。您可以使用
stateIn
扩展将常规流量排放转换为StateFlow,并将初始状态设置为空,如下所示。根据文档,
PagingData.empty()
会立即显示一个空的项目列表,并将任何加载状态更新发送给演示者