注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云水禅心

淡若秋菊何妨瘦, 清到梅花不畏寒.

 
 
 

日志

 
 

Android ListView下拉刷新、上拉载入更多  

2012-12-28 13:28:12|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

http://maxwin.me/blog/?p=154#header


SEO: Android ListView, Pull to refresh, Pull down to refresh. Pull up to refresh.

source code: https://github.com/Maxwin-z/XListView-Android

这是接触Android开发后写的第二个控件。话说下拉刷新组件网上就有好多版本,但我找到的两个(其中一个是 johannilsson的,国内很多就翻译的这个版本),效果都不是特别满意,关键还有bug(不至于crash,但是用户体验不好)

XListView,为毛叫X,因为它提供了“下拉刷新”和“上拉载入更多”两个功能,不想取PullDownRefreshAndPullUpLoadListView这种名字。

说下原理和碰到的问题,具体细节请到github下源码。

0. XListView继承ListView。

1. 下拉刷新组件是ListView的一个Header。在ListView创建时就将这个自定义View塞进去,默认情况是看不到的,所以这个HeaderView的高度初始设置为0。

2. 上拉载入更多组件是Footer,为了确保这个footer在最后(可能会添加多个自定义footer),在用户调用setAdatper的时候再把这个footer塞进去。

3. 覆写ListView的onTouchEvent方法,处理各种情况。

4. 用户松手,启动mScroller,将header、footer回滚到所需状态。

5. 添加了用户下拉、上拉移动delay的效果,类似iOS的行为。

6. 提供了两个接口:

a) IXListViewListener:  触发下拉刷新、上拉载入更多

b) OnXScrollListener: 这个和原生的OnScrollListener一样,但是在mScroller回滚时,也会触发这里的事件。

碰到的问题:

1. 用户下拉回推时,不断修改header的高度,但这时候滚动条指示器的位置还是按老的高度计算的,需要强制调用一下setSelection(0)将ListView滚动到顶部。

 贴几张效果图:

下拉刷新

  

上拉载入更多

  



其它:
  1. 例子很好哦,不过有一个BUG,就是当最开始数据不能撑满屏幕的时候,也就是比如有1条,那么将ListView向上拉不会完美刷新,必须将底部的view拉出屏幕才可以刷新,但是这个操作会超过1次的刷新,描述的不是很清楚,但是可以测试下就知道了

    • 了解,这个bug我没太重视,考虑的是有分页数据的情况,一般第一页都会撑满整个屏幕。
      谢谢反馈,我修改下看看。

      问题解决了,在XListView的onTouchEvent方法中,将default的else去掉就可以了,大概在303行的位置
2、

您好,您实现的这个效果是我所有找到过的类似 的实现效果中最好的一个,比起那些反复设置measure值的方法容易理解的多,忍不住要赞一个!不过还有个问题想要请教下,您在 onTouchEvent方法中更新headerView高度时,传递的参数我不理解:updateHeaderHeight(deltaY / OFFSET_RADIO); 为什么要除以一个1.8f 的值呢?您在注释中说到是iOS的样式,那么能解释一下么?谢谢!

  • 我懂了,应该是为了延缓下拉速度,达到合适跨度的手势控制效果,除以1.8应该是一个多次尝试的结果吧

  评论这张
 
阅读(16718)| 评论(8)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018