如何解决`pagingAdapter.submitData()` 之后的代码没有被执行
我正在使用 Kotlin Flow 和 Android Paging 3 库编写一个玩具 Android 应用程序。该应用调用一些远程 API 来获取照片列表,并使用带有 RecyclerView
的 PagingDataAdapter
显示它们。
我发现 pagingAdapter.submitData()
之后的代码没有执行。
这是代码片段(此函数在 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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。