listview的下拉加載

項目中時長用到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;

 

 

 


 

發佈了63 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章