使用 SharedViewModel 的多页 viewPager2 与分页 3 不显示第 2 页上的数据

问题描述 投票:0回答:1

我想实现两个视图选项卡,以回收视图作为列表,并使用分页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
运行,但现在只是其中之一。请帮忙。

任何回应将不胜感激。

android kotlin viewmodel kotlin-coroutines android-paging-3
1个回答
0
投票

阅读一些文档并了解工作流协程后,

热流的一个协程范围只能运行一种方法,它们永远挂起

所以,解决方案是为每个热流制作

viewModelScope

viewModelScope.launch(dispatcher) {
            _moviePaging?.collectLatest {
                moviePaging.value = it
            }
        }
viewModelScope.launch(dispatcher) {
            _tvPaging?.collectLatest {
                tvPaging.value = it
            }
        }
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.