首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行Kotlin Flow.collect,但不更新ui onConfigurationChanged

执行Kotlin Flow.collect,但不更新ui onConfigurationChanged
EN

Stack Overflow用户
提问于 2020-09-23 23:23:29
回答 2查看 691关注 0票数 0

我使用Flow从房间中获取数据,然后在我的FragmentLogic类中调用Flow.collect。在collect{}内部,我做了一些工作,并通过一个接口(例如:view.updateAdapter(collectData))更新视图。这很好用,直到调用onConfigurationChanged和屏幕旋转,collect中的代码在Logcat中执行和工作,但是任何改变UI的东西都不起作用,函数updateAdapter()被调用,但是没有发生任何事情。我发现的一种解决方案是,如果onStart()实例不为空,则在savedinstance中再次调用函数beginObservingProductList(),但这会创建collect{}的两个实例,它们都显示在logcat中。

我希望即使在调用onConfigurationChanged之后,UI更改也能起作用。

房间道类:

代码语言:javascript
复制
@Query("SELECT * FROM product")
fun observableList(): Flow<List<ProductEntity>>

然后在实现中:

代码语言:javascript
复制
 productDao.observableList().map { collection ->
            collection.map { entity ->
                entity.toProduct
            }
 }.flowOn(DispatchThread.io())

最后,我收集数据并更改视图:

代码语言:javascript
复制
 private fun beginObservingProductList() = this.launch {
    vModel.liveProductList.map {
        mapToSelectionProduct(it)
 }.collect {
        ui { view.updateAdapter(it) }
        if (it.isNotEmpty()) {
            filledListState()
     } else {
            emptyListState()
     }
        updateCosts()
        vModel.firstTime = false
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-25 21:02:38

Flow不是生命周期感知的,您应该使用LiveData来处理配置更改。

要在Flow中使用LiveData,请实现androidx.lifecycle:lifecycle-livedata-ktx:2.2.0,然后就可以使用.asLiveData()扩展函数了。

存储库

代码语言:javascript
复制
fun getList()= productDao.observableList().map { collection ->
        collection.map { entity ->
            entity.toProduct
        }
}.flowOn(DispatchThread.io())

ViewModel

代码语言:javascript
复制
val liveData = repository.getList().asLiveData()

活动/片段

代码语言:javascript
复制
 viewModel.liveData.observe(this,Observer{ list->

//do your thing
})
票数 2
EN

Stack Overflow用户

发布于 2021-10-29 08:59:46

你应该按照谷歌的建议使用repeatOnLifecycle。

链接:https://developer.android.com/kotlin/flow/stateflow-and-sharedflow

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64031225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档