recyclerview的数据刷新(下拉刷新和自动加载更多)以及添加提示语(例如:“数据已加载完毕”)

来源:互联网 发布:女生运动鞋淘宝 编辑:程序博客网 时间:2024/06/05 17:52

下拉加载更多的核心是SwipeRefreshLayout搭配Recyclerview进行使用。布局为

<android.support.v4.widget.SwipeRefreshLayout    android:layout_width="match_parent"    android:layout_height="match_parent">    <android.support.v7.widget.RecyclerView        android:layout_width="match_parent"        android:layout_height="match_parent">            </android.support.v7.widget.RecyclerView></android.support.v4.widget.SwipeRefreshLayout>
因为recyclerview自带的是没有刷新功能的。

下拉刷新我们可以调用SwipeRefreshLayout的setOnRefreshListener()来完成。

在回调的方法中完成自己想要的逻辑。一般都是将page设置为1,然后initData()。这个initData()就是进行数据请求的方法。

swipelayout_command.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {    @Override    public void onRefresh() {        page=1;        recyclerview.setNoMore(false);//可以加载更多        getRequestData();//请求数据请求        swipelayout_command.setRefreshing(false);//刷新图标消失    }});
这里,我推荐一个在github上找到的一个自定义的recyclerview控件,因为其功能比较完善。附上链接:https://github.com/jdsjlzx/LRecyclerView

这个自定义控件包含两种recyclerview,一个LRecyclerview,一个LuRecyclerview。相对而言,LRecyclerview功能更加完善。

我这里用的是LuRecyclerview,搭配swipeRefreshLayout。

<android.support.v4.widget.SwipeRefreshLayout    android:layout_below="@id/command_toolbar"    android:id="@+id/swipe_command"    android:layout_width="match_parent"    android:layout_height="match_parent">    <com.github.jdsjlzx.recyclerview.LuRecyclerView        android:id="@+id/recyclerview_command"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:paddingBottom="50dp">    </com.github.jdsjlzx.recyclerview.LuRecyclerView></android.support.v4.widget.SwipeRefreshLayout>

上拉刷新作者已经写好了API,我们可以直接调用——

recyclerview.setOnLoadMoreListener(new OnLoadMoreListener() {    @Override    public void onLoadMore() {        /**         * 判断现在加载的数据条数是否等于服务器数据总条数         * 如果小于,则page1,加载新一页的数据         * 如果等于,设置不再加载更多。         */        if (mCurrentCounter < TOTAL_COUNTER) {            Log.i("sub", "onLoadMore: click");            Log.i("curr", "onResponse:  if "+mCurrentCounter);            page++;//page+1,也就是下一页            Log.i("sub", "onCreateView: page"+page);            getRequestData();        } else {            //the end            recyclerview.setNoMore(true);//不再加载更多        }    }});

  回调方法里面的逻辑:这里我设置了几个常量

/**服务器端一共多少条数据*/private static final int TOTAL_COUNTER = 10000;/**每一页展示多少条数据*/private static final int REQUEST_COUNT = 10;/**已经获取到多少条数据了*/private static int mCurrentCounter = 0;
设置这几个常量的作用有两个,一个是确定数据加载完成,显示提示语。另一个是数据加载未完成,加载下一页(这个逻辑放在自动加载更多的回调方法里面)。

这几个常量都可以随自己的需求进行定义。

在自动加载更多的监听事件后设置提示语——

//设置底部加载文字提示recyclerview.setFooterViewHint("拼命加载中","————  已经全部为你呈现了  ————","网络不给力啊,点击再试一次吧");
接下来看看请求数据的方法的逻辑——

@Overridepublic void onResponse(Call<CommandDetail> call, Response<CommandDetail> response) {    if (page==1){        list.removeAll(list);    }    List<CommandDetail.DataBean> list_count = response.body().getData();    if (REQUEST_COUNT>list_count.size()) {        Log.i("curr", "onResponse: count_list size 2"+list_count.size());        recyclerview.setNoMore(true);    }    list.addAll(response.body().getData());    recyclerview.refreshComplete(REQUEST_COUNT);//完成刷新    //先清空数据,再加载,避免数据重复的问题    adapter.notifyDataSetChanged();    mCurrentCounter+=list_count.size();}

这里我先进行判断,page是否为1,如果为1,那么先请求数据集合,这么做的目的是为了下拉刷新的时候数据不会重复出现。

然后判断自定义显示的数据条数是否大于加载得到的数据集合的大小,如果是,那么说明数据已经加载完毕,设置setNoMore()为true,这样就会显示提示语。

再将数据添加到集合中;完成刷新;刷新适配器。最后将自定义的当前显示的数据条数的值进行累加。

然后就是绑定适配器。

LinearLayoutManager manager = new LinearLayoutManager(this);recyclerview.setLayoutManager(manager);SongCommandAdapter commandAdapter = new SongCommandAdapter(list, this);adapter = new LuRecyclerViewAdapter(commandAdapter);recyclerview.setAdapter(adapter);
这里可以看到,我是将自定义的recyclerviewAdaper作为参数传进了需要的LuRecyclerviewAdapter()中。

这里主要说明的是自定义的适配器完全是按照正常的recyclerviewadaper的逻辑去写。

好了,就这样。关于LuRecyclerview以及LRecyclerview的大家可以点进链接看看。有很多内容,可以添加头布局尾布局,添加分割线等等,自己去了解。这篇文章主要就是说一下关于数据请求的相关逻辑判断。希望你们能看懂。。。。。。。


阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 二年级孩子考试总是粗心怎么办 二年级孩子总是粗心怎么办 小学一年级孩子抄别人作业怎么办 被老师发现抄答案怎么办 考试抄答案被老师发现怎么办 孩子撒谎不写作业怎么办 小学生做题容易马虎出错怎么办 小学生做题老是马虎怎么办 小学生做题马虎不认真怎么办 会做的题总做错怎么办 孩子数学做题粗心怎么办 孩子成绩考差了怎么办 孩子静不下心学习怎么办 孩子考试时总是粗心马虎怎么办 小学二年级学生厌学怎么办 三岁宝宝肚脐痛怎么办 做题速度太慢怎么办 孩子做题不动脑不会转弯怎么办? 孩子做题总是马虎怎么办 孩子做题总是眼高手低怎么办 小孩说幼儿园老师不喜欢他怎么办 初中学生了不喜欢读书怎么办 小孩吐怎么办给揉哪里 8岁了不爱写字怎么办呢 8岁了不会写字怎么办呢 高考做题时犯各种粗心错误怎么办 孩子做题不认真读题怎么办 孩子不爱学习怎么办有什么办法 小孩字写的不好怎么办 孩子的字写得丑怎么办 一年级孩子生字默不出来怎么办 5岁宝宝不爱写字怎么办 三年级小孩不自觉做作业怎么办 一年级的孩子不爱写字怎么办 一年级孩子不爱写作业怎么办 一年级的小孩不爱写字怎么办 小孩儿写字做作业磨蹭怎么办 孩子不学习成绩差不写作业怎么办 儿童4岁不会写字怎么办 小孩读中班还不会写字怎么办 幼儿园中班孩子不写字怎么办