【问题标题】:what's the best practice of app pagination in RxJava way?以 RxJava 方式进行应用分页的最佳实践是什么?
【发布时间】:2018-05-04 09:40:04
【问题描述】:

假设我们有一个分页 API Single<List<Foo>> getFoos(pageToken: String?) 并使用 RxBinding 来观察 RecyclerView 滚动事件 RxRecyclerView.scrollEvents(recyclerView)。 据我所知,是实现一个将滚动事件转换为 pageToken 的运算符。这样,可流动的滚动事件取决于 API 的结果。我应该以递归方式实现它还是有什么优雅的方式?

【问题讨论】:

  • 你能提供一些示例代码,或者至少是伪代码吗?这样我们就可以回答了。就个人而言,我想不出一种递归方式来做到这一点。

标签: android pagination rx-java2


【解决方案1】:

如果你想在 rxJava 中使用分页,则没有必要使用 rxBinding 您可以自己制作 rxjava 分页:

 private Observable<Integer> getScrollObservable(RecyclerView recyclerView, int limit, int emptyListCount) {
        return Observable.create(subscriber -> {
            final RecyclerView.OnScrollListener sl = new RecyclerView.OnScrollListener() {
                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    if (!subscriber.isUnsubscribed()) {
                        int position = getLastVisibleItemPosition(recyclerView);
                        int updatePosition = recyclerView.getAdapter().getItemCount() - 1 - (limit / 2);
                        if (position >= updatePosition) {
                            int offset = emptyListCountPlusToOffset ? recyclerView.getAdapter().getItemCount() : recyclerView.getAdapter().getItemCount() - emptyListCount;
                            subscriber.onNext(offset);
                        }
                    }
                }
            };
            recyclerView.addOnScrollListener(sl);
            subscriber.add(Subscriptions.create(() -> recyclerView.removeOnScrollListener(sl)));
            if (recyclerView.getAdapter().getItemCount() == emptyListCount) {
                int offset = emptyListCountPlusToOffset ? recyclerView.getAdapter().getItemCount() : recyclerView.getAdapter().getItemCount() - emptyListCount;
                subscriber.onNext(offset);
            }
        });
    }

查看全文example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2014-09-29
    • 2016-05-18
    • 2013-07-12
    相关资源
    最近更新 更多