博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
精确记录和恢复ListView滑动位置
阅读量:6609 次
发布时间:2019-06-24

本文共 1202 字,大约阅读时间需要 4 分钟。

hot3.png

工作中遇到一个需求,对ListView某一项操作后刷新ListView,但是如果直接刷新,界面上ListView从第一列开始显示,用户体验不好,于是在网上搜了一些恢复LIstView滑动位置的方法。解决办法如下:

[java] 
  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里面 

scrolledX = listView.getScrollX(); 

 scrolledY = listView.getScrollY(); 

恢复时使用listView.scrollTo(scrolledX, scrolledY); 

 但是得到的scrolledY为0

第二种:
在onScrollStateChanged里面

position = listView.getFirstVisiblePosition(); 

用position记录显示在屏幕顶端的一个item,

恢复时使用listView.setSelection(position); 

但是这种方法不够精确

最后用setSelectionFromTop实现的

转载于:https://my.oschina.net/u/698243/blog/160570

你可能感兴趣的文章
日均千亿级别的数据请求量背后的秘密
查看>>
如何用Uber JVM Profiler等可视化工具监控Spark应用程序?
查看>>
shell学习记录
查看>>
Electric Cloud推出用于DevOps的预测分析平台
查看>>
用户吐槽:Azure DevOps CI 体验太差
查看>>
Helm:三思而后用
查看>>
红帽技术开放日:参与开源社区不只有贡献代码这一种方式
查看>>
Firefox Focus:一个iOS的私人浏览器
查看>>
.NET Core 3将支持Windows桌面应用
查看>>
Elixir Cookbook: 生成伞状项目
查看>>
APICloud重磅支持Atom编辑器,并建立开发工具核心库
查看>>
一个非常简单的 Shields badge 服务
查看>>
堡垒跳板机实现——ldap配置
查看>>
机器学习从入门到放弃之朴素贝叶斯
查看>>
努力翻译一篇中文最友好的,Web Audio API的使用相关的文章
查看>>
常用js设计模式整理
查看>>
如何使用ELK来监控性能
查看>>
Cocos2d-X 3.0 事件分发机制
查看>>
升级FFMPEG2.6到3.0.2
查看>>
关于python的编解码(decode, encode)
查看>>