ListView滑动位置精准记忆
2016-03-17 19:33
225 查看
需求场景:
一个ListView页面,滑动阅读到某一位置,然后退出页面,下次再进入页面的时候,想要直接滑动到上次阅读的位置。
方案1:
页面退出的时候,ListView.getFirstVisiblePosition()来获取当前可见的第一个Item的position并记录,下次再进入页面的时候通过ListView.setSelection(int position)把ListView直接滑动到记忆的position。
此方案记忆的ListView的位置不够精准,因为position指定的是ListView的Item的index,setSelection(int pos)只能把index为pos的item作为第一个可见的item来显示,所以item总是顶头显示的,不会显示滑出屏幕一半的item,所以ListView的位置只能定位到某个item的开始位置,并不精准。
方案1的升级:
在方案1的基础上,再记录FirstVisiblePosition item的top/bottom等位置参数,然后恢复的时候ListView再scrollTo一下。
此方案仍然不行,ListView的scrollTo没效果。
终极方案:
退出页面的时候:
记住listState对象;
再次进入页面的时候:
记忆的位置分毫不差。
要注意:listView的状态记忆后,还要保证其数据在两次进入页面时的一致性;
另:ListView的header会影响其状态对象,不过这个是小问题。
一个ListView页面,滑动阅读到某一位置,然后退出页面,下次再进入页面的时候,想要直接滑动到上次阅读的位置。
方案1:
页面退出的时候,ListView.getFirstVisiblePosition()来获取当前可见的第一个Item的position并记录,下次再进入页面的时候通过ListView.setSelection(int position)把ListView直接滑动到记忆的position。
此方案记忆的ListView的位置不够精准,因为position指定的是ListView的Item的index,setSelection(int pos)只能把index为pos的item作为第一个可见的item来显示,所以item总是顶头显示的,不会显示滑出屏幕一半的item,所以ListView的位置只能定位到某个item的开始位置,并不精准。
方案1的升级:
在方案1的基础上,再记录FirstVisiblePosition item的top/bottom等位置参数,然后恢复的时候ListView再scrollTo一下。
此方案仍然不行,ListView的scrollTo没效果。
终极方案:
退出页面的时候:
1 | Parcelable listState = listView.onSaveInstanceState(); |
再次进入页面的时候:
1 | listView.onRestoreInstanceState(listState); |
要注意:listView的状态记忆后,还要保证其数据在两次进入页面时的一致性;
另:ListView的header会影响其状态对象,不过这个是小问题。
相关文章推荐
- QT 格式化字符串功能
- Android 使用动态加载框架DL进行插件化开发
- Problem q
- C语言中的static 详细分析
- JavaScript实现图片轮播
- 初学android
- Hadoop2.2.0 HA初体验
- 关于 md5 摘要
- Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论
- NSCache详解
- Lab1--关于安装JUnit的简要描述
- 2 GPS utility methods
- 夺命雷公狗---DEDECMS----8dedecms干掉首页和-文档页-栏目页的页面的广告
- Linux学习5之查找文件中的某个字符串并返回所在行号
- vector 释放内存 swap
- 用android studio 开发一个aidl小例子,亲测可运行
- 连续函数的最大值的连续性
- vs2015安装及初步试用
- PingUtil in Android
- 两篇文章掌握Python语法和内置函数功能(第一篇)