2014.03.07 ——— android GridView 记录和恢复位置
关于listview的记录和恢复数据 参见
http://trylovecatch.iteye.com/blog/2002254
listview 里面 我们主要用了 setSelectionFromTop方法 来实现精确的恢复数据
但是 gridview里面没有这个方法 所以要实现这个方法就很费劲,下面是我的大概实现过程
1、setSelection
这个是可以的 但是就是不够精确
mGridView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
mPosition = mGridView.getFirstVisiblePosition();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
mGridView.setSelection(mPosition);
2、用gridview里面提供的api
smoothScrollBy
smoothScrollByOffset
smoothScrollToPositionFromTop
前两个我试了,都没有反应 第三个是可以的,但是如果GridView处于底部 好像就不管用了
mGridView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
mPosition = mGridView.getFirstVisiblePosition();
View v = mGridView.getChildAt(0);
mPositionTop = (v == null) ? 0 : v.getTop();
if(mItemHeight <= 0){
mItemHeight = v.getHeight();
}
System.out.println("position: " + mPosition + ", top: " + mPositionTop + ", mItemHeight: " + mItemHeight);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
}
mGridView.smoothScrollToPositionFromTop(mPosition , mPositionTop);
3、使用scrollTo
这个也是可以实现滚动的,但是每次都会调用 onScrollChanged(int,int ,int,int)方法,视图被视为无效,然后位置是恢复了,但是gridview下面是空白的 只显示position的那一两行
mGridView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
mPosition = mGridView.getFirstVisiblePosition() / 3;
View v = mGridView.getChildAt(0);
mPositionTop = (v == null) ? 0 : v.getTop();
if(mItemHeight <= 0){
mItemHeight = v.getHeight();
}
System.out.println("position: " + mPosition + ", top: " + mPositionTop + ", mItemHeight: " + mItemHeight);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
mGridView.scrollTo(0, mPosition * mItemHeight + Math.abs(mPositionTop) + mPosition * 10 * 2);
4、嵌套ScrollView
通过3证明了scrollto是可以实现恢复position,所以我想可以再Gridview 外面套一层ScrollView,用它来控制GridView的显示,关于嵌套 参考
http://trylovecatch.iteye.com/blog/2002254
4.1、自定义GridView
public class MyGridView extends GridView {
public MyGridView (Context context) {
super(context);
}
public MyGridView(Context context, android.util.AttributeSet attrs) {
super(context, attrs);
}
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
4.2、布局文件
<ScrollView
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:id="@+id/local_scroll_view"
>
<com.test.MyGridView
android:id="@+id/local_grid_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:cacheColorHint="#ffffff"
android:clipToPadding="false"
android:columnWidth="100dip"
android:divider="@android:color/transparent"
android:dividerHeight="10dp"
android:fadingEdge="none"
android:listSelector="@android:color/transparent"
android:numColumns="3"
android:paddingLeft="@dimen/download_layout_horizontal_margin"
android:paddingRight="@dimen/download_layout_horizontal_margin"
android:scrollbars="vertical"
android:scrollbarStyle="outsideOverlay" />
</ScrollView>
4.3、记录和恢复
@Override
public void onPause() {
super.onPause();
mScrollY = mScroll.getScrollY();
System.out.println("mScrollY: " + mScrollY);
}
mScroll.postDelayed(new Runnable() {
@Override
public void run() {
mScroll.scrollTo(0, mScrollY);
}
}, 200);
大功告成,^_^
分享到:
相关推荐
"安卓Android源码——gridview分页效果.zip"这个压缩包可能包含了一个实现GridView分页效果的示例项目。HorizontalGridView是GridView的一个扩展,它使得数据可以横向滚动,提供了更丰富的界面展示方式。 首先,...
这个“Android源码——GridView拖拽实例源码_new_07.7z”压缩包包含了实现GridView拖拽功能的示例代码,对于学习如何增强用户交互体验非常有帮助。 GridView的基础知识: 1. **定义**:GridView继承自AbsListView,...
这个"Android源码——GridView拖拽实例源码_new_07.zip"压缩包提供了一个关于GridView拖拽功能的具体实现示例。在本文中,我们将深入探讨GridView的拖拽功能及其在Android开发中的应用。 首先,我们需要理解...
"安卓Andriod源码——gridview分页效果.zip"这个压缩包的学习可以帮助开发者理解和实现Android中的GridView分页效果,同时也能掌握HorizontalGridView的使用,提升Android应用的交互体验。实际开发时,应根据项目...
这个"安卓Android源码——gridview分页效果.rar"文件很可能是包含了一个实现GridView分页效果的示例项目。分页在大数据量展示时尤为重要,因为它提高了用户体验,避免一次性加载大量数据导致应用性能下降或内存溢出...
gridView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView ...
GridView 控件是 ASP.NET 中的一个非常强大和灵活的数据显示控件,它可以用来显示大量的数据,并提供了许多功能来满足不同需求的应用场景。下面是 GridView 控件的使用详解,涵盖了它的各种功能和技巧。 1. ...
本压缩包提供的“安卓Android源码——GridView拖拽实例源码”是一个实战案例,展示了如何实现GridView中的元素拖拽功能,这对于提升用户体验和增强应用交互性具有重要意义。 首先,我们需要理解GridView的基本用法...
`Android中文翻译组——Android中文API——android.widget合集(中).chm`文件很可能是这个主题的中文参考手册,包含了这些控件的详细解释、使用示例和API文档,对于初学者来说是一份宝贵的资源。建议读者仔细阅读并...
综上所述,实现Android GridView的分页和滑动效果涉及到的主要知识点包括:GridView的基础用法、Adapter的使用、滚动事件监听、自定义滚动效果以及用户体验优化。理解并掌握这些内容,可以帮助开发者创建出更加动态...
gridView.setAdapter(adapter); ``` 这里,`dataList`是存储数据的列表,`item_layout`是单个单元格的布局文件。 4. 单元格布局:在`item_layout.xml`中设计每个单元格的外观,例如: ```xml <LinearLayout xmlns:...
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String selectedItem = items...
- `android:layout_width`和`android:layout_height`:定义GridView的宽度和高度,常用值有wrap_content和match_parent。 - `android:numColumns`:指定列数,可选自动(默认)或固定值。 - `android:...
接着,在`PopupWindow`中添加`GridView`,并设置其位置和显示效果: ```java popup.showAsDropDown(button, 0, -button.getHeight()); // button是触发下拉的按钮 popup.setBackgroundDrawable(new ColorDrawable...
在Android开发中,GridView是一种常用的布局控件,它允许我们以网格的形式展示数据。这个"AndroidGridView点击每一个图片进入个人页面渐变特效.zip"压缩包包含的资源可能是一个示例项目,展示了如何在GridView中实现...
5. **允许全数据输出**:在转换前,`GridView.AllowPaging`属性被设置为`false`,目的是确保所有数据都能一次性输出到PDF,而不是只显示当前页的数据。 6. **Document对象**:iTextSharp库中的`Document`类代表PDF...
在Android开发中,有时我们需要创建一个可滚动的...在提供的"Android 中ScrollView嵌套GridView,ListView的实例.pdf"文件中,应该包含了关于如何实际操作的详细步骤和示例代码,你可以参考这份文档来实践这一技术。