AbsListView的OnScrollListener有两个方法,一个是onScroll,一个是onScrollStateChanged.
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount)
public void onScrollStateChanged(AbsListView view, int scrollState)
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
int lastVisibleItem = firstVisibleItem + visibleItemCount
- mListView.getHeaderViewsCount();
this.firstVisibleItem=firstVisibleItem;
if (mAdapter != null && lastVisibleItem == mAdapter.getCount()
&& mListView.getFooterViewsCount() == 0
&& (mTask == null || mTask.isCancelled()) && mHasMore) {
mListView.addFooterView(mFooterView);
mTask = new GetCommentTask(this);
mTask.execute((new Long[] { mAlbumId,
commentList.get(commentList.size() - 1).commentId,
PULL_DOWN_REQUEST }));
}
}
需要注意的是onScroll在用户没有采取任何动作的情况下,也会调用onScroll,这是程序内部调用,在初始化absListview的时候,所以需要加上别的判断条件。
附上各个参数的意义:
firstVisibleItem:从0开始,表示当前向下显示的view的顺序,注意如果有header,那么header也会算在里面,因为是从最上面的子view到当前view的顺序。
visibleItemCount:当前可见的view的数量.
totalItemCount:所有的项数,包含header和footer。