精確記錄和恢復ListView滑動位置

工做中遇到一個需求,對ListView某一項操做後刷新ListView,可是若是直接刷新,界面上ListView從第一列開始顯示,用戶體驗很差,因而在網上搜了一些恢復LIstView滑動位置的方法。解決辦法以下: java

[java]  view plain copy
  1. //給ListView設置監聽器  
  2. backgroundList.setOnScrollListener(scrollListener);  
  3. private OnScrollListener scrollListener = new OnScrollListener() {  
  4.    
  5.                 @Override  
  6.                 public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {  
  7.                 }  
  8.    
  9.                 @Override  
  10.                 public void onScrollStateChanged(AbsListView view, int scrollState) {  
  11.                         if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {  
  12.                                 // scrollPos記錄當前可見的List頂端的一行的位置   
  13.                                scrollPos = myList.getFirstVisiblePosition();   
  14.                         }  
  15.                         if (arrayList != null) {    
  16.               View v=myList .getChildAt(0);  
  17.               scrollTop=(v==null)?0:v.getTop();  
  18.             }    
  19.          }  
  20.         };  
  21.   
  22. 調用setAdapter以後恢復位置:  
  23. myList .setSelectionFromTop(scrollPos, scrollTop);  

 

參考:http://stackoverflow.com/questions/3014089/scroll-to-a-position-in-a-listview 


以前在網上搜到的,有另外兩種方法
第一種:
在onScrollStateChanged裏面  ide

scrolledX = listView.getScrollX();  spa

 scrolledY = listView.getScrollY();  .net

恢復時使用listView.scrollTo(scrolledX, scrolledY);  blog

 可是獲得的scrolledY爲0
第二種:
在onScrollStateChanged裏面 get

position = listView.getFirstVisiblePosition();  it

用position記錄顯示在屏幕頂端的一個item, io

恢復時使用listView.setSelection(position);  用戶體驗

可是這種方法不夠精確
最後用setSelectionFromTop實現的 List

相關文章
相關標籤/搜索