android - `pagingAdapter.submitData()` 之后的代码没有被执行
问题描述
我正在使用 Kotlin flow 和 Android Paging 3 库编写一个玩具 Android 应用程序。该应用程序调用一些远程 API 来获取照片列表,并使用 aRecyclerView
和PagingDataAdapter
.
我发现后面的代码pagingAdapter.submitData()
没有执行。
这是代码片段(此函数在 a 中Fragment
):
fun refreshList() {
lifecycleScope.launch {
photosViewModel.listPhotos().collect {
// `it` is PagingData<Photo>
pagingAdapter.submitData(it)
Log.e(TAG, "After submitData")
}
}
}
After submitData
不打印日志。
但是,如果我将日志记录放在该行的前面pagingAdapter.submitData()
,则会打印出来,如下所示:
fun refreshList() {
lifecycleScope.launch {
photosViewModel.listPhotos().collect {
// `it` is PagingData<Photo>
Log.e(TAG, "Before submitData")
pagingAdapter.submitData(it)
}
}
}
日志Before submitData
打印没有问题。
请问为什么会出现这种情况?
解决方案
.submitData
是一个挂起函数,直到失效或刷新才返回。只要 Paging 正在从PagingData
您提供的内容中主动加载(收集),它就不会完成。这就是为什么它必须在已启动的作业中完成。
出于同样的原因,请确保使用collectLatest
而不是collect
确保您取消并generations
尽快开始显示新的。
推荐阅读
- android - 如何在画布上绘制的圆圈上有一个脉动动画
- javascript - 如何使用带有 Django 模板标签的 amp CSS 星级评分?
- python - 元组的哈希函数如何工作
- jquery - 在 React 子组件中成功响应后,jQuery“.done”不会触发
- python - matplotlib 不错的情节,谁知道使用的方案?
- lua - 表大小差异。两个例子相同吗?
- terraform - terraform_remote_state 后端没有部分配置?
- c# - Azure Storage Queue.AddMessageAsync(item, cancelToken) 缺少接受两个参数的方法
- ssl - TLS1.3 版本不匹配
- java - Matrix Connected Cells:给定矩阵的位置,用数字 k 替换连接的单元格