You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Paging库时如何在DataSource初始加载阶段从ViewModel传递参数

实现参数传递的方案

你不需要手动调用loadInitial方法,该方法由Paging库内部自动触发,参数传递可以通过构造函数注入的方式实现,步骤如下:

  1. 给自定义DataSource添加构造参数
    在你的DataSource子类中增加构造参数,接收需要的用户名、年龄等信息,之后就可以在loadInitial、loadBefore、loadAfter等加载方法里直接使用这些参数调用WebService接口
class CustomDataSource(
    private val userName: String,
    private val userAge: Int
) : PageKeyedDataSource<String, RedditPost>() {
    override fun loadInitial(params: LoadInitialParams<String>, callback: LoadInitialCallback<String, RedditPost>) {
        // 此处直接使用userName、userAge发起网络请求即可
    }
    // 其余loadBefore、loadAfter方法实现省略
}
  1. 自定义DataSource.Factory接收参数
    Paging库通过Factory创建DataSource实例,你需要自定义Factory类,将参数透传给DataSource的构造函数
class CustomDataSourceFactory(
    private val userName: String,
    private val userAge: Int
) : DataSource.Factory<String, RedditPost>() {
    override fun create(): DataSource<String, RedditPost> {
        return CustomDataSource(userName, userAge)
    }
}
  1. ViewModel中传入参数构建Paging数据源
    在ViewModel初始化Pager时,将存储的User对象的属性传入Factory即可:
// ViewModel中示例代码
val pagingData = Pager(
    config = PagingConfig(
        pageSize = 20,
        enablePlaceholders = false
    )
) {
    CustomDataSourceFactory(user.name, user.age).create()
}.flow.cachedIn(viewModelScope)

如果后续需要动态修改请求参数,只需要把参数包裹为可观察对象,配合flatMapLatest切换数据源即可,修改参数后会自动重建DataSource重新加载数据。

内容的提问来源于stack exchange,提问作者The_Martian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:09:04