Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public final class ScrollObservable {
public static Observable<Integer> from(final RecyclerView rv) {
return Observable.create(subscriber -> {
final RecyclerView.OnScrollListener sl = new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (!subscriber.isUnsubscribed()) {
final int position = getLastVisibleItemPosition();
final int limit = getLimit();
final int updatePosition = rv.getAdapter().getItemCount() - 1 - (limit / 2);
if (position >= updatePosition) {
subscriber.onNext(rv.getAdapter().getItemCount());
}
}
}
};
rv.addOnScrollListener(sl);
subscriber.add(Subscriptions.create(() -> rv.removeOnScrollListener(sl)));
});
}
}
final Observable<Integer> offsetRequestObs = ScrollObservable.from(recyclerView).distinctUntilChanged();
offsetRequestObs.switchMap(offset -> getLoadingObservable(offset))
.subscribeOn(Schedulers.from(BackgroundExecutor.getSafeBackgroundExecutor()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(loadNewItemsSubscriber);
Пагинация списков в Android с RxJava. Часть I