天天记录 - ListView下拉刷新原理

来源:互联网 发布:软件架构设计师挂靠 编辑:程序博客网 时间:2024/06/07 05:31


常见有的有两种方式


一  最早实现的是johannilsson,GitHub项目列表,作者主页,作者博客

https://github.com/johannilsson/android-pulltorefresh 
这种实现是最常见的, 实现原理:
UI布局: 向下拉动后头部需要显示刷新字样的一个view,通常是直接使用HeaderView,底部直接使用FooterView。
Touch事件:在onTouchEvent中判断是否到ListView头部或者尾部,进行相应的操作,例如显示HeaderView, 执行动画等
缺点: 
1. 但是直接使用HeaderView, 而ListView的第一个item在Adapter.getView获得的position会是从1开始,因为position 0已经被HeaderView占用 
2. 因为使用addHeaderView仅局限与ListView,当然这也不算什么缺点。

二  作者 Chris Banes, GitHub项目列表,作者主页

https://github.com/chrisbanes/Android-PullToRefresh 

这种实现可以在多种控件通用,实现原理:

布局:把ListView,GrideView控件只作为一个child view 其parent View使用LinearLayout或者ViewGroup包含,这样显示刷新文字的view和ListView或GrideView同时作为同一层的child view



第一种是下拉刷新的view作为ListView内部的headerView添加到布局中

第二种是下拉刷新的view和ListView都在同一层,其parent view是LinearLayout或者ViewGroup


想到的另外的实现方式,如果环境限制不能使用headerview也就是不能使用第一种方案,然后ListView的外部又不允许添加一层即不能使用第二种方案的苛刻的要求下,

是不是可以考虑在ListView的adapter的getview方法中,针对地一个或者最后一个返回一个包装过的Layout,即把下拉刷新View和listview的第一个item包含到一个layout中,在getview 的position = 0的时候返回,List View 本身也支持item并不是同一种类型的情况




下拉刷新效果
最早国内以此为基础修改最多的,johannilsson
https://github.com/johannilsson/android-pulltorefresh 


https://github.com/chrisbanes/Android-PullToRefresh 

在GitHub上搜索refresh 会获得更多信息
https://github.com/search?q=refresh&repo=&langOverride=&start_value=1&type=Everything&language=Java 


支持ListView,GridView和ScrollView下拉刷新,以及上拉加载更多
https://code.google.com/p/pull-to-refresh-view/


原创粉丝点击