博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android开发之记录ListView滚动位置
阅读量:4686 次
发布时间:2019-06-09

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

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

这里写图片描述

我不知道是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不一定是刚刚显示出来,可能显示了一半隐藏了一半。所以个人认为上面介绍的方法比较合适。

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

转载于:https://www.cnblogs.com/lenve/p/4889321.html

你可能感兴趣的文章
【转】IT名企面试:微软笔试题(1)
查看>>
IO流入门-第十章-DataInputStream_DataOutputStream
查看>>
DRF的分页
查看>>
Mysql 模糊匹配(字符串str中是否包含子字符串substr)
查看>>
IIS的ISAPI接口简介
查看>>
python:open/文件操作
查看>>
16 乘法口诀输出
查看>>
mac 常用地址
查看>>
鼠标经过切换图片
查看>>
流程控制 Day06
查看>>
Linux下安装Tomcat
查看>>
windows live writer 2012 0x80070643
查看>>
C程序的启动和终止
查看>>
tomcat 和MySQL的安装
查看>>
11.5 内部类
查看>>
Cosine Similarity
查看>>
halt和shutdown 的区别
查看>>
git常用操作
查看>>
京东SSO单点登陆实现分析
查看>>
u-boot启动第一阶段
查看>>