`

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滚动到指定位置的方法,并提供相应的示例代码。 ### 方法一:setSelection(position) `setSelection(position)` 是最直接的方式,它会立即将ListView的焦点移动到指定的`...

    Android ListView滚动到底部自动加载数据

    `Android ListView滚动到底部自动加载数据`是一个常见的功能需求,特别是在实现无限滚动或者分页加载的场景下,比如社交媒体应用、电商应用的商品列表等。当用户滚动到ListView的底部时,系统自动触发加载更多数据的...

    android的listview嵌套listview,列表嵌套列表 android studio版本

    在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。当需求涉及列表中的每个条目本身也需要展示一个子列表时,我们就会遇到ListView的嵌套问题。本教程将详细讲解如何在Android Studio环境下...

    解决Android ListView滚动布局错位

    综上所述,解决Android ListView滚动布局错位的关键在于正确地管理视图类型,并在`getView()`方法中确保视图的复用符合数据的类型。同时,实现多布局时要保持逻辑清晰,避免混淆不同类型的视图。通过这些方法,你...

    Android-滑动listview标题置顶listview吸顶效果

    另一种方法是结合使用`CoordinatorLayout`和`AppBarLayout`,这两种组件是Android Design Support Library的一部分,可以轻松实现吸顶效果。 至于安卓系统状态栏透明化,这是Android 5.0 (Lollipop) 引入的一项特性...

    解决scrollView和listview滚动冲突,实现listview滑动到顶端和底部之后还能拖拽一定的距离,松开后返回

    在Android开发中,ScrollView和ListView是两种常用的布局组件,它们分别用于实现可滚动的大视图和展示多行可滚动的数据列表。然而,在实际应用中,当这两种组件同时存在于一个界面时,滚动冲突的问题就会出现,导致...

    Android支持横行滚动的ListView控件

    然而,标准的ListView默认是垂直滚动的,而"Android支持横行滚动的ListView控件"则为开发者提供了一种新的布局方式,使得ListView可以进行水平方向的滚动。这种特性通常通过自定义Adapter和使用HorizontalScrollView...

    Android ListView 无限循环滚动源码

    当ListView滚动到底部时,我们可以将辅助数据集的顶部数据添加到主数据集的底部,同时将主数据集的顶部数据移动到辅助数据集中。同样,当滑动到顶部时,执行相反的操作。 在适配器中,重写`getView()`方法至关重要...

    ListView的两种实现方法

    在Android开发中,ListView是一种非常常见的视图组件,它用于展示大量的数据列表,通常与Adapter配合使用,可以实现数据的动态加载和滚动效果。本文将详细介绍两种实现ListView的方法:一种是继承自`...

    android listview带有editText

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。然而,当在ListView的每一项中嵌套EditText时,会遇到一些挑战,主要包括EditText的焦点管理问题和数据错位问题。这两个问题在实际应用...

    ListView块状滚动条加分批加载数据

    在`onScroll()`方法中,检查当前滚动位置是否接近底部,通常通过比较滚动位置和总项数的关系来判断。 2. **加载更多数据逻辑** 当检测到用户滑动到列表底部时,调用一个接口或者广播来触发数据加载。后台加载新的...

    解决ScrollView,ListView滚动条冲突

    在Android开发中,ScrollView和ListView是两种常用的布局控件,分别用于实现单向滚动和多行列表滚动。然而,当这两个控件同时出现在一个布局中时,常常会出现滚动条冲突的问题,导致用户体验下降。本篇文章将详细...

    android两列显示两个listview

    在提供的压缩包文件"android两列显示两个listview"中,可能包含了示例代码或资源,用于演示如何实现上述的一种或多种方法。开发者可以参考这些代码来理解具体实现步骤,并根据自己的项目需求进行调整。记住,优化...

    两个ListView同步滑动

    在Android开发中,ListView是一种常见的数据展示控件,它能够高效地显示大量数据,并支持滚动操作。当需要在一个屏幕上展示两个相关的ListView时,有时我们希望它们可以同步滑动,即一个ListView滑动时,另一个...

    listview自动滚动

    两种方法的原理相同,只是调用的API不同。 在实际应用中,我们可能需要根据ListView的当前位置和总数量来调整滚动距离和频率,以确保列表能够完整循环。例如,当ListView滚动到最后一项时,应该重新滚动到第一项,...

    android一个Activity里面多个listview

    6. **滚动同步**:如果你希望两个ListView同步滚动,可以通过监听每个ListView的滚动事件,并在事件处理中调整另一个ListView的位置。这通常需要自定义滚动逻辑。 7. **资源复用**:为了节省内存,可以考虑复用...

    listview textview水平滚动

    在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。然而,有时我们希望在ListView的每一项中包含的TextView能够实现水平滚动效果,这样可以更好地展示宽度过大的文本内容。本教程将深入探讨如何...

    Android中ListView添加头部

    添加头部到ListView主要有以下两种方法: 1. **使用HeaderView参数**: 在`Adapter`的构造函数中,我们可以传入一个或多个视图作为头部。这些视图将被添加到ListView的顶部。例如,如果你有一个已经创建好的布局...

    Android 双ListView 联动

    3. 协调滚动:为了保持联动效果,可能需要监听两个ListView的滚动事件,当一个ListView滚动时,同步调整另一个ListView的位置,确保展示的内容与用户选择的层级对应。 三、联动实现方式 1. 通过接口:定义一个接口...

    Android万能GridView和ListView

    在Android开发中,GridView和ListView是两种常用的布局控件,它们用于展示大量数据,并且可以进行滚动操作。这两个控件都是AdapterView的子类,因此它们的数据管理方式都是通过Adapter来实现的。在这个项目中,我们...

Global site tag (gtag.js) - Google Analytics