文档章节

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

少年追梦
 少年追梦
发布于 2015/06/12 15:36
字数 505
阅读 268
收藏 5

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
海淀
程序员
Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果

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

程序袁_绪龙
2015/08/13
0
0
ListView的一些常用设置

1:获取ListView的每一个item对象 2:让ListView上显示的数据按添加顺序显示 3:让ListView新增数据刷新 Android listView scroll 恢复滚动位置...

放纵的青春
2015/07/03
0
0
ListView在开发中的小技巧

如何取消Listview的滚动条? setVerticalScrollBarEnabled(false) 2.白色的背景,ListView滚屏进行中的时候,背景会变成黑色,解决办法? android:cacheColorHint="#00000000" 3.ListView滚动...

紫地瓜
2013/01/15
0
0
Android ListView 滑动背景为黑色的解决办法 listview小知识整理

在别的地方看到的,转过来作为记录!! 在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备...

假装是大神
2012/12/20
0
0
ScrollView 与ListView共存会存在滚动的问题

ScrollView 与ListView共存会存在滚动的问题,并且ListView只显示一个半Item。 当ListView的高度设定一定的值时,ListView同样地会显示对应的高度的Item。 因此我们可以计算出这个ListView的...

Jonson
2013/01/06
0
1

没有更多内容

加载失败,请刷新页面

加载更多

window.parent,top,window.self,parent,opener

在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法打开当前窗口的那个窗口。 wind...

inidcard
11分钟前
1
0
Linux下Redis的安装和部署

一、Redis介绍 Redis是当前比较热门的NOSQL系统之一 它是一个key-value存储系统。和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多,包括string、list、set...

曾大大胖
14分钟前
1
0
开源堡垒机jumpserver搭建

概述 之前说了国产良心kodexplorer,今天再说一个国内比较好的开源项目jumpserver,除此之外还可以的国内开源项目我觉得就是宝塔面板了。废话不多说上教程搭建。 虽然说你可以看下面的教程不...

bboysoulcn
19分钟前
2
0
iPhoneX 底部距离

iPhoneX 底部距离 CGFloat adjust = 0; if (@available(iOS 11.0, *)) { //Account for possible notch UIEdgeInsets safeArea = [[UIApplication sharedApplication] keyWindow].safeAreaIn......

壹峰
24分钟前
2
0
养生篇01 (饭水分离法)

作者简介❤李祥文,1939年出生于韩国庆尚北道尚州市成昌邑。 24岁时,偶遇奇人习得这种分别喝水吃饭的养生方法,从而治好了自己的胃病和哮喘。从此,李祥文对饮食之于人体的影响产生了极大的...

十九亿少女的梦
39分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部