您的位置:首页 > 其它

PullToRefresh------ListView的使用

2015-01-20 17:02 405 查看
第一步 :写出布局文件的设置

<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pull_refresh_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"    //设置背景透明
android:divider="#19000000"      //分割线颜色
android:dividerHeight="4dp"     //分割线高度
android:fadingEdge="none"   // 设置上边和下边没有黑色的阴影
android:fastScrollEnabled="false"       //是不是允许快速滑动
android:footerDividersEnabled="false"    //底部没分割线
android:headerDividersEnabled="false"     //头部没分割线
android:smoothScrollbar="true"    //显示变化滚动条高度

/*  ptr:ptrDrawable="@drawable/default_ptr_flip"   //上拉下拉图标
ptr:ptrAnimationStyle="rotate"         //动画效果 提供了两个值 flip和rotate 默认为rotate
ptr:ptrRefreshableViewBackground    //设置整个mPullRefreshListView的背景色
ptr:ptrHeaderBackground="#383838"         //上拉下拉时头部的背景色
ptr:ptrHeaderTextColor="#FFFFFF"        //上拉下拉时 文字颜色
ptr:ptrHeaderSubTextColor    //设置头部view副标题文字的颜色
ptr:ptrMode                //模式pullFromStart(上拉刷新):pullFromEnd(下拉刷新):both;
ptrScrollingWhileRefreshingEnabled      //刷新的时候,是否允许ListView或GridView滚动。觉得为true比较好
// 决定了Header,Footer以何种方式加入mPullRefreshListView,
//   true为headView方式加入,就是滚动时刷新头部会一起滚动。
ptrListViewExtrasEnabled

*/
/>


第二步 使用 ,先得到mPullRefreshListView 初始化的设置

private int currentPage =1;
第一次进来的时候加载第一页的数据
initData(1);
//mPullRefreshListView.setMode(Mode.PULL_FROM_END);//只支持上拉
//mPullRefreshListView.setMode(Mode.PULL_FROM_START);//只支持下拉
mPullRefreshListView.setMode(Mode.BOTH);//两端刷新
mPullRefreshListView.getLoadingLayoutProxy(false, true).setPullLabel("上拉加载");
mPullRefreshListView.getLoadingLayoutProxy(false, true).setRefreshingLabel("加载中");
mPullRefreshListView.getLoadingLayoutProxy(false, true).setReleaseLabel("松开加载更多数据");

这里是监听的配置
mPullRefreshListView.setOnRefreshListener(new OnRefreshListener2<ListView>() {  //注意这里用的2
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
Toast.makeText(getApplicationContext(), "下拉刷新", Toast.LENGTH_LONG).show();
//时间
String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),
DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);//加上时间
initData(currentPage)   //加载数据
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
Toast.makeText(getApplicationContext(), "上拉获取更多", Toast.LENGTH_LONG).show();
currentPage    = 1;
initData(currentPage);  // 下拉刷新
}

});


加载数据的类

private void initData(int page) {
MessageListModel.get(toId + "", page).done(new ICallback() {
@Override
public void success(String response) {
Gson gson = new Gson();
//解析json
SearchResultBean searchResultBean = gson.fromJson(response, SearchResultBean.class);
if (null != searchResultBean) {
if (null == adapter) {  // 第一次
adapter = new AddProductAdapter(instance);   //当前的实例instance
//adapter.setHandler(handler);
mPullRefreshListView.getAdapterView().setAdapter(adapter);
}
ArrayList<ProductBean> list = searchResultBean.getProducts();    //  得到集合数据
//page为1 的时候 清理集合 ,否则不清理集合 调用下面的方法
adapter.addData(list, page == 1 ? true : false);
adapter.notifyDataSetChanged();
if (searchResultBean.isHasNext()) { //判断有没个一下
currentPage = currentPage + 1;
} else {
listview.setPullToRefreshEnabled(false);   // 没了禁用
//ToastUtil.toast(self, "没有更多数据");
}
}
listview.onRefreshComplete();  //完成
setSearchCount();  //设置页面的数量
}
});
}


附录: 方法
adapter 里面的两个方法

private ArrayList<ProgramBean> data;
public void addData(List<ProgramBean> list, boolean clear) {    //传true清理集合
if (clear) {
clear();
}
if (null == data) {
data = new ArrayList<ProgramBean>();
}
if (null != list && list.size() > 0) {
this.data.addAll(list);
}
}
/**
* 清理集合
*/
private void clear() {
if (null != data) {
data.clear();
}
}

http://www.cnblogs.com/java-g/p/4147658.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐