android开发之记录ListView滚动位置
2015-09-06 17:35
405 查看
这个问题本身不难,但是由于项目中的需求太过于复杂,结果导致这个问题变得不是那么容易实现。在网上一搜,结果如下:
我不知道是who copy who?反正介绍的所谓的三种方法,第一种都是无法运行的,很明显的bug,第二三种方法都是入门级知识,这几位大哥写博客自己都不先运行一下吗?
唉,不吐槽了,说说我的解决方案吧:
在需要记录滚动位置的地方执行下面的操作:
getFirstVisiblePosition方法用来记录当前第一个可见item的索引。
int scrollTop = (v1 == null) ? 0 : v1.getTop();用来记录当前第一个可见item的偏移量。
注意
在你的项目中,你可能需要给
在需要恢复滚动位置的地方执行如下操作:
有些人可能会选择记录下当前第一个可见item的位置,然后用setSelection方法来恢复位置,这样不是不可以,但是不够精确,因为很多情况下我们ListView中最上面的item不一定是刚刚显示出来,可能显示了一半隐藏了一半。所以个人认为上面介绍的方法比较合适。
我不知道是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不一定是刚刚显示出来,可能显示了一半隐藏了一半。所以个人认为上面介绍的方法比较合适。
相关文章推荐
- Android 中的 AOP 编程
- Android Studio启动后一直 Checking for updated SDK components
- Android——button控件使用
- Android AndroidManifest 清单文件以及权限详解!【转】
- Android应用监听自己被卸载
- Android View绘制过程
- 让输入框在Android上全屏显示
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- Android 增强版百分比布局库 为了适配而扩展
- [翻译]android中如何使得ListView滑动流畅
- Android国际化问题
- Android ViewPager 和 TabPageIndicator 的限制滑动和禁用点击
- Android 百分比布局库(percent-support-lib) 解析与扩展
- 【Paint】Android 自定义View之Paint篇(更新中...)
- Android Region代码分析
- Android第一步
- Android studio工程有重复包时报错
- Android 自己实现 NavigationView
- Android 禁止应用在模拟器上运行的实现
- android下Json操作