Listview加载更多是,恢复到原来的位置,如果不加特殊处理,总是跳转第一条
2024-10-14 06:51:48
1、记录listView滚动到的位置的坐标,然后利用listView.scrollTo精确的进行恢复
- listView.setOnScrollListener(new OnScrollListener() {
- /**
- * 滚动状态改变时调用
- */
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- // 不滚动时保存当前滚动到的位置
- if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
- if (currentMenuInfo != null) {
- scrolledX = statusListView.getScrollX();
- scrolledY = statusListView.getScrollY();
- }
- }
- }
- /**
- * 滚动时调用
- */
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- }
- });
在恢复位置时调用
- listView.scrollTo(scrolledX, scrolledY);
2、记录listView显示在屏幕上的第一个item的位置,然后利用listView.setSelection恢复
这是网上能找到的最普遍的一种方式,但是却无法准确恢复到原位置,只能定位到每个item的位置,推荐使用第1种
- listView.setOnScrollListener(new OnScrollListener() {
- /**
- * 滚动状态改变时调用
- */
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- // 不滚动时保存当前滚动到的位置
- if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
- position = statusListView.getFirstVisiblePosition();
- }
- }
- /**
- * 滚动时调用
- */
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- }
- });
在恢复位置时调用
- listView.setSelection(position);
由于此方式的缺陷加上可以使用listView.scrollTo(x, y)滚动到某个位置,如scrollView.scrollTo(0, 0)表示滚动到顶部这点想到第一种方式,从而实现精确无误的滚动位置恢复
3、通知listView的适配器数据变更
这种适用于listView追加数据的情况,严格说不是恢复listView滚动的位置,只是保持滚动位置不错
- listDataAdapter.getDataList.addAll(newDataList());
- listDataAdapter.notifyDataSetChanged();
最新文章
- 10.Configure One-to-Many(配置一对多关系)【Code-First系列】
- 字符串判断设置TextView高度
- python获取命令行变量
- 微软颜龄Windows Phone版开发小记
- js中正则表达式 书写方法
- C++@类的静态成员变量和静态成员函数
- http://my.oschina.net/u/1185331/blog/502350
- String类中的equals()方法
- c++学习_1
- redux学习笔记
- ZOJ 2760 How Many Shortest Path(Dijistra + ISAP 最大流)
- Java之美[从菜鸟到高手演变]之设计模式三
- 部署在sae上的servlet程序出现is not a javax.servlet.Servlet 错误
- laravel框架详解
- Achievements
- C#标准体重判断
- ROS rosrun 调用 sudo 命令
- php 建站 多域名配置 自定义重定向
- Eclipse4.6安装Tomcat插件时报错:Unable to read repository at http://tomcatplugin.sf.net/update/content.xml. Received fatal alert: handshake_failure
- JVM调优总结(2):基本垃圾回收算法
热门文章
- HTML5 文件域+FileReader 分段读取文件并上传(八)-WebSocket
- Eclipse设立不格式化注释
- JAVA package与import机制
- c#读取文件
- power desinger 学习笔记<;五>;
- JS 通过系统时间限定 动态添加 select option
- 【BZOJ2648】【kd_tree】SJY摆棋子
- request.getSession()
- golang bufio writer,reader 缓存规则
- C# winform 递归选中TreeView子节点