PullToRefreshListView
原理:
拉刷新ListView
无非就是对普通的List View
添加一个HeaderView
,然后通过对ListView onTouchEvent
来获取当前下拉刷新的状态。然后去改变HeaderView
的状态。
- 自定义
ListView
,在构造方法中去添加HeaderView
通过ListView.addHeaderView()
去添加HeaderView
的时候,HeaderView
会显示在屏幕的最初位置,我们需要它默认的时候是在屏幕的上方,这样默认时是不可见的,
但是我们下拉ListView
的时候,它就能够显示出来。这就要通过设置HeaderView
的padding
来实现它的隐藏。注意:View的显示最初要经过Measure
测量宽高,
我们在构造方法去添加的时候,该View可能并没有被测量,所以在获取HeaderView
高度的时候会为0,这时候我们要手动的去测量一下HeaderView
。 - 重写onTouchEvent,来监听手指的下拉
- 上面的写法仍有些问题。就是我们在
onTouchEvent
中Move
里面对移动的距离进行了判断,但是ListView
本身就是一个可以上下滑动的组件,
如果我们直接这样判断,那ListView
本上上下滑动的功能就被我们给抹去了。而对于
isCanPullToRefresh
的判断是通过ListView.setOnScrollListener
去进行判断当前第一个可见条目是不是ListView
的第一个条目,
只有第一个条目在最顶端位置的时候才可以进行下拉刷新。 - 提供刷新接口
- ChangeState方法
LoadMoreListView
原理:
滑动到底部自动加载更多的ListView
,无非就是通过对其滑动过程进行监听,一旦滑动到底部的时候我们就去加载新的数据。通过对ListView
添加FooterView
,
然后在不同的状态控制它的显示与隐藏。
- 自定义ListView的子类,在构造方法中去添加FooterView.
- 监听滑动状态,通过
setOnScrollListener
即可实现对状态的监听。 - 在
ScrollListener
中去判断当前滑动的状态。从而依据不同的状态去控制FooterView
的显示与隐藏。 - 提供自动加载更多的接口。
在使用的时候,与ListView使用方法相同,只需调用setOnLoadMoreListener
对其设置OnLoadMoreListener
即可,然后在数据加载完成后调用onLoadComplete
方法去恢复状态。
PullAndLoadMoreListView
将下拉刷新和自动加载更多进行整合。就不多说了