主要目的是當ListView拉到頂時自動重新整理、拉到底時自動載入更多。
分別用來顯示重新整理中、載入中的文字
接下來直接來看主要的程式碼
這些變數是用來判斷要不要更新或載入資料
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;
}
}
}
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拉到底,且沒在載入資料時
}
}
以上就是比較主要的,其他的就請下載完整的程式碼
沒有留言:
張貼留言