常见有的有两种方式
一 最早实现的是johannilsson,GitHub项目列表,作者主页,作者博客
这种实现是最常见的, 实现原理:
UI布局: 向下拉动后头部需要显示刷新字样的一个view,通常是直接使用HeaderView,底部直接使用FooterView。
Touch事件:在onTouchEvent中判断是否到ListView头部或者尾部,进行相应的操作,例如显示HeaderView, 执行动画等
缺点:
1. 但是直接使用HeaderView, 而ListView的第一个item在Adapter.getView获得的position会是从1开始,因为position 0已经被HeaderView占用
2. 因为使用addHeaderView仅局限与ListView,当然这也不算什么缺点。
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
在GitHub上搜索refresh 会获得更多信息
支持ListView,GridView和ScrollView下拉刷新,以及上拉加载更多
https://code.google.com/p/pull-to-refresh-view/