在做ListView加载数据时如果数据量大的话会造成加载时间过长而卡屏,所以为了解决这个问题,查看了SDK,
在OnScrollListener中有两个方法
只要重写这两个方法就可以实现滚动加载,例如:
class MyScrollListener implements OnScrollListener {
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
/**
* we want to load the next chunk of data before the user reach the end of the list.
* 在列表打到末尾之前,我们要加载下一个数据块
* firstVisibleItem 表示在当前屏幕显示的第一个listItem在整个listView里面的位置(下标从0开始)
* visibleItemCount表示在现时屏幕可以见到的ListItem(部分显示的ListItem也算)总数
* totalItemCount表示ListView的ListItem总数
* listView.getLastVisiblePosition()表示在现时屏幕最后一个ListItem
* (最后ListItem要完全显示出来才算)在整个ListView的位置(下标从0开始)
*/
Log.d("load", ""+firstVisibleItem+"----"+visibleItemCount+"-----"+totalItemCount);
if(firstVisibleItem + visibleItemCount < totalItemCount - 3){
Log.d("load", "if------<>");
return;
}
if(dataLoader.isLoading() == false){
Log.d("load", "false------>");
loadNext();
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
Log.d("load", "onScrollStateChanged");
}
}
scrollState
The current scroll state. One of SCROLL_STATE_IDLE, SCROLL_STATE_TOUCH_SCROLL orSCROLL_STATE_IDLE.