`

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

 
阅读更多

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

 

1、记录listView显示在屏幕上的第一个item的位置,然后利用listView.setSelection恢复

抱歉此方法无法准确恢复到原位置,只能定位到每个item的位置

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);

 

 

2、通知listView的适配器数据变更

这种适用于listView追加数据的情况,严格说不是恢复listView滚动的位置,只是保持滚动位置不错。但却最实用,只要listView的adapter不变就能恢复。

listDataAdapter.getDataList.addAll(newDataList());
listDataAdapter.notifyDataSetChanged();

 

 

分享到:
评论
10 楼 duxingzheZet 2017-07-29  
listview.getScrollY(); // 为啥总是0, 求解
9 楼 Trinea 2013-12-04  
gezexu 写道
gezexu 写道
riyuexingchen1204 写道
scrolledY = listView.getScrollY();
我得到的scrolledY为什么都是0?
请指教。谢谢。

scrolledY是view的方法,得到的是view在垂直方向上的偏移量,与listview没有关系,楼主不要误人子弟


针对listview想精确定位可以看这个方法setSelectionFromTop

非常感谢你的提醒,文章已修改,你说的setSelectionFromTop我会花时间测试下,可以的话补充到上面
8 楼 gezexu 2013-12-03  
gezexu 写道
riyuexingchen1204 写道
scrolledY = listView.getScrollY();
我得到的scrolledY为什么都是0?
请指教。谢谢。

scrolledY是view的方法,得到的是view在垂直方向上的偏移量,与listview没有关系,楼主不要误人子弟


针对listview想精确定位可以看这个方法setSelectionFromTop
7 楼 gezexu 2013-12-03  
riyuexingchen1204 写道
scrolledY = listView.getScrollY();
我得到的scrolledY为什么都是0?
请指教。谢谢。

scrolledY是view的方法,得到的是view在垂直方向上的偏移量,与listview没有关系,楼主不要误人子弟
6 楼 zhucebbs 2012-09-04  
Trinea 写道
zhucebbs 写道
请问currentMenuInfo 怎么定义,如何取值呢?

第一种方法行不通,其中的currentMenuInfo if判断可以 直接去掉


那请问有更有效的定位方法吗?
我是修改数据之后,再MyCursor.requery();就无法定位到原记录上。
5 楼 Trinea 2012-08-21  
zhucebbs 写道
请问currentMenuInfo 怎么定义,如何取值呢?

第一种方法行不通,其中的currentMenuInfo if判断可以 直接去掉
4 楼 zhucebbs 2012-08-16  
请问currentMenuInfo 怎么定义,如何取值呢?
3 楼 Trinea 2012-06-27  
riyuexingchen1204 写道
scrolledY = listView.getScrollY();
我得到的scrolledY为什么都是0?
请指教。谢谢。

抱歉,第二种方法有点问题,你还是用第一种或是第三种吧
2 楼 riyuexingchen1204 2012-06-27  
scrolledY = listView.getScrollY();
我得到的scrolledY为什么都是0?
请指教。谢谢。
1 楼 marchlqq 2012-06-11  
很不错……

相关推荐

    Android ListView滚动到指定的位置

    主要给大家介绍了Android中的ListView如何滚动到指定的位置,文章给出了两种解决的方法,并给出详细的示例代码,相信会对大家的理解和学习很有帮助,有需要的朋友们下面来一起看看吧。

    Android项目下拉刷新控件(ListView好ScrollView版).rar

    本资源为Android项目中的下拉刷新控件,支持ListView和ScrollView两种视图。该控件具有高度可定制性,可根据您的需求进行二次开发。 该下拉刷新控件采用流畅的动画效果,提供轻松的用户体验。当用户下拉刷新时,...

    WheelView:Android滚轮控件,基于ListView实现,可以自定义样式

    支持common和holo两种皮肤 支持文本和图文混排两中数据模版 支持循环显示数据 支持补充项添加附加文本 支持设置滚轮刻度 支持联动功能 支持嵌入滚动控件中( ) 支持滚轮这一 支持滚轮可选项点击事件 截屏 用法 ...

    图文混排listView

    多线程和异步请求两种方式实现,包含图片缓存和滚动是时优化

    双向ListViewDemo

    在这个基础上还需要是ListView的上侧和左侧的部分保持相对的不滚动.其实上下的滚动系统的ListView自己就可以完成,但是横向的滚动该如何实现呢,尤其是要在纵向的滚动的同时要兼顾左右的滚动.开始的时候没有什么思路,...

    quickscroll:[开发于2014年停止。未完成且不稳定-不建议使用。]将扩展的滚动功能引入Android的本地ListView和ExpandableListView

    它具有与ListView的本机fastscroll相同的滚动功能,但具有更多的可自定义设计,两种指示器样式和一个始终可见的滚动条。 两种最常见的模式是popup和indicator 。 与ListView和ExpandableListView一起使用。用法可以...

    Android入门到精通源代码.

    3.3 Activity的两种界面设计方式 3.3.1 基于XML的界面设计 3.3.2 基于代码的界面设计 3.4 应用实例:在界面中显示图片 第4章 Android人机界面和常用组件 4.1 用户人机界面元素分类 4.1.1 视图组件(View) 4.1.2 ...

    Android代码-WheelView

    支持common和holo两种皮肤 支持文本和图文混排两中数据模版 支持循环显示数据 支持选中项添加附加文本 支持设置滚轮刻度 支持联动功能 支持嵌入滚动控件中(NestedScrollView) 支持滚轮对话框 支持滚轮选中项点击事件...

    Android基础知识详解

    两个方向均可滚动 78 TabHost 79 ProgressBar、SeekBar、RatingBar 81 进度条(ProgressBar) 81 拖动条(SeekBar) 83 评分组件(RatingBar) 86 GridView、Gallery和ImageSwitcher 88 GridView 88 Gallery和...

    Android开发资料合集--续

    81、获得屏幕像素的两种方法 126 82、ShowDialog(int id); 126 83、透明效果的实现 128 84、根据网络或GPS获得经纬度 128 85、TextView 130 90、获取存储卡和手机内部存储空间 130 91、获得当前应用的UID 131 92、...

    精通ANDROID 3(中文版)1/2

    14.5.6 从两个位置控制唤醒锁  14.5.7 长期运行的服务的实现  14.5.8 测试长期运行的服务  14.6 代码编译说明  14.6.1 从ZIP文件创建项目  14.6.2 通过代码清单创建项目  14.7 参考资料  14.8 小结 ...

    Android开发资料合集-World版!

    4.5.2、menu实现的两种方法 58 4.5.3、自定义MENU背景 62 4.5.4、触发menu 64 4.5.5、Context Menu和Options Menu菜单的区别 64 4.5.6、Context menus for expandable lists 64 4.6、LISTVIEW 66 4.6.1、ListView...

    Android 开发技巧

    4.5.2、menu实现的两种方法 58 4.5.3、自定义MENU背景 62 4.5.4、触发menu 64 4.5.5、Context Menu和Options Menu菜单的区别 64 4.5.6、Context menus for expandable lists 64 4.6、LISTVIEW 66 4.6.1、ListView...

    精通Android 3 (中文版)2/2

    14.5.6 从两个位置控制唤醒锁  14.5.7 长期运行的服务的实现  14.5.8 测试长期运行的服务  14.6 代码编译说明  14.6.1 从ZIP文件创建项目  14.6.2 通过代码清单创建项目  14.7 参考资料  14.8 小结 ...

    ExpandableListViewDemo

    ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同的是,它可以有两层:每一层都能够被独立的展开并显示其子项。这些子项来自于与该视图关联的ExpandableListAdapter。 每一个可以扩展的列表项...

    金山卫士学习第一天源代码

    黑马程序员Android版金山卫士学习第一天源代码,...8、两种上下文 9、下载--FinalHttp 10、安装apk 11、应用程序的签名; 12、ListView gridView 数据适配 13、滚动的TextView 14、自定义组合控件 实现关闭自动更新;

    倒排索引源码java-react-native-recyclerview-list:ReactNative的RecyclerView实现

    倒排索引源码 java react-native-recyclerview-list ReactNative ...支持两种滚动方向:使用inverted prop来反转滚动方向 注意事项 它仅适用于Android。 只是垂直线性布局。 没有花哨的布局作为网格。

    点击展开并自动滚动到顶部

    点击展开并自动滚动到顶部,listview点击可以展开并自动滚动到顶部,同时包括上下拉动刷新,还有两种自定义风格的圆角dialog,当然这只是一个demo,大家可以了解一下。 详细说明:...

Global site tag (gtag.js) - Google Analytics