如果adapter中的数据量很大的时候,在加载listview时会出现卡顿的现象。最好的解决方法就是先加载一定数量的数据,然后在最下方提示正在加载.
动态加载就是把放入的adapter中的数据分好几次加载。在用户拖动listview时再加载一定的数据。OnScrollListener监听事件默认会覆盖的下面两个方法:
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
public class demo implements OnScrollListener{
boolean isLastRow = false;
/*
* 正在滚动时调用,回调2-3次。手指没抛则回调2次,scrollState=2的这次不回调;
* 回调顺序如下:
* 第1次:scrollState=SCROLL_STATE_TOUCH_SCROLL(1),正在滚动;
* 第2次:scrollState=SCROLL_STATE_FLING(2),手指做了抛的动作(手指离开屏幕前,用力滑了一下;
* 第3次:scrollState=SCROLL_STATE_IDLE(3),停止滚动;
*
* 当屏幕停止滚动时为0;当屏幕滚动且用户使用的触碰或手指还在屏幕上时为1;
* 由于用户的操作,屏幕产生滑动时为2;
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
//当滚动到最后一行且停止滚动时,执行加载
if(isLastRow && scrollState == SCROLL_STATE_IDLE){
/*****
* 加载元素*
******/
isLastRow = false;
}
}
/*
* 滚动时一直回调,直到停止滚动时才停止回调;单击时回调一次。<strong><span style="color:#cc0000;">刚进入程序也调用此处。</span></strong>
* 参数:firstVisibleItem,当前能看到的第一个列表项的ID(从0开始);
* 参数:visibleItemCount,当前能看到的列表项个数(小半个也算)
* 参数:totalItemCount,列表项共数
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
//判断是否滚动到最后一行
if(firstVisibleItem + visibleItemCount == totalItemCount
&& totalItemCount > 0){
isLastRow = true;
}
}
}
转载自博客:http://www.cnblogs.com/tt_mc/archive/2012/10/10/2718333.html