SmartRefreshLayout 下拉刷新和上拉加载更多数据处理

项目中对分页数据加载和刷新是最常见不过的了,运用SmartRefreshLayout控件,改控件是功能比较全面的刷新控件,值得深入学习一下

github地址:https://github.com/scwang90/SmartRefreshLayout

1.首页在lib-base(专门放库的项目中)引入刷新控件代码库:

api 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'  //1.0.5及以前版本的老用户升级需谨慎,API改动过大

2.其次在布局文件xml中写布局:

<com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/srl_deal_flow"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:srlEnableScrollContentWhenLoaded="true"
        app:srlEnableFooterFollowWhenLoadFinished="true">

 // RecyclerView 控件

</com.scwang.smartrefresh.layout.SmartRefreshLayout>

3.初始化控件之类就不多说了,

4.下拉刷新和上拉加载更多方法调用网络数据:

private int page = 1; 
// 下面10为offset 偏移量
mSrl_dealFlow.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                mSrl_dealFlow.getLayout().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        page = 1;
                        // 四个参数
                        getRechargeData(DateUtil.getYear(),DateUtil.getMonth(),page,10);
                        mSrl_dealFlow.finishRefresh();
                        mSrl_dealFlow.resetNoMoreData();//setNoMoreData(false);
                    }
                },2000);

            }
        });
        mSrl_dealFlow.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(@NonNull final RefreshLayout refreshLayout) {
                mSrl_dealFlow.getLayout().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (commonDealFlowAdapter.getCount() > 30) {
                            ToastUtil.show(getActivity(),"数据全部加载完毕");
                            refreshLayout.finishLoadMoreWithNoMoreData();//将不会再次触发加载更多事件
                        } else {
                            page++;
                            // 两个参数
                            getRechargeData(page,10);
                            refreshLayout.finishLoadMore();
                        }
                    }
                },2000);
            }
        });

5.在初始化List集合的时候,需要在初始化数据的时候就要进行初始化:

 @Override
    public void initData(Bundle savedInstanceState) {
        mRechargeList = ObjectUtil.newArrayList();
        getRechargeData(1,10);
    }

6.在处理服务端返回过来的数据,需要注意在page值为1的时候,也就是第一页的时候,需要将List集合中的数据进行清空,这个时候也就是下来刷新数据,

private void processRechargeData(String str) {
        if(page == 1){
            mRechargeList.clear();
        }
发布了57 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/java9832/article/details/104829965