android 使用函数时分页库cachedIn()函数不起作用

x4shl7ld  于 2023-01-28  发布在  Android
关注(0)|答案(1)|浏览(140)

我有点困惑。我正在尝试实现分页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)
                }
            }
        }
xqkwcwgp

xqkwcwgp1#

useCase中的某个地方,你正在创建Pager的一个示例。在瓦尔的情况下,你只做了一次,并且它被存储在ViewModel中,ViewModel在配置更改后仍然存在。在function的情况下,你在每次调用函数时创建Pager的新示例,也就是说,每次重新创建Fragment时。

相关问题