`pagingAdapter.submitData()` 之后的代码没有被执行
Code after `pagingAdapter.submitData()` is not executed
我正在使用 Kotlin 流程和 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
是一个挂起函数,在失效或刷新之前不会return。只要 Paging 正在从您提供的 PagingData
主动加载(收集),它就不会完成。这就是为什么它必须在已启动的作业中完成的原因。
出于同样的原因,请确保使用 collectLatest
而不是 collect
以确保您尽快取消并开始显示新的 generations
。
我正在使用 Kotlin 流程和 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
是一个挂起函数,在失效或刷新之前不会return。只要 Paging 正在从您提供的 PagingData
主动加载(收集),它就不会完成。这就是为什么它必须在已启动的作业中完成的原因。
出于同样的原因,请确保使用 collectLatest
而不是 collect
以确保您尽快取消并开始显示新的 generations
。