有时候我们为了获得更好的用户体验,不得不对ListView的Item中的图片的资源进行动态加载,一般的做法就是当Item停止滚动时进行加载,并且仅仅加载当前可见的item的数据;
为我们可以为ListView设置OnScrollListener滚动监听器;这个监听器需要实现两个方法
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState==0) {//当scrollState=0时说明ListView停止滚动
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
MainActivity.this.firstVisibleItem=firstVisibleItem;
MainActivity.this.visibleItemCount=visibleItemCount;
if (visibleItemCount>0) {
if (isLocked) {
System.out.println("已锁住:"+isLocked);//这里为什么要用一个锁呢?因为有时候当我们第一次进入ListView时
//visibleItemCount 可能为0;从而导致无法获取开始可见的数据;但是这个方法会执行好几次,
//所以可以一直获取,知道visibleItemCount>0,之后也可能会执行此方法,为了不重复,
// 因此在第一次执行后锁住即可;
} else { //这里可以处理数据 isLocked = true; System.out.println("VisibleItemCount>0 了 isLocked="+isLocked); } }
其实就是在
onScrollStateChanged()方法中获取滚动停止状态,当scrollState=0时滚动停止、=1时手指滚动、=2时(由于)手指滚动(手离开屏幕后)产生的惯性滚动。