android - 无法在 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 {}
功能。
我想要做的是显示多个LevelFragment
using ViewPager
。所以我创建PagerAdapter
和继承FragmentStatePagerAdapter
. 文档所说的FragmentStatePagerAdapter
是When pages are not visible to the user, their entire fragment may be destroyed, only keeping the saved state of that fragment
. 我不确定 viewModel 是否是已保存状态的一部分,但是当我转到被破坏的片段并重新创建片段时,我无法调用load()
函数,这不是编译错误或运行时崩溃,而是当我尝试放置断点时在函数中它没有被调用。我仍然可以调用另一个没有协程范围的函数。
另外,我已经尝试使用 viewModelScope 并且结果仍然相同。
是否还有其他人也遇到这些问题,或者您是否知道可能导致此问题的原因?
解决方案
推荐阅读
- css - 使用 CSS 定位应用容器的子 div
- javascript - 来自外部源的重新渲染事件/刷新事件 [FC5.2.0]
- c# - 给定的表达式永远不是提供的类型
- html - 如何设置要点的样式,使其具有模糊的背景和坚实的中心?
- node.js - 如何实现将数据从 mongo 流式传输到 elasticsearch 的 nodeJS 工作程序?
- c# - Visual Studio 2015 中的错误:错误 MSB4166:子节点“3”过早退出。关机
- spring-boot - 每个功能文件分叉一个JVM进程?
- docker - 无法在 3.1 docker 容器中运行 dotnet dump -“进程 1 未运行兼容的 .NET Core 运行时”
- angular - 如何从字节数组中下载为角度字符串?
- postgresql - Postgres:当前行中列表的子集有多少行?