項目中時長用到listview的下拉加載,總結一下,方便再次使用!
首先,listView.setOnScrollListener(new MyOnScrollListener());
其次,
private class MyOnScrollListener implements OnScrollListener {
/*當listView狀態發生變化時 * 例 : 從靜止狀態 --> 滑動 * 滑動 --> 靜止 */ @Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//判斷滑動的狀態 switch (scrollState) {
//靜止狀態 case OnScrollListener.SCROLL_STATE_IDLE:
//獲取最後一個可見的item在ListView中的位置 lastPosition = enterLv.getLastVisiblePosition();
//獲取數據的長度 int size = list.size();
if(lastPosition == (size -1)) {//已經滑到listview的最後一個item;
if(isLastPage) {
Toast.makeText(getApplicationContext(), "已經加載到最後了", Toast.LENGTH_SHORT).show();
return ;
}
頁數自增 mPageNum++;
//發送請求 requestData();
}
break;
default:
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
}
然後就是發送請求,獲取數據;
最後,在接收到數據後,判斷接收到的數據長度是否等於要求的長度,如果不等於,說明客戶端已經請求到了所有的數據,修改boolean值;
下面的代碼實現一種效果,將獲取到數據的listView的item定位到用戶請求數據前的位置,換句話說,保持界面的item沒有變化;
listView.setSelectionFromTop(int item,int top); 該方法設置某個item的距離頂部的位置;
//獲取listView組件的高度
int height = listView.getHeight();
//獲取listView底部位置的(可見)item距頂部的距離
int bottom = listView.getBottom();
/*
*lastPosition : 加載前listView中最後一個item的位置
* 設置top爲height,會出現位於底部的item顯示不完全,
* 所以使用bottom-height得出底部未顯示的高度,再使用heigh-差值;
*/
enterLv.setSelectionFromTop(lastPosition+1, (height * 2 - bottom));
如果不設置selection,默認爲0;