android开发之记录ListView滚动位置

这个问题本身不难,但是由于项目中的需求太过于复杂,结果导致这个问题变得不是那么容易实现。在网上一搜,结果如下:
这里写图片描述

我不知道是who copy who?反正介绍的所谓的三种方法,第一种都是无法运行的,很明显的bug,第二三种方法都是入门级知识,这几位大哥写博客自己都不先运行一下吗?

唉,不吐槽了,说说我的解决方案吧:

在需要记录滚动位置的地方执行下面的操作:

int scrollPos = refreshListView.getFirstVisiblePosition();
                    View v1 = refreshListView.getChildAt(0);
                    int scrollTop = (v1 == null) ? 0 : v1.getTop();

getFirstVisiblePosition方法用来记录当前第一个可见item的索引。
int scrollTop = (v1 == null) ? 0 : v1.getTop();用来记录当前第一个可见item的偏移量。


注意

在你的项目中,你可能需要给View v1 = refreshListView.getChildAt(0);添加一个非空判断,判断与ListView适配的数据集是否为空。

在需要恢复滚动位置的地方执行如下操作:

refreshListView .setSelectionFromTop(scrollPos, scrollTop);

有些人可能会选择记录下当前第一个可见item的位置,然后用setSelection方法来恢复位置,这样不是不可以,但是不够精确,因为很多情况下我们ListView中最上面的item不一定是刚刚显示出来,可能显示了一半隐藏了一半。所以个人认为上面介绍的方法比较合适。

版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

posted @   江南一点雨  阅读(704)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示