文档章节

【Android】 记录和恢复ListView滚动的位置的三种方法

少年追梦
 少年追梦
发布于 2015/06/12 15:36
字数 505
阅读 263
收藏 5
点赞 0
评论 0

Android 记录和恢复ListView滚动的位置的三种方法

本文主要介绍记录和恢复listView滚动位置的3种方法,记录listView滚动到的位置的坐标(推荐)、记录listView显示在屏幕上的第一个item的位置、通知适配器数据改变。

 

有时在view切换时,需要恢复listView之前滚动到的位置,鉴于网上已有资料说的都是第二种方法,而第二种方法本身在精确度上较差,自己找到了第一种方法分享下

 

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 = listView.getScrollX();
				scrolledY = listView.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 = listView.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();


本文转载自:http://www.cnblogs.com/trinea/archive/2012/04/11/2443093.html

共有 人打赏支持
少年追梦
粉丝 2
博文 51
码字总数 6940
作品 0
海淀
程序员
Java反射改变Android属性

Java反射改变Android属性 在某些情况下,Android体系里面的某些对象没有对外提供针对某个属性或者类,方法公开的get或者set方法,但是项目需要对这些需要修改和调整。就需要使用Java的反射机...

zhangphil ⋅ 04/28 ⋅ 0

Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果

转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17539199),请尊重他人的辛勤劳动成果,谢谢! 我在上一篇文章中Android 带你从源码的角度解析Scrol...

程序袁_绪龙 ⋅ 2015/08/13 ⋅ 0

RecyclerView使用总结-------上

前言 学习使用RecyclerView也有一段时间,一直都没有时间做个总结,就抽空想把RecyclerView的一些使用方法总结出来,方便大家也方便自己查阅。 简介 RecyclerView是support.v7包中的控件,可...

CaostGrace ⋅ 05/15 ⋅ 0

ListViewOnScrollListener详解(滑屏分页显示数据)

SCROLLSTATEFLING是指手指快速拖动后,手指离开,页面惯性滑动的状态。 ListView之滚动事件--OnScrollListener 在onScrollStateChanged(AbsListView view, int scrollState) 中,scrollState...

带梦想一7飞 ⋅ 2012/06/26 ⋅ 0

Android中View的绘制流程

安卓view的绘制流程主要分为三个阶段: 一、测量过程(mesure) 二、确定子元素的过程(layout) 三、绘制过程(draw) 我们在activity的oncread方法中会使用setContentView来填充一个布局 ...

小怪兽是程序员 ⋅ 06/07 ⋅ 0

RecyclerView各种使用方法

RecyclerView RecyclerView 比 ListView 更高级且更具灵活性。 它是一个用于显示庞大数据集的容器,可通过保持有限数量的视图进行非常有效的滚动操作。 如果您有数据集合,其中的元素将因用户...

zhw0596 ⋅ 04/20 ⋅ 0

Android 面试题之Listview(不断更新)

以下所有内容以及实用的知识点已被整理app,欢迎下载 下载方式一:酷安商城搜索Android_程序猿即可下载 下载方式二:扫描下载二维码进行下载 image.png Android 面试题之J2EE(不断更新) An...

蛋蛋松 ⋅ 2017/12/05 ⋅ 0

android ListView 九大重要属性详细分析

android ListView 九大重要属性详细分析 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下。 首先是stackFromBottom属性,这只该属性之后你做好的列表就会显示你列表的最下面,值...

抉择很难 ⋅ 2015/12/24 ⋅ 0

Android初级第一讲---Android开发环境的配置

博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 最近有些时间,但QQ群问的问题比较多,不能一一解答,如果有价值的,请来此文下方评论提问, 我会及时...

liuzxgeek ⋅ 2016/08/23 ⋅ 0

欢迎大家提问Android技术及职业生涯等问题

博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 最近有些时间,但QQ群问的问题比较多,不能一一解答,如果有价值的,请来此文下方评论提问, 我会及时...

liuzxgeek ⋅ 2016/08/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

开启Swarm集群以及可视化管理

在搭建的两台coreos服务器上开启swarm集群 前置条件: docker均开启2375端口 同一个局域网内 主服务器上安装Portainer容器 安装Portainer容器执行: docker run -d -p 9000:9000 --restart=a...

ykbj ⋅ 23分钟前 ⋅ 0

单例设计模式

1、单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 2、饿汉式单例类 在这个类被加载时,静态变量instance会被初始化,此时类的私有构造子会被调用 饿汉式是典型...

职业搬砖20年 ⋅ 28分钟前 ⋅ 0

前端基础(四):前端国际规范收集

字数:1142 阅读时间:5分钟 前言 由于前端技术的灵活性和杂乱性,导致网上的许多解决方案不够全面甚至是完全错误,容易起到误导作用。所以,我对搜索到的解决方案往往是存疑态度。那么,如何...

老司机带你撸代码 ⋅ 30分钟前 ⋅ 0

Failed to open/create Network-VirtualBox Host-Only

虚拟机版本 : Oracle Vm VirtualBox 5.2.12 报错时机:开网卡二,重启虚拟机报错 "Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Ada......

p至尊宝 ⋅ 33分钟前 ⋅ 0

三分钟学会如何在函数计算中使用 puppeteer

摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网...

阿里云云栖社区 ⋅ 36分钟前 ⋅ 0

springMVC接收表单时 Bean对象有Double Int Char类型的处理

前台ajax提交表单price为double类型 后台controller就介绍不到 400错误 前台 实体类: public class ReleaseMapIconConfig{ private String id; private long maxValue; private long minVal......

废柴 ⋅ 39分钟前 ⋅ 0

ZOOKEEPER安装

工作需要在ubuntu上配置了一个zookeeper集群,有些问题记录下来。 1. zookeeper以来java,所以首先要安装java。但是ubuntu系统有自带的jdk,需要通过命令切换java版本: $ sudo update-alter...

恰东 ⋅ 41分钟前 ⋅ 0

linux 进程地址空间的一步步探究

我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。 那虚拟内存空间...

HelloRookie ⋅ 42分钟前 ⋅ 0

myatis #{}与${}区别及原理

https://blog.csdn.net/wo541075754/article/details/54292751

李道福 ⋅ 45分钟前 ⋅ 0

三分钟学会如何在函数计算中使用 puppeteer

摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网...

猫耳m ⋅ 46分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部