首页 > 解决方案 > 无法在 ViewModel 中调用协程作用域函数

问题描述

这是我的BaseViewModel

abstract class BaseViewModel : ViewModel(), CoroutineScope {

    private val parentJob = SupervisorJob()

    override val coroutineContext: CoroutineContext
        get() = parentJob + Dispatchers.Main

    override fun onCleared() {
        super.onCleared()
        parentJob.cancel()
    }
}

然后我有LevelFragment哪个LevelViewModel是继承的BaseViewModel。在LevelViewModel我有fun load() = launch {}功能。

我想要做的是显示多个LevelFragmentusing ViewPager。所以我创建PagerAdapter和继承FragmentStatePagerAdapter. 文档所说的FragmentStatePagerAdapterWhen pages are not visible to the user, their entire fragment may be destroyed, only keeping the saved state of that fragment. 我不确定 viewModel 是否是已保存状态的一部分,但是当我转到被破坏的片段并重新创建片段时,我无法调用load()函数,这不是编译错误或运行时崩溃,而是当我尝试放置断点时在函数中它没有被调用。我仍然可以调用另一个没有协程范围的函数。

另外,我已经尝试使用 viewModelScope 并且结果仍然相同。

是否还有其他人也遇到这些问题,或者您是否知道可能导致此问题的原因?

标签: androidkotlin-coroutinesandroid-viewmodel

解决方案


推荐阅读