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
相关产品推荐
相关产品推荐

