Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 处理碎片的正确方法';在viewModel中创建流_Android_Kotlin_Viewmodel_Kotlin Coroutines_Flow - Fatal编程技术网

Android 处理碎片的正确方法';在viewModel中创建流

Android 处理碎片的正确方法';在viewModel中创建流,android,kotlin,viewmodel,kotlin-coroutines,flow,Android,Kotlin,Viewmodel,Kotlin Coroutines,Flow,我有一个片段和一个视图模型 在片段中,我有一个视图,它公开了一个协同程序流,我想在视图模型中处理集合,显然我不会将视图引用到视图模型 我的想法基本上是在片段onViewCreated: view.flow .onEach(viewModel::collect) .launchIn(viewModel.viewModelScope) 这是可行的,但是。。。这是一个好的实现吗?或者有更好的方法来实现我的目标吗?我相信您可以使用标准片段的作用域,而不是viewmodelScope v

我有一个
片段
和一个
视图模型

片段
中,我有一个
视图
,它公开了一个协同程序流,我想在
视图模型
中处理集合,显然我不会将
视图
引用到
视图模型

我的想法基本上是在片段
onViewCreated

view.flow
    .onEach(viewModel::collect)
    .launchIn(viewModel.viewModelScope)

这是可行的,但是。。。这是一个好的实现吗?或者有更好的方法来实现我的目标吗?

我相信您可以使用标准片段的作用域,而不是viewmodelScope

viewLifecycleOwner.lifecycleScope
from
androidx.lifecycle:lifecycle runtime ktx:2.2.0
依赖项

像这样

view.flow
    .onEach(viewModel::collect)
    .launchIn(viewLifecycleOwner.lifecycleScope)

我考虑过了,但onEach是可支持的,这意味着挂起的块将写入视图模型中,但实际上作用于片段,而实际上想法是在viewmodel范围内启动它(ofc我可以创建一个新的协同程序,但避免了这一点)viewmodel.collect是可挂起的,但是,如果希望在viewmodelscope中执行viewmodel中的代码,则可以在viewmodel中启动具有viewmodel作用域的新协同程序。如果您在viewmodel作用域中启动视图流,您将泄漏视图/片段,我对此感到震惊。。。