android 滑动相关(一) : OnScrollListener

OnScrollListener 是android为了解决在做ListView加载数据时,如果数据量大的话会造成加载时间过长而卡屏这个问题准备的.
里面会重写2个方法: 一个是onScrollStateChanged,一个是onScroll . 先讲讲这2个方法
onScrollStateChanged : 顾名思义就是"拖住滑动" 写这个方法的时候,我发现有很多次这个方法都不执行. 总是执行onScroll 后就不执行这个方法了, 这个问题在代码中声明怎么解决.
这个重写方法里面有2个值, AbsListView 和 scrollState.  
正在滚动时回调,回调2-3次,手指没抛则回调2次。scrollState = 2的这次不回调, 
回调顺序如下
第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动
第2次:scrollState = SCROLL_STATE_FLING(2) 手指做了抛的动作(手指离开屏幕前,用力滑了一下)
第3次:scrollState = SCROLL_STATE_IDLE(0) 停止滚动

onScroll : 
  • 滚动时一直回调,直到停止滚动时才停止回调。单击时回调一次。
  • firstVisibleItem:当前能看见的第一个列表项ID(从0开始)
  • visibleItemCount:当前能看见的列表项个数(小半个也算)
  • totalItemCount:列表项共数

class Scroll implements OnScrollListener {
                //有数据的时候,(有数据可以滑动的时候)
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {

case OnScrollListener.SCROLL_STATE_IDLE: // 当不滑动的时候, 值为0 . 
// 不动的时候判断在顶部还是在底部
// 在底部
if (zbListview.getLastVisiblePosition() == (zbListview.getCount() - 1)) {
//执行的事件...
                                      }
// 在顶部
if (zbListview.getFirstVisiblePosition() == 0) {
//执行的事件
}
                                          break;
                              default:
break;
}
}

                //没数据滑动的时候(就是刚点开listview页面的时候)
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
                                  //页面第一次打开的时候
                           if (firstVisibleItem + visibleItemCount == totalItemCount) {
//执行的事件
}
                  }
            }
大家发现怎么解决onScrollStateChanged 没有执行这个问题了吗? 就是onScroll 这个方法不要把所有的条件包括完了.

一点愚见,不详细之处多多谅解, 错误之处,多多指正.



你可能感兴趣的:(android,ListView)