小编Ann*_*yat的帖子

android 多数据源的分页库DataSource.Factory

我有多个数据源。但只有一个DataSourceFactory。因此,所有来源都共享一个工厂。我需要每个数据源一个 DataSourceFactory。

在我的应用程序中,我有多个 RecyclerViews 视图,因此有多个自定义数据源。那么,您最终是否会为每个数据源创建 DataSource.Factory 的多个实现,还是有更通用的解决方案?

已编辑

我在我的案例中找到了解决方案。在我之前的版本中,我仅对所有数据源使用一个数据源工厂。现在,每当从 ViewModel 调用方法时,我都会创建数据源工厂对象,例如

private void initData(String id) {
    executor = Executors.newFixedThreadPool(5);

    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);
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以从您的活动或片段中调用此方法,例如

viewModel.getAssessments(id);
Run Code Online (Sandbox Code Playgroud)

这对我有用。

android android-paging

5
推荐指数
0
解决办法
1006
查看次数

无法在屏幕旋转时保持RecyclerView位置

我正在加载RecyclerView基于对Retrofit本地SQLite数据库的调用和存储的数据的。

屏幕旋转时,RecyclerView保持重置。此外,当我喜欢电影时(将电影添加到我的本地房间数据库中),在某些情况下,微调器无法与填充的数据对齐RecyclerView。下面是我的代码:

public class MainActivity extends AppCompatActivity {

private RecyclerView mMovieResults;
private MyAdapter mMovieResultsAdapter;
private String query;
private String mBaseURL;
private int lastFirstVisiblePosition;
//TODO: How is someone able to load my API Key if I am storing it


private ArrayList<String> mMovieURLS;
private ArrayList<Movie> mMovies;
private List<Movie> mMovieResultsList;

private static final String SPINNER_SELECTION = "SPINNER_SELECTION";

private boolean mIsFavoriteSelected;

private AppDatabase mDb;

private Spinner mSpinner;

private SharedPreferences mPrefs;
private SharedPreferences.Editor mPrefsEditor;

private …
Run Code Online (Sandbox Code Playgroud)

java android android-recyclerview

2
推荐指数
1
解决办法
502
查看次数