五月份还没有更新博客呢,今天写了一个PtrManager,分享一下
/** * Created by Sky on 2017/5/10 0010. * <p> * PtrManager用作更新Ptr中的数据,及对Refresh、LoadMore状态的还原 * 需要传入一个初始化好的adapter * 如果需要onItemClickListener需要提前使用adapter.setOnItemClickListener() * 然后再将adapter作为参数去实例化PtrManager对象 * <p> * 至于Ptr控件的Refresh、LoadMore方法需要在外部去灵活使用,这里不作考虑 * <p> * 拓展使用: * 修改ptr控件类名及对应方法以及Adapter * <p> * 外部调用: * this.pageCurrent = ptrManager.FillPtr(datas,this.pageCurrent); */ public class PtrManager<T> { private PullRefreshListView ptr; //Adapter需要先实例化,数据为空即可 private BaseAdapter<T> adapter; private int pageCurrent; private int pageCount; /** * 当pageCount发生改变时(即数据源发生变化) 不需要去重新实例化对象 直接对其pageCount重新赋值 * 并在下次FillPtr()的时候,pageCurrent参数传入1 */ public void setPageCount(int pageCount) { this.pageCount = pageCount; } /** * 重新初始化PtrManager的方法 * 用作选项卡的切换后 考虑到item的布局可能发生改变,即需要一个新的adaper去替换掉旧的,同时传入新的pageCount * 外部调用这个方法之后再同往常一样去调用FillPtr()方法即可 */ public void initManager(BaseAdapter<T> adapter, int pageCount) { this.adapter = adapter; this.pageCount = pageCount; } public PtrManager(PullRefreshListView ptr, BaseAdapter<T> adapter, int pageCount) { this.ptr = ptr; this.pageCount = pageCount; this.adapter = adapter; } //返回pageCurrent public int FillPtr(List<T> datas, int pageCurrent) { this.pageCurrent = pageCurrent; if (this.pageCurrent > this.pageCount) { this.pageCurrent = this.pageCount; PtrComplete(); ptr.setCanLoadMore(false); return this.pageCurrent; } else if (this.pageCurrent == this.pageCount) { ptr.setCanLoadMore(false); } if (this.pageCurrent == 1) { adapter.clearData(); adapter.addAllData(datas); ptr.setAdapter(adapter); } else { adapter.addAllData(datas); adapter.notifyDataSetChanged(); } PtrComplete(); if (this.pageCurrent == this.pageCount) { ptr.setCanLoadMore(false); } return this.pageCurrent; } private void PtrComplete() { ptr.onRefreshComplete(null); ptr.onLoadMoreComplete(); } }
泛型是数据源的类型,外部这样去调用
manager = new PtrManager<>(listview, adapter, pageCount); pageCurrent = manager.FillPtr(data, 1);
在接口onResponse里这样去优化
pageCount = response.getTotal(); data = response.getData(); if (pageCurrent == 1) { if (manager == null) { //第一次加载 manager = new PtrManager<>(listview, adapter, pageCount); }else{ //第二次刷新 可能加入了筛选等条件 pageCount可能发生改变 manager.setPageCount(pageCount); } } pageCurrent = manager.FillPtr(data, pageCurrent);