ListView 滾動加載數據

  如果adapter中的數據量很大的時候,在加載listview時會出現卡頓的現象。這是會讓用戶抓狂!最好的解決辦法就是先加載一定數量的數據,然後在最下方提示正在加載!  動態加載就是把放入adapter中的數據分好幾次加載。在用戶拖動listview時再加載一定的數據,和sina微博的客戶端類似。
  給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)   事件
SDK的Sample裏面的ApiDemos裏面的List9 和 List 13介紹了 ListView.OnScrollListener的使用。
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) {    }});


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章