給listview添加OnScrollListener監聽事件默認會覆蓋下面兩個方法:
Java代碼 收藏代碼
OnScrollListener loadListener=new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
lastItem = firstVisibleItem + visibleItemCount;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//listview滾動時會執行這個方法,這兒調用加載數據的方法。
adapter.notifyDataSetChanged();//提醒adapter更新
uList.setSelection(lastItem - 1);//設置listview的當前位置,如果不設置每次加載完後都會返回到list的第一項。
}
}
};
TIP:
1、如果activity中只有listview,當listview的數據量很大時,在啓動activity時會卡頓半天知道數據加載完可以顯示,這時可以可以用handler,將加載數據的操作寫在handler裏面,而且要在onResume()方法中執行,放在onCreate()不起作用。
2、如果是從網絡獲取數據,或者數據量很大可以新開一個線程,在線程中完成數據的加載。
3、如果添加的加載提示框出不來,可能是加載過程一直佔有cpu,無法顯示提示框,可以將加載的代碼寫到handler裏面,用postDelayed()方法給一定的時間延遲去加載數據。
監聽ListView滾動到最底部
監聽ListView的滾動可以用兩個東西:
- ListView.onScrollStateChanged (本文講解這個listener的使用)
- 在OnGestureListener類裏面的onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) 事件
List9介紹的是ListView.OnScrollListener的 onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 方法。
List13介紹的是ListView.OnScrollListener的 onScrollStateChanged(AbsListView view, int scrollState) 方法,使用說明如下:
ListView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case OnScrollListener.SCROLL_STATE_IDLE: Log.v("已經停止:SCROLL_STATE_IDLE"); break; case OnScrollListener.SCROLL_STATE_FLING: Log.v("開始滾動:SCROLL_STATE_FLING"); break; case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: Log.v("正在滾動:SCROLL_STATE_TOUCH_SCROLL"); break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { }});
監聽ListView滾動到最底部使用 onScrollStateChanged(AbsListView view, int scrollState) 方法,代碼大致如下:
// 監聽listview滾到最底部mIndexList.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { // 當不滾動時 case OnScrollListener.SCROLL_STATE_IDLE: // 判斷滾動到底部 if (view.getLastVisiblePosition() == (view.getCount() - 1)) { isLastisNext++; } break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { }});