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

Android多数据源下Paging库DataSource.Factory实现方案问询

为每个数据源配置独立DataSourceFactory的解决方案

问题背景

我手头的应用有多个数据源,但之前一直让所有数据源共用同一个DataSourceFactory,现在需要给每个数据源配置独立的工厂实例。而且应用里有不少带RecyclerView的视图,对应多个自定义数据源,我纠结到底是要为每个数据源单独实现DataSource.Factory,还是有更通用的处理方案。

已验证的可行方案

后来我找到了适配自身场景的解决方案——不再固定复用单一的DataSourceFactory实例,而是在ViewModel的调用方法里按需创建对应的DataSourceFactory对象。这样每个数据源都能拥有独立的工厂实例,完美解决了共用工厂带来的冲突问题。

下面是具体的实现代码示例:

private void initData(String id) {
    executor = Executors.newFixedThreadPool(5);
    // 按需创建对应id的DataSourceFactory实例
    factory = new EvaluationDataSourceFactory(compositeDisposable, api, id);
    networkState = Transformations.switchMap(factory.getDataSource(), source -> {
        Timber.d("network status get");
        return source.getNetworkState();
    });
    PagedList.Config pagedListConfig = (new PagedList.Config.Builder())
            .setEnablePlaceholders(false)
            .setInitialLoadSizeHint(5)
            .setPrefetchDistance(5)
            .setPageSize(5).build();
    error = Transformations.switchMap(factory.getDataSource(), source -> {
        return source.getError();
    });
    assessments = (new LivePagedListBuilder(factory, pagedListConfig)).setFetchExecutor(executor).build();
}

public void getAssessments(String id) {
    initData(id);
}

使用的时候,只需要在Activity或Fragment里调用viewModel.getAssessments(id)即可,传入不同的id就能对应到不同的数据源和独立的DataSourceFactory,这个方案已经验证过是完全可行的。


内容的提问来源于stack exchange,提问作者Annie Aye Myat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:43:05