1. 程式人生 > >android ListView資料變動後保持螢幕位置不變(類似QQ對話列表)

android ListView資料變動後保持螢幕位置不變(類似QQ對話列表)

          在網上找的所謂三種方法都不靠譜,比如在onScrollStateChanged事件中用lst_threads.getScaleX()獲取最後位置,不知道為何我除錯時在if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) 的時候無論getScaleX()還是getScaleY()均返回0。

         不管怎樣,我已經找到一種更好的替代方法:用getFirstVisiblePosition()獲取當前第一條資料的位置和setSelectionFromTop()設定第一條資料的位置,看程式碼:

		int w_cur_pos=lst_threads.getFirstVisiblePosition();
		int w_top=lst_threads.getTop();
		
		try {
			if (pageNo == 1) {
				Util.showToast(this, R.string.xlistview_err_01);
				return;
			}
			lst_threads.setPageNo(pageNo - 1);
			int w_cc=model.reloadData(ThreadActivity.this,mSubject,"",lst_threads.getPageNo(), pageSize, true);
			if (w_cc!=0){
				w_cur_pos=w_cur_pos+w_cc+1;
			}
		} finally {
			lst_threads.stopRefresh();			
			onDone.run();
			//lst_threads.resturePosition();
			lst_threads.setSelectionFromTop(w_cur_pos,w_top);
		}


這段程式碼放在下拉重新整理的事件中,獲得前一頁的內容並加到當前的adapter中,列表儲存內容不變,使用者再慢慢下拉看之前刷下來的內容。。