Ошибка сети подкачки библиотеки при загрузке данных - PullRequest
0 голосов
/ 11 сентября 2018

Я работаю с библиотекой подкачки и борюсь с LiveData PagedList.Мой нумерованный список работает правильно, но есть сценарий, где это не так.У меня есть RecyclerView + SwipeRefreshLayout, когда данные уже показаны в списке, и я отключаю сеть, и я пытаюсь провести пальцем, чтобы обновить все данные в списке удаляется.Как я могу избежать этого?

public class InterestsViewModel extends ViewModel {

private LiveData<PagedList<InterestItem>> mListInterests;
private CompositeDisposable mCompositeDisposable = new CompositeDisposable();

private static final int PAGE_SIZE = 15;

private GroupsInterestsDataSourceFactory mGroupsInterestsDataSourceFactory;

public InterestsViewModel() {
    Executor executor = Executors.newFixedThreadPool(5);

    mGroupsInterestsDataSourceFactory = new GroupsInterestsDataSourceFactory(mCompositeDisposable);
    PagedList.Config config = new PagedList.Config.Builder()
            .setPageSize(PAGE_SIZE)
            .setInitialLoadSizeHint(PAGE_SIZE)
            .setEnablePlaceholders(true)
            .build();

    mListInterests = new LivePagedListBuilder<>(mGroupsInterestsDataSourceFactory,config)
            .setFetchExecutor(executor)
            .build();
}

public void retry() {
    mGroupsInterestsDataSourceFactory.getGroupsInterestsDataSource().getValue().retry();
}

public void refresh() {
    mGroupsInterestsDataSourceFactory.getGroupsInterestsDataSource().getValue().invalidate();
}

public LiveData<NetworkState> getNetworkState() {
    return Transformations.switchMap(mGroupsInterestsDataSourceFactory.getGroupsInterestsDataSource(), new Function<GroupsInterestsDataSource, LiveData<NetworkState>>() {
        @Override
        public LiveData<NetworkState> apply(GroupsInterestsDataSource input) {
            return input.getNetworkState();
        }
    });
}

public LiveData<NetworkState> getRefreshState() {
    return Transformations.switchMap(mGroupsInterestsDataSourceFactory.getGroupsInterestsDataSource(), new Function<GroupsInterestsDataSource, LiveData<NetworkState>>() {
        @Override
        public LiveData<NetworkState> apply(GroupsInterestsDataSource input) {
            return input.getInitialLoad();
        }
    });
}

public LiveData<PagedList<InterestItem>> getListInterests() {
    return mListInterests;
}

@Override
protected void onCleared() {
    super.onCleared();
    mCompositeDisposable.dispose();
}
}

Из фрагмента:

private void initAdapter() {
    mAdapter = new InterestsAdapter(this);
    mListInterest.setAdapter(mAdapter);

    mInterestsViewModel.getListInterests().observe(this, new Observer<PagedList<InterestItem>>() {
        @Override
        public void onChanged(@Nullable PagedList<InterestItem> interestItems) {
            mAdapter.submitList(interestItems);
        }
    });
    mInterestsViewModel.getNetworkState().observe(this, new Observer<NetworkState>() {
        @Override
        public void onChanged(@Nullable NetworkState networkState) {
            mAdapter.setNetworkState(networkState);
        }
    });
    mInterestsViewModel.getRefreshState().observe(this, new Observer<NetworkState>() {
        @Override
        public void onChanged(@Nullable NetworkState networkState) {
            if (networkState != null) {
                if (mAdapter.getCurrentList() != null) {
                    if (networkState.getStatus()
                            == NetworkState.LOADED.getStatus() || networkState.getStatus()
                            == Status.FAILED)
                        mIsRefreshing = false;

                    if (mAdapter.getCurrentList().size() > 0) {
                        mSwipeRLInterests.setRefreshing(networkState.getStatus()
                                == NetworkState.LOADING.getStatus());
                    }
                }
                setInitialLoadingState(networkState);
            }
        }
    });
}
@Override
public void retry() {
    mInterestsViewModel.retry();
}

private void initSwipeToRefresh() {
    mSwipeRLInterests.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            mIsRefreshing = true;
            mInterestsViewModel.refresh();
        }
    });
    mSwipeRLInterests.setColorSchemeColors(getResources().getColor(R.color.colorPrimaryDark)
            , getResources().getColor(R.color.colorPrimary)
            , getResources().getColor(R.color.colorPrimaryDark));

}
...