方法1 setOnScorll Listener 方法,记录滑动位置
listView.setOnScrollListener(new OnScrollListener() {         /**       * 滚动状态改变时调用       */      @Override      public void onScrollStateChanged(AbsListView view, int scrollState) {           // 不滚动时保存当前滚动到的位置           if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {               if (currentMenuInfo != null) {                   scrolledX = statusListView.getScrollX();                   scrolledY = statusListView.getScrollY();               }           }       }         /**       * 滚动时调用       */      @Override      public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {       }   });  
恢复时使用: listView.scrollTo(scrolledX,scrolledY);
方法2 setOnScorllListener方法,记录滑动的position
listView.setOnScrollListener(new OnScrollListener() {         /**       * 滚动状态改变时调用       */      @Override      public void onScrollStateChanged(AbsListView view, int scrollState) {           // 不滚动时保存当前滚动到的位置           if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {               position = statusListView.getFirstVisiblePosition();           }       }         /**       * 滚动时调用       */      @Override      public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {       }   });  
恢复时调用:listView.setSelection(position);
方法三 让适配器和List关联起来(初次理解可能会有点难,但理解之后,你会发现很好用)
listView.setAdapter(listDataAdapter);listDataAdapter.getDataList.removeAll(newRemoveList());   listDataAdapter.getDataList.addAll(newDataList()); listDataAdapter.notifyDataSetChanged();  
这种适用于listView追加数据的情况,严格说不是恢复listView滚动的位置,只是保持滚动位置不变

方法四 Google推荐的方法:
// save index and top positionint index = mList.getFirstVisiblePosition();View v = mList.getChildAt(0);int top = (v == null) ? 0 : v.getTop();// ...// restoremList.setSelectionFromTop(index, top);


方法5 和方法一类似 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0924/1711.html
listview的 getScrollY()方法返回0 可以用这个方法获取
public int getScrollY() {    View c = mListView.getChildAt(0);    if(c == null) {        return0;    }    int firstVisiblePosition = mListView.getFirstVisiblePosition();    int top = c.getTop();    return-top + firstVisiblePosition * c.getHeight() ;}

最后 listView.scrollTo(0, getScrollY());



更多相关文章

  1. android中EditText只允许输入汉字(过滤汉字)
  2. Android界面的架构图
  3. Android(安卓)5.0以上版本去掉Button自带阴影效果的方法
  4. android CTS测试使用方法
  5. android之数组排序
  6. Android(安卓)MediaPlayer类
  7. Android(安卓)WebView开发常见问题
  8. Android(安卓)启动分析-init进程&init.rc
  9. android 广告栏 viewpager

随机推荐

  1. Android AndroidX的迁移
  2. 如何从UA分辨出Android设备类型
  3. android 汉字转拼音 笔记
  4. phoneGap插件 .
  5. Android一次申请多个动态权限
  6. 深入浅出RxJava——在Android中使用响应
  7. Android 6.0耳机hook按键接听和挂断电话;
  8. Android下Bonjour服务的使用
  9. Android平台软件体系浅注
  10. Android入门之LinearLayout、AbsoluteLay