Baserecyclerviewadapterhelper: 请问加载更多如何多次正常调用

Created on 1 Jul 2016  ·  8Comments  ·  Source: CymChad/BaseRecyclerViewAdapterHelper

mQuickAdapter.openLoadMore(PAGE_SIZE, true);
看你的代码中有这一句。而且不加这一句,加载更多就无效。直接设置mQuickAdapter.openLoadMore( true);也无效。
现在的问题是,我设置了mQuickAdapter.openLoadMore(10, true); 然后,第一次可以加载更多,然后第二次上拉的时候,就一直转圈圈,不消失,也没有更新数据了。
`

adapter.openLoadMore(10, true);
        adapter.setOnLoadMoreListener(() -> {
            LogUtils.e("上拉加载更多 ");
            //上拉加载更多
            Observable.timer(2, TimeUnit.SECONDS)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(time -> {
                        LogUtils.e("上来加载数据了啦啦啦啦啦啦啦啦啦啦啦");
                        final List data = adapter.getData();
                        final List<Bean> newData = RvDataUtils.updateData(data.size(), 10); // 这个方法每次返回的数据的长度:list.size()==10;
                        final boolean b = data.addAll(data.size(), newData);
                        if (b) {
                            adapter.setNewData(data);
                        } else {
                            throw new RuntimeException("data has not changed");
                        }
                    }, onError);

`
通过log发现,第二次上拉刷新的时候,根本就没有输出上面的两个log。求解

Most helpful comment

我也是看不明白这个加载更多是什么鬼

All 8 comments

另外,我发现,如果在adapter.setOnLoadMoreListener(() -> { // do nothing}); ,中,不做任何的操作,结果就一直显示"正在加载中..."不消失,有什么方法类似SwipeRefreshLayout#setRefreshing(false);来表示刷新结束,也好收起"正在加载中..."的View这样子的。求指导

还是没有明白你的Page_Szie到底是要传什么。是增加的数据的长度,还是更新后的数据长度,还是什么呢?真的好困惑啊。现在,我将加载更多的代码改成:
`

//########## load more
        final List data = adapter.getData();
        final List<Bean> newData = RvDataUtils.updateData(data.size(), 10); // 这个方法每次返回的数据的长度:list.size()==10;
        final int pageSize = data.size() + newData.size();
        LogUtils.e("page size = == " + pageSize);
        adapter.openLoadMore(pageSize, true);
        adapter.setOnLoadMoreListener(() -> {
            LogUtils.e("上拉加载更多 ");
            SuperToast.cancelAllSuperToasts();
            SuperToast.create(getApplicationContext(), "上拉加载更多", SuperToast.Duration.MEDIUM).show();
            //上拉加载更多
            Observable.timer(2, TimeUnit.SECONDS)
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(time -> {
                        LogUtils.e("上来加载数据了啦啦啦啦啦啦啦啦啦啦啦");
                        final boolean b = data.addAll(data.size(), newData);
                        if (b) {
                            adapter.setNewData(data);
                        } else {
                            throw new RuntimeException("data has not changed");
                        }
                    }, onError);

        });`

改成这样之后,上拉直接不刷新了。

我的想法是,如果是一个通用的库,应该有更简单的使用方式。

我知道了,你的page_size是表示,增加的数据的长度的。然后需要调用adapter.notifyDataChangedAfterLoadMore(newData, true);表示加载结束。但是,你应该在文档中写清楚啊,不如大家怎么知道怎么用,对不对?

我也是看不明白这个加载更多是什么鬼

嗯,如我上面所说,加载更多需要需要调用adapter.openLoadMore(pageSize, true);先。其中pageSize == 本次加载增加的数据长度。并且,在加载完成的时候,需要调用adapter.notifyDataChangedAfterLoadMore(newData, true);。这样就可以愉快的加载更多了。

加载更多到底是怎么触发的?滑动到底部自己触发?

是的,就是在滑动到底部的时候触发的,不过前提是,你调用了

adapter.openLoadMore(10, true);
 adapter.setOnLoadMoreListener(listener);

这两句

正解

Was this page helpful?
0 / 5 - 0 ratings