`pagingAdapter.submitData()` 之后的代码没有被执行

Code after `pagingAdapter.submitData()` is not executed

我正在使用 Kotlin 流程和 Android Paging 3 库编写玩具 Android 应用程序。该应用程序调用一些远程 API 来获取照片列表,并使用 RecyclerViewPagingDataAdapter.

显示它们

我发现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