毛孩市集 (友站連結)

2011年5月20日 星期五

ListView之自動重新整理與載入

今天來介紹一些ListView的用法
主要目的是當ListView拉到頂時自動重新整理、拉到底時自動載入更多。





 一開始先建立兩個layout,分別是head.xml、foot.xml
分別用來顯示重新整理中、載入中的文字


接下來直接來看主要的程式碼
這些變數是用來判斷要不要更新或載入資料
boolean shouldRefresh=true,isRefreshing=false;
boolean shouldLoadData=true,isLoadingData=false;




head = LayoutInflater.from(this).inflate(R.layout.head, null);//將head.xml轉為view
headtext = (TextView) head.findViewById(R.id.head);//取得head裡的TextView
foot = LayoutInflater.from(this).inflate(R.layout.foot, null);//將foot.xml轉為view
list = getListView();//取得ListView
list.addHeaderView(head, null, false);//就addHeaderView...
list.addFooterView(foot, null, false);//就addFooterView...


mydataAdapter = new MydataAdapter(Main.this,alldata);
setListAdapter(mydataAdapter);//一定要放在addHeaderView及addFooterView的後面


接下來在list.setOnScrollListener加上兩個事件


public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
        shouldLoadData = false;
        shouldRefresh = false;
        if (firstVisibleItem==0) {//拉到頂時
                shouldRefresh=true;
        }else if (firstVisibleItem + visibleItemCount == totalItemCount){
                //拉到底時
                if (list.getCount()<60){
                        shouldLoadData=true;
                }else{//只是測試用,如果超過60筆資料就不要再載入了
                        foot.setVisibility(View.GONE);
                        list.removeFooterView(foot);
                        shouldRefresh = false;
                }
        }
}


就會向下圖一樣,只有60筆資料(0~59)




public void onScrollStateChanged(AbsListView view, int scrollState) {
    if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {//當ListView拉到頂或底時
        if (shouldRefresh) {//當ListView拉到頂
                if (!isRefreshing)Refresh();//沒在更新資料時
                list.setSelection(1);//不管更不更新,都移到第一項
        }
        if (shouldLoadData && !isLoadingData) {LoadData();}//當ListView拉到底,且沒在載入資料時
    }
}

以上就是比較主要的,其他的就請下載完整的程式碼

沒有留言:

張貼留言