goole官方下拉刷新 SwipeRefreshLayout
2016-11-25 14:34
267 查看
现在基本每一款App都要必备下拉刷新功能,而且很多人都养成了手指下滑刷新这一动作了,android也有很多第三方的下拉刷新框架。使用第三方的是很方便但是有很多时候都会出现Jar包冲突,Google推出了一款自己的刷新控件就是SwipeRefreshLayout,也很好用,但是它只有下拉刷新的功能,没有加载更多,需要自己实现加载更多方法,网上同样有很多方法,我自己也写了一个方法,自认为很简单,和大家分享一下。先说一下实现思路吧:一般下拉刷新都是列表,有列表就会和listview,recycleview 等等,我们可以监听列表状态,当滚动到达列表最后一条时,我们就可以联网请求下一页数据了
伪代码如下:
此文省略第一次正常联网,下面是加载更多时的二次联网的相关代码
listview监听滚动到最后一条
//联网并解析数据
private void processData2(String response) {
/**
* 添加集合方法,刷新时要用到
*/
public void setData(List<>item){
this.data=item;
}
}
//找到刷新控件
refresh = (SwipeRefreshLayout) findViewById(R.id.sports_refresh);
public void onRefresh() {
if (list!= 0) {
list.clear();//一定要在重新联网请求时先clear
pageNum=1;
initData();
}
onRefreshComplete();
“`
哎,代码贴的好乱呀,希望各位看客能看懂。其实我想看了文字应该就已经明白差不多了,最重要的就是adapter里面的三个方法!!!
伪代码如下:
此文省略第一次正常联网,下面是加载更多时的二次联网的相关代码
listview监听滚动到最后一条
listview.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (view.getLastVisiblePosition() == view.getCount() - 1) { //加载更多功能的代码 pageNum++; if (nextPageNo ) {//是否还有下一页 loadMore(pageNum + ""); // } else { Toast.makeText(TaxSportsActivity.this, "没有更多了", Toast.LENGTH_SHORT).show(); } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } });
//联网并解析数据
private void loadMore(String pageNum) { User user = new User(); user.setToken(VIPApplication.getDeviceId()); user.setPageNum(pageNum); OkHttpUtils .postString() .url(Constant.SportsUrl) .content(new Gson().toJson(user)) .mediaType(MediaType.parse("application/json; charset=utf-8")) .build() .execute(new StringCallback() { @Override public void onError(Call call, Exception e) { } @Override public void onResponse(String response) { processData2(response); } }); }
private void processData2(String response) {
Gson gson = new Gson(); SportsListModel sportsListModel = gson.fromJson(response, SportsListModel.class); sysNews1 = sportsListModel.getSysNews(); boolean nextPageNo2 = sportsListModel.isNextPageNo(); nextPageNo = nextPageNo2; //这几行代码是核心 **if (adapter == null) { adapter = new adapter(this, list1); listview.setAdapter(adapter); } else { adapter.addData(adapter.getDataCount(), list1); adapter.notifyDataSetChanged(); } }**
//下面是adapter里的代码,同样很重要 adapter中其他方法省略掉,因为那都是必有的,我不写相信大家也知道要有,下面三个方法很重要 第一个方法是刷新时就会用到的 第二个方法是在加载更多时,在原有的集合里把新请求到的集合加进去 第三个方法是获得总的数量,保证每次加载的新数据都是在原有集合基础上加进去的,否则就会出现,只有加载更多时请求到的数据,以前的数据没有了,显然不是我们想看到的
/**
* 添加集合方法,刷新时要用到
*/
public void setData(List<>item){
this.data=item;
}
/** * 添加数据 * * @param position * @param item */ public void addData(int position, List<>item) { if (item != null && item.size() > 0) { datas.addAll(position, item); notifyDataSetChanged(); } } /** * 得到数据的总条数 * * @return */ public int getDataCount() { return datas.size(); }
}
下面贴上刷新时的代码
//找到刷新控件
refresh = (SwipeRefreshLayout) findViewById(R.id.sports_refresh);
//设置刷新时转圈的颜色 sports_refresh.setColorSchemeResources(R.color.colorAccent); //刷新监听 sports_refresh.setOnRefreshListener(this);
public void onRefresh() {
if (list!= 0) {
list.clear();//一定要在重新联网请求时先clear
pageNum=1;
initData();
}
onRefreshComplete();
} private void onRefreshComplete() { sports_refresh.setRefreshing(false); Toast.makeText(this, "刷新完成", Toast.LENGTH_SHORT).show(); }
“`
哎,代码贴的好乱呀,希望各位看客能看懂。其实我想看了文字应该就已经明白差不多了,最重要的就是adapter里面的三个方法!!!
相关文章推荐
- SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新
- 你还在用开源控件的下拉刷新吗?你out了,试一试官方的下拉刷新SwipeRefreshLayout
- 谷歌官方控件SwipeRefreshLayout实现下拉刷新
- Android开发丶谷歌官方刷新控件SwipeRefreshLayout下拉刷新的实现和上拉加载的拓展
- Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新
- android SwipeRefreshLayout google官方下拉刷新控件
- Goole官方网络框架-Volley的使用解析Json以及加载网络图片方法
- Android官方下拉刷新控件SwipeRefreshLayout使用详解
- Android SwipeRefreshLayout官方下拉刷新控件介绍(与知乎Android客户端下拉刷新一样!!)
- Android SwipeRefreshLayout 官方下拉刷新控件的使用
- Google官方下拉刷新组件---SwipeRefreshLayout
- Android 官方下拉刷新 SwipeRefreshLayout
- goole官方UI设计规范——Material Design
- Android SwipeRefreshLayout谷歌官方下拉刷新加载WebView网页介绍
- [置顶] Android v4包中的 SwipeRefreshLayout 官方的下拉刷新组件
- 谷歌官方组件SwipeRefreshLayout实现下拉刷新(简洁)
- SwipeRefreshLayout官方推荐下拉刷新
- 你还在用开源控件的下拉刷新吗?你out了,试一试官方的下拉刷新SwipeRefreshLayout
- Google官方下拉刷新组件---SwipeRefreshLayout
- [Sencha ExtJS] ExtJS 6.2.1 Modern 的 List 下拉刷新(Pullrefresh)插件,官方已经修复