我想实现两个视图选项卡,以回收视图作为列表,并使用分页3收集数据并返回将是kotlin流程。选项卡一中一切正常,但选项卡二中没有显示。
viewModel代码(SharedViewModel):
@ExperimentalPagingApi
@HiltViewModel
class MovieViewModel @Inject constructor(
private val repository: MovieRepository,
private val dispatcher: CoroutineDispatcher
) : ViewModel() {
private val TAG = "MovieVM"
private var _moviePaging: Flow<PagingData<MovieEntities>>? =
repository.getMovie().cachedIn(viewModelScope)
private var _tvPaging: Flow<PagingData<MovieEntities>>? =
repository.getTv().cachedIn(viewModelScope)
init {
loadMovie()
}
// new paging
var moviePaging = MutableStateFlow<PagingData<MovieEntities>>(PagingData.empty())
var tvPaging = MutableStateFlow<PagingData<MovieEntities>>(PagingData.empty())
private fun loadMovie() {
viewModelScope.launch(dispatcher) {
_moviePaging?.collectLatest {
moviePaging.value = it
}
_tvPaging?.collectLatest {
tvPaging.value = it
}
}
}
代码已运行。当我调试时,只有
_moviePaging
被调用并显示记录器改造GET,但是_tvPaging
什么也没有,没有调用api,就像从未触发运行(无法访问?)
所以,我要更改订单,请先致电
_tvPaging
。然后只运行 _tvPaging
。
我想要两行代码
_moviePaging
和 _tvPaging
运行,但现在只是其中之一。请帮忙。
任何回应将不胜感激。
阅读一些文档并了解工作流协程后,
热流的一个协程范围只能运行一种方法,它们永远挂起
所以,解决方案是为每个热流制作
viewModelScope
viewModelScope.launch(dispatcher) {
_moviePaging?.collectLatest {
moviePaging.value = it
}
}
viewModelScope.launch(dispatcher) {
_tvPaging?.collectLatest {
tvPaging.value = it
}
}