【问题标题】:Kotlin coroutine stops launching on every fragment instantiation except the first, using ViewPagerKotlin 协程停止在除第一个片段实例化之外的每个片段实例上启动,使用 ViewPager
【发布时间】:2020-07-16 16:22:53
【问题描述】:

我用协程来启动暂停的乐趣emitList

class MyViewModel : ViewModel() {

    private var _list = MutableLiveData<ArrayList<ListItem>>()
    val _list: LiveData<ArrayList<ListItem>>
        get() = _list

    fun refresh() = viewModelScope.launch {
        emitList()
    }

    private suspend fun emitList() = runIfBounded {
        withContext(Dispatchers.IO) {
            // run some database access code
            // post results to _list
        }
    }

}   

协程启动,但是当vm用于的片段被ViewPager销毁并重新创建时,协程不再启动。

这个想法是在每次实例化片段时发布从数据库查询生成的项目列表。但是由于某种原因,协程只针对第一个实例化的片段启动,而不是之后的任何片段。

这里是片段的onResume 我叫refresh

override fun onResume() {
    super.onResume()
    viewModel.refresh()
}

我只是感到困惑。有什么建议吗?谢谢。

【问题讨论】:

    标签: android kotlin kotlin-coroutines android-jetpack


    【解决方案1】:

    修复是使用

    GlobalScope.launch { }
    

    不是

    viewModelScope.launch { }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      相关资源
      最近更新 更多