很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性。查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷新和上拉加载更多。这个组件有个mode的属性,可以设置为both,即上下同时都可拉动。但是只设置这个属性的话,上拉与下拉产生的效果是完全一致的。所以要使用这个开源项目做到下拉刷新并同时可上拉加载更多,就需要在代码中进行一些处理。
==========================pulltorefresh属性相关=====================================
开源项目:Android-PullToRefresh
项目地址:/chrisbanes/Android-PullToRefresh/wiki/Quick-Start-Guide
1.属性:/chrisbanes/Android-PullToRefresh/blob/master/library/res/values/attrs.xml
命名空间: xmlns:ptr="/apk/res-auto"
2.常用方法
setOnRefreshListener(OnRefreshListener listener):设置刷新监听器;
setOnLastItemVisibleListener(OnLastItemVisibleListener listener):设置是否到底部监听器;
setOnPullEventListener(OnPullEventListener listener);设置事件监听器;
onRefreshComplete():设置刷新完成
==========================监听listview滚动方向=====================================
修改为上拉加载更多的关键在于onrefresh方法执行之前判断出listview的滚动方向。以下方法是所尝试的方法中效果最好的一种,并不能说完美解决,但应该是效果最接近的一种了。(当首屏数据行数未充满屏幕,或者滚动时第一行的滚动距离小于行高,可能还是会存在一点误差。不过大部分应用的列表每页数据一般都能充满屏幕,也可在此基础结合其他手势判断对此方法进行改善)。
参考资料:/questions/12114963/detecting-the-scrolling-direction-in-the-adapter-up-down/12115157#12115157
==========================实现下拉刷新和上拉加载更多====================================
解析json完毕后,判断是上拉操作还是下拉刷新操作:
数据加载完毕后,notifyDataSetChanged和通知PullRefreshListView,同时页码加1:
判断上拉和下拉方向,监听刷新listview,修改头部和底部view的文字说明:
==========================其他使用笔记====================================
1.PullRefreshListView.setRefreshing()方法无法执行更新
mPullRefreshListView.setRefreshing();如果adapter是里面的size是null 或者大小是0
这个时候 setRefreshing是不会有效果的.需要将PullToRefreshListView上面代码注释掉
2.通过继承OnRefreshListener2<ListView>直接实现上拉与下拉监听,但是下拉窗口的文字无法及时更新,即方法只在下拉操作后才执行。
相应接口方法:
本文转自 glblong 51CTO博客,原文链接:/glblong/1312349,如需转载请自行联系原作者
Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法 监听listview滚动方向...