我有点困惑。我正在尝试实现分页3库。当我在工作时,我发现了一些问题。如果我使用pagedItems()方法来收集流,cachedIn()不起作用。该函数在设备旋转后再次发送新请求。但是,如果我使用pagedItems值,一切都很好。
问题是我注意到当我尝试在设备旋转后从这些方法中收集流时,pagedItems()函数的hashcode发生了变化,但pagedItems值没有变化。它们之间的区别是什么?为什么其中一个函数的hashcode发生了变化,而另一个函数没有变化?
- 视图模型**
// Working perfectly fine
val pagedItems = useCase.invoke(PAGE_SIZE).cachedIn(viewModelScope)
// Working without caching feature
fun pagedItems(): Flow<PagingData<Result>> {
return useCase.invoke(PAGE_SIZE).cachedIn(viewModelScope)
}
- 碎片**
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
// It's working fine
launch {
viewModel.pagedItems.collect { pagedData ->
pagingAdapter.submitData(pagedData)
}
}
// It sends request again
launch {
viewModel.pagedItems().collect { pagedData ->
pagingAdapter.submitData(pagedData)
}
}
}
1条答案
按热度按时间xqkwcwgp1#
在
useCase
中的某个地方,你正在创建Pager
的一个示例。在瓦尔的情况下,你只做了一次,并且它被存储在ViewModel
中,ViewModel
在配置更改后仍然存在。在function的情况下,你在每次调用函数时创建Pager
的新示例,也就是说,每次重新创建Fragment时。