3秒钟不懂你砍我:RecyclerView下拉刷新和上拉加载更多(开源中国List业务流程全解析)
来源:互联网 发布:手机淘宝如何申请贷款 编辑:程序博客网 时间:2024/05/17 11:05
这里以开源中国开源资讯页面为例子。
这个页面数据的url:http://www.oschina.net/action/apiv2/news?pageToken= 是这样的
json数据的结构:
NewsBean返回成功与否的code和msg。
ResultBean返回的是上一页,下一页的数据,以及item集合
ItemBean返回的是RecyclerView每一个item的数据,包含了很多个item,这些item都存储在resultbean中的List<item>中,
所以取得item的方式:List<NewsBean.ResultBean.ItemBean> list = NewsBean.getResult().getItems();(NewsBean是你取得的json转化而来的Bean)
用插件GsonFormat把服务器的Gson格式转化为NewsBean格式
生成这样一个Bean,为了简短,我删去了getter和setter
package com.example.oschina6.bean;import org.itheima.recycler.bean.BasePageBean;import java.util.List;public class NewsBean extends BasePageBean<NewsBean.ResultBean.ItemsBean>{ private int code; private String message; private ResultBean result; private String time; public static class ResultBean { private String nextPageToken; private String prevPageToken; private int requestCount; private int responseCount; private int totalResults; private List<ItemsBean> items; public static class ItemsBean { private String author; private String body; private int commentCount; private String href; private int id; private String pubDate; private boolean recommend; private String title; private int type; private int viewCount; } }}数据的结构是这样的
NewsBean,返回的是Code和Msg,提示请求的成功与否。
ResultBean,返回的是NextPageToken,PrePageToken,就是重头戏历史和最新的数据。
ItemBean,返回的是每个Item的数据信息,内容,id,作者名,评论数。json中这么多的item,都存储在了ResultBean中的List中。
private List<ItemsBean> items;
(接下来就是关于如何把数据加到List中去,懂的可以跳过。
newsBean.getResult().getItems()
这个就是取得了List<NewsBean.ResultBean.ItemBean>,之后就可以把数据加到RecyclerView中去了。)下拉刷新
其实就是把http://www.oschina.net/action/apiv2/news?pageToken=这个url重新请求一遍,比对一下List<NewsBean.ResultBean.ItemBean>最新数据和当前数据size()的差别。做出判断,如果最新数据更长,就把最新数据的头部新增的几项赋给老的。下面代码就是上篇文章下拉刷新的逻辑。
Request(newsUrl, "get", null, null, new RequestInterface() { @Override public void SuccessResponse(String s) { NewsBean newNewsBean = new Gson().fromJson(s, NewsBean.class); List<NewsBean.ResultBean.ItemsBean> newNewsList = newNewsBean.getItemDatas(); int oldSize = newNewsBean.getItemDatas().size(); if (oldSize != newsBean.getItemDatas().size()) { newsBean = newNewsBean; int newSize = oldSize - newsBean.getItemDatas().size(); for (int i = 0; i < newSize; i++) { newsList.add(0, newNewsList.get(newSize - i)); } commonAdapter.notifyDataSetChanged(); } mSwipeRefreshLayout.setRefreshing(false);//这个是关闭加载的progressbar }});
上拉加载更多,再看一下url http://www.oschina.net/action/apiv2/news?pageToken=,是可以输入的,所以只需要找到昨天的pageToken就好了,在bean的这个地方
public static class ResultBean { private String nextPageToken;//这个就是昨天的分页 private String prevPageToken; private int requestCount; private int responseCount; private int totalResults; private List<ItemsBean> items;这个nextPageToken就是昨天的东西,所以你需要输入的url是最新页面给的nextPageToken,加在尾部,就可以得到昨天的资讯了
先进入http://www.oschina.net/action/apiv2/news?pageToken=这个网站去找nextpagetoken
发现是DBA816934CD0AA59,所以昨天的url是http://www.oschina.net/action/apiv2/news?pageToken=DBA816934CD0AA59,进入
通过手机app拉到最下面查看发现果然是昨天的资讯。所以明白了,在上拉加载更多这个过程中,是先找到这个分页的nextpagetoken,加到url最后面访问昨天的json,再在昨天的json中找到nextpagetoken,找到前天的json,以此类推。
String nextPageNewsUrl = newsUrl + nextPageToken;Request(nextPageNewsUrl, "get", null, null, new RequestInterface() { @Override public void SuccessResponse(String s) { NewsBean newNewsBean = new Gson().fromJson(s, NewsBean.class); nextPageToken = newNewsBean.getResult().getNextPageToken(); newsList.addAll(newNewsBean.getItemDatas()); commonAdapter.notifyDataSetChanged();//提醒adapter数据变化了 }});
这样一来就成功实现了,而且非常的流畅,但是上拉加载更多没有任何的UI特效。
(如果想美化一下UI,如最上面开源中国那个页面所示:
1.给RecyclerView添加头Header和尾Footer(需要在adapter里修改)
2.添加RecyclerView的分割线(其实直接在item里加条View线就好)
可以看看这个人的文章:http://www.jianshu.com/p/991062d964cf)
(怎么解析这个复杂的json为Bean?需要Gson的jar包。导入成功后,只需要
NewsBean newNewsBean = new Gson().fromJson(s, NewsBean.class);这样就可以成功解析)
这样一来,你的这块业务流程就透彻了,即使现在叫你去上班,让你去搞出这个也是轻轻松松了。
- 3秒钟不懂你砍我:RecyclerView下拉刷新和上拉加载更多(开源中国List业务流程全解析)
- 3秒钟不懂你砍我:RecyclerView下拉刷新和上拉加载更多
- RecyclerView 下拉刷新上拉加载更多
- RecyclerView 下拉刷新上拉加载更多
- RecyclerView 下拉刷新、上拉加载更多
- RecyclerView 下拉刷新上拉加载更多
- RecyclerView上拉刷新,下拉加载更多
- RecyclerView 下拉刷新上拉加载更多
- RecyclerView上拉加载更多,下拉刷新
- RecyclerView系列之(3):添加下拉刷新和上拉加载更多
- RecyclerView系列之(3):添加下拉刷新和上拉加载更多
- RecyclerView系列之(3):添加下拉刷新和上拉加载更多
- RecyclerView实现下拉刷新和上拉加载更多
- RecyclerView下拉刷新和上拉加载更多
- SwipeRefreshLayout + RecyclerView 实现 上拉刷新 和 下拉加载更多
- RecyclerView 添加下拉刷新和上拉加载更多
- RecyclerView实现下拉刷新和上拉加载更多
- RecyclerView添加下拉刷新和上拉加载更多
- 北美IDE无人机展:FLYPRO is helping people
- 手机管家公益版发布: 清理手机垃圾就能做公益
- numpy数组扩展效率问题
- 51nod 1264 线段相交(几何)
- 阿里JAVA规约插件IDEA实操
- 3秒钟不懂你砍我:RecyclerView下拉刷新和上拉加载更多(开源中国List业务流程全解析)
- 爱客科技王付义:我眼中的VR一体机和VR 2015
- Google超有趣 AI 小实验合集
- C++容器--- 顺序性容器<deque>
- 策略模式
- 银行发短信要冻结资金?手机管家提醒当心诈骗
- 我们所有的向往,是发掘更好用的应用和手机
- 中兴发布AXON天机MAX 以高端服务强化高端市场
- SNH48与手机管家合作来电秀 一大波圣诞礼物来袭