Сопрограмма Kotlin перестает запускаться при каждом экземпляре фрагмента, кроме первого, с использованием ViewPager

Я использую сопрограмму для запуска приостановленного развлечения 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
        }
    }

}   

сопрограмма запускается, но когда фрагмент, для которого используется виртуальная машина, уничтожается и воссоздается ViewPager, сопрограмма больше не запускается.

Идея состоит в том, чтобы публиковать список элементов, сгенерированных из запроса к базе данных, каждый раз, когда создается экземпляр фрагмента. Но по какой-то причине сопрограмма запускается только для первого экземпляра фрагмента, а не для любого последующего фрагмента.

Здесь во фрагменте onResume я звоню refresh

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

Я просто запуталась. Любой совет? Спасибо.


person the_prole    schedule 16.07.2020    source источник


Ответы (1)


Исправление заключалось в использовании

GlobalScope.launch { }

нет

viewModelScope.launch { }
person the_prole    schedule 16.07.2020