2014.01.10 ——— android listview 记录和恢复位置
参考:
http://stackoverflow.com/questions/3014089/maintain-save-restore-scroll-position-when-returning-to-a-listview
首先网上流行的方法
http://www.linuxidc.com/Linux/2012-04/58601.htm,如这篇文章里面说的,第二种方法不精确,而第一种方法我试了不管用,getScrollX和getScrollY一直都是返回0的
靠谱的方法:
1、
private Parcelable mPositionState;
....
if(mPositionState==null){
mPositionState=mVideoList.onSaveInstanceState();
}else{
mVideoList.onRestoreInstanceState(mPositionState);
}
....
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
mPositionState=mVideoList.onSaveInstanceState();
}
}
这个我试了,可行的 ,而且是纯天然的,但是有一个问题,就是我这个listview添加了header,感觉就算没有也是一样的,不如一个item比较长,第一屏里面显示一个item,而且显示不全,这个时候向下滑动,第二个item没有显示的时候,每次都会恢复到第一个item的最上面,算是稍微有点瑕疵吧
2、
private int mPosition;
private int mPositionTop;
...
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
mPosition = mVideoList.getFirstVisiblePosition();
View v = mVideoList.getChildAt(0);
mPositionTop = (v == null) ? 0 : v.getTop();
}
}
.....
//这个更精确,第二个参数表示当前position的top值
mVideoList.setSelectionFromTop(mPosition, mPositionTop);
关于getChildAt方法 参见
http://trylovecatch.iteye.com/blog/1098442,这个方法是从屏幕里显示的item开始算起的
我用的是这种方法,这种方法解决了上面的问题,很精确
分享到:
相关推荐
这篇博客"2011.08.26——— android ListView之多个item布局"深入探讨了如何在ListView中实现多个不同类型的Item布局,这对于创建动态、丰富的用户界面至关重要。在Android应用设计中,ListView通常用于显示如联系人...
在本章节中,“Google.Android开发入门与实战第12章.Android综合案例一——RSS阅读器实例”主要聚焦于Android应用程序开发中的一个实际应用场景——构建一个RSS阅读器。这个实例将帮助初学者理解如何将Android SDK的...
本压缩包"安卓Android源码——重写listview实现下拉刷新.zip"就是针对这一需求提供的一种解决方案。 首先,我们来理解下拉刷新这一概念。下拉刷新是一种常见的移动应用设计模式,用户通过在ListView顶部向下拉动,...
总的来说,这个项目展示了如何在Android平台上利用ListView和自定义Adapter来实现一个功能完善的树状结构,这对于学习Android UI设计和数据适配器模式是非常有价值的实践。通过分析源码,开发者可以深入理解Android...
本资源"Android源码——listView学习源码.zip"包含了对ListView工作原理的详细解析,以及可能的实践代码示例。 ListView的核心功能在于它可以动态加载和回收视图,以优化内存使用。当用户滚动列表时,ListView会...
这个压缩包“Android源码——ListView分页功能源码.zip”可能包含了实现这一功能的具体代码示例。 在Android中实现ListView分页,通常有以下几种方法: 1. **使用Adapter和Pagination**: - 你需要创建一个自定义...
综上所述,"Demo_ListView.zip_DEMO_FFN_ListView_android" 这个DEMO项目是一个关于Android中ListView的实例,它演示了如何结合EditText实现动态搜索功能,以及如何通过Adapter和Filterable接口来处理和展示数据。...
这份"安卓Android源码——listView.rar"压缩包很可能包含了一份关于ListView自定义实现和优化的源代码示例。下面我们将深入探讨ListView在Android中的工作原理、常见用法以及如何进行性能优化。 首先,ListView基于...
通过`convertView.getVisibility()`或`ListView.getChildCount()`和`ListView.getFirstVisiblePosition()`、`ListView.getLastVisiblePosition()`等方法,我们可以确定哪些列表项在可视区域,优先加载这些项的图片。...
本项目“安卓Android源码——动态ListView,支持异步更新列表,异步更新图片”提供了一种解决方案,通过异步加载机制优化用户体验。 1. **ListView的工作原理**: - ListView通过复用convertView来提高性能,减少...
这份"安卓Android源码——listView1.rar"压缩包很可能是包含了一个关于ListView使用和自定义的示例项目。在Android开发中,理解ListView的工作原理以及如何有效地优化其性能是非常重要的知识点。 1. **ListView基本...
博客《Animation动画详解(十三)——实现ListView Item进入动画》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/50988685
在Android开发中,ListView是一种常用的控件,用于展示大量数据列表。当ListView的每个Item包含可交互元素,如按钮时,我们需要为这些按钮添加点击事件。这篇文章将详细讲解如何在ListView的每个Item上的按钮上设置...
本示例“安卓Android源码——ListView下拉刷新 Demo.zip”提供了一个具体的实现,帮助开发者理解和实现这一功能。 首先,我们要了解下拉刷新的基本原理。下拉刷新通常由两部分组成:UI动画和数据加载逻辑。UI动画是...
这个压缩包文件"安卓Android源码——android相册系统(用Matrix实现).zip"包含了一个使用Matrix类来实现的相册系统源码。Matrix是Android图形库中的一个关键类,它允许开发者对图像进行平移、旋转、缩放等变换操作。...
这个"安卓Android源码——ListView下拉刷新Demo.zip"包含了一个实现ListView下拉刷新功能的示例代码,这对于理解和应用这种常见用户交互模式至关重要。下拉刷新是移动应用中常见的功能,允许用户通过在列表顶部向下...
这份"安卓Android源码——listView学习源码.zip"压缩包提供了学习ListView的源码,非常适合开发者深入理解ListView的工作原理和实现方式。在这个源码分析中,我们将探讨ListView的关键特性、工作流程以及如何自定义...
这个压缩包“安卓Android源码——android相册系统(用Matrix实现).rar”显然提供了一个使用Matrix类来实现相册功能的示例代码。Matrix是Android SDK中的一个关键类,用于进行2D图像变换,如旋转、缩放、平移等。接...
`Android中文翻译组——Android中文API——android.widget合集(中).chm`文件很可能是这个主题的中文参考手册,包含了这些控件的详细解释、使用示例和API文档,对于初学者来说是一份宝贵的资源。建议读者仔细阅读并...
Android Menu和ListView 整合设计 源码 package com.MyMenu; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.os.Bundle; import ...