see*_*uch 5 android kotlin android-paging android-paging-library kotlin-coroutines
我正在使用 Kotlin flow 和 Android Paging 3 库编写一个玩具 Android 应用程序。该应用程序调用一些远程 API 来获取照片列表,并RecyclerView
使用PagingDataAdapter
.
我发现后面的代码pagingAdapter.submitData()
没有执行。
这是代码片段(该函数位于 a 中Fragment
):
fun refreshList() {
lifecycleScope.launch {
photosViewModel.listPhotos().collect {
// `it` is PagingData<Photo>
pagingAdapter.submitData(it)
Log.e(TAG, "After submitData")
}
}
}
Run Code Online (Sandbox Code Playgroud)
日志After submitData
不打印。
但是,如果我将日志记录放在该行的前面pagingAdapter.submitData()
,则会打印它,如下所示:
fun refreshList() {
lifecycleScope.launch {
photosViewModel.listPhotos().collect {
// `it` is PagingData<Photo>
Log.e(TAG, "Before submitData")
pagingAdapter.submitData(it)
}
}
}
Run Code Online (Sandbox Code Playgroud)
打印日志Before submitData
没有问题。
请问为什么会出现这种情况?
.submitData
是一个挂起函数,直到失效或刷新才返回。只要分页正在从PagingData
您提供的数据中主动加载(收集),它就不会完成。这就是为什么它必须在已启动的作业中完成。
出于同样的原因,请务必使用collectLatest
而不是collect
确保取消并generations
尽快开始显示新内容。
归档时间: |
|
查看次数: |
1933 次 |
最近记录: |