网上有关于判断listview这样的absListview滑动到底部的方法,通过计算能看见的最下边缘是否是整个listview的底部来判断是否滑动到底部。这样做能很精确的判断滑动到底部的事件触发。但是有些情况,比如当装载的数据很少,无需滑动就能看见底部。有时候我们只是想滑动之后才来判断。如果使用滑动监听OnScrollListener就不能满足要求。这个时候可以使用另外一种更灵活更简单的判断方法:
重写AbsListView的方法:
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY,
int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY,
boolean isTouchEvent)
{
if (deltaY > 0)
{
//此处,只有当listview滑动到控件的上下边界时才会触发的函数,当deltaY > 0时,表示向上滑动。也就是说这个地方是listview滑动到底部时触发的
}
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY,
maxOverScrollX, scrollRangeY, isTouchEvent);
}
以下是通过OnScrollListener来判断的方法:
private class OnScrollListenerImple implements OnScrollListener{
@Override
public void onScroll(AbsListView listView, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount) {
System.out.println("Scroll to the listview last item");
View lastItemView=(View) listView.getChildAt(listView.getChildCount()-1);
if ((listView.getBottom())==lastItemView.getBottom()) {
System.out.println("========Scroll to the listview bottom =============");
addDataForListView();
mSimpleAdapter.notifyDataSetChanged();
}
}
}
@Override
public void onScrollStateChanged(AbsListView listview, int scrollState) {
}
}