我写了一些协程,它将触发ViewModel函数来执行API调用。协程在onCreateView
部分。
协程本身看起来像这样:
val myCoroutine =
viewLifecycleOwner.lifecycleScope.launch(start = CoroutineStart.LAZY) {
Log.i(TAG, "onCreateView: ?")
mViewModel.performApiCall()
mViewModel.myLiveData.observe(viewLifecycleOwner, Observer { obj ->
when (obj ) {
is DataWrapper.Success -> {
Log.i(TAG, "onCreateView: ${obj.data}")
}
is DataWrapper.Error -> {
Log.e(
TAG,
"onCreateView: couldn't perform an api call ${obj.message}"
)
}
}
})
}
我想在用户点击按钮后启动这个协程:
mBinding.conversionConverseBtn.setOnClickListener {
myCoroutine.start()
}
在第一次之后,一切都很正常,但是我已经实现了SwiperRefreshLayout
,当我刷新布局时(我的意思是设置用户输入片段时的UI),它不工作。我几乎记录了每一步,结果发现刷新后myCoroutine就不活动了,当我调用.start()
的时候,它似乎也没有启动。我该怎么解决呢?
2条答案
按热度按时间zpf6vheq1#
协程只能启动一次,你需要使用
launch
创建新的协程来再次运行它,我建议将执行API调用的代码移动到一个方法中,并在刷新时调用它ecfdbz9o2#
你可以像这样在代码中使用getter:
请注意,您应该将
myCoroutine
示例化为类中的变量,而不是在onCreateView
节中。然后,您可以根据需要多次调用myCoroutine.start()
。