您的位置:首页 > 编程语言 > Go语言

goole官方下拉刷新 SwipeRefreshLayout

2016-11-25 14:34 267 查看
现在基本每一款App都要必备下拉刷新功能,而且很多人都养成了手指下滑刷新这一动作了,android也有很多第三方的下拉刷新框架。使用第三方的是很方便但是有很多时候都会出现Jar包冲突,Google推出了一款自己的刷新控件就是SwipeRefreshLayout,也很好用,但是它只有下拉刷新的功能,没有加载更多,需要自己实现加载更多方法,网上同样有很多方法,我自己也写了一个方法,自认为很简单,和大家分享一下。先说一下实现思路吧:一般下拉刷新都是列表,有列表就会和listview,recycleview 等等,我们可以监听列表状态,当滚动到达列表最后一条时,我们就可以联网请求下一页数据了

伪代码如下:

此文省略第一次正常联网,下面是加载更多时的二次联网的相关代码

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里面的三个方法!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息