精确记录和恢复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

相关文章
相关标签/搜索