RecyclerView之BaseRecyclerViewAdapterHelper(三)

    前面写了用法,点击事件,动画等等,这个加入了刷新加载功能。刷新功能我用的谷歌的一个控件SwipeRefreshLayout实现的。XML布局如下:
<android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swiperefreshlayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scrollbars="vertical"
        >
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1" />
    </android.support.v4.widget.SwipeRefreshLayout>
    Activity代码如下:
private void initRefresh() {
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                if(!swipeRefreshLayout.isRefreshing()){//是否正在刷新
                    ShowToast(context,"正在刷新,请稍后...");
                    return;
                }
                mData = new ArrayList<ShuJu>();
                for(int i = 0;i<40;i++){
                    ShuJu mShuJu = new ShuJu(i+"");
                    mData.add(mShuJu);
                }
                mRecyclerView.setAdapter(adapter);
                swipeRefreshLayout.setRefreshing(false);
                ShowToast(context,"刷新完成");
            }
        });
    }
    这里先有一个判断是否正在刷新,当用户网不好的时候,有的用户会一直重复刷新的手势,然后会一直触发刷新方法,这是我们不希望看到的,所以,就先判断一下是否正处于刷新状态,如果,处于刷新状态就不用触发网络请求方法。后面有一个setRefreshing(false)。这个是提示隐藏刷新动画。
    再就是加载更多方法。代码如下:
private void initOnloaderMore() {
        adapter.setEnableLoadMore(true);//开启自动加载
        adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {

            @Override
            public void onLoadMoreRequested() {
                if(currentPage>=totlePage){
                    ShowToast(context,"没有更多了");
                    adapter.loadMoreEnd();
                }else{
                    if(onSuccess){  //获取到数据了
                        currentPage++;
                        ShowToast(context,"加载成功");
                        List<ShuJu> mData1 = new ArrayList<ShuJu>();
                        for(int i = 40;i<45;i++){
                            ShuJu mShuJu = new ShuJu(i+"");
                            mData1.add(mShuJu);
                        }
                        adapter.addData(mData1);
                        adapter.notifyDataSetChanged();
                        adapter.loadMoreComplete();
                    }else{
                        onSuccess = true;
                        currentPage = 0;
                        ShowToast(context,"加载失败");
                        adapter.loadMoreFail();
                    }
                }
            }
        },mRecyclerView);
    }
    这里是自动加载,最后一个item的时候会自动加载。这里有三个方法
    数据全部加载完之后调用:adapter.loadMoreEnd();
    每次网络请求成功之后调用:adapter.loadMoreComplete();
    网络请求失败之后调用:adapter.loadMoreFail();
    要说的就这么多,至于刷新,加载逻辑自己实现。

项目链接


版权声明:本文为qq_27634797原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。