`

2014.03.07 ——— android GridView 记录和恢复位置

 
阅读更多
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);

大功告成,^_^

分享到:
评论
1 楼 zhaoyubetter 2014-05-05  
什么意思,没看懂

相关推荐

    安卓Android源码——gridview分页效果.zip

    "安卓Android源码——gridview分页效果.zip"这个压缩包可能包含了一个实现GridView分页效果的示例项目。HorizontalGridView是GridView的一个扩展,它使得数据可以横向滚动,提供了更丰富的界面展示方式。 首先,...

    Android源码——GridView拖拽实例源码_new_07.7z

    这个“Android源码——GridView拖拽实例源码_new_07.7z”压缩包包含了实现GridView拖拽功能的示例代码,对于学习如何增强用户交互体验非常有帮助。 GridView的基础知识: 1. **定义**:GridView继承自AbsListView,...

    Android源码——GridView拖拽实例源码_new_07.zip

    这个"Android源码——GridView拖拽实例源码_new_07.zip"压缩包提供了一个关于GridView拖拽功能的具体实现示例。在本文中,我们将深入探讨GridView的拖拽功能及其在Android开发中的应用。 首先,我们需要理解...

    安卓Andriod源码——gridview分页效果.zip

    "安卓Andriod源码——gridview分页效果.zip"这个压缩包的学习可以帮助开发者理解和实现Android中的GridView分页效果,同时也能掌握HorizontalGridView的使用,提升Android应用的交互体验。实际开发时,应根据项目...

    安卓Android源码——gridview分页效果.rar

    这个"安卓Android源码——gridview分页效果.rar"文件很可能是包含了一个实现GridView分页效果的示例项目。分页在大数据量展示时尤为重要,因为它提高了用户体验,避免一次性加载大量数据导致应用性能下降或内存溢出...

    android Gridview分页实现

    gridView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView ...

    Gridview控件的使用详解..............

    GridView 控件是 ASP.NET 中的一个非常强大和灵活的数据显示控件,它可以用来显示大量的数据,并提供了许多功能来满足不同需求的应用场景。下面是 GridView 控件的使用详解,涵盖了它的各种功能和技巧。 1. ...

    安卓Android源码——GridView拖拽实例源码.zip

    本压缩包提供的“安卓Android源码——GridView拖拽实例源码”是一个实战案例,展示了如何实现GridView中的元素拖拽功能,这对于提升用户体验和增强应用交互性具有重要意义。 首先,我们需要理解GridView的基本用法...

    Android中文翻译组——Android中文API——android.widget合集(中)

    `Android中文翻译组——Android中文API——android.widget合集(中).chm`文件很可能是这个主题的中文参考手册,包含了这些控件的详细解释、使用示例和API文档,对于初学者来说是一份宝贵的资源。建议读者仔细阅读并...

    android gridview分页和滑动效果

    综上所述,实现Android GridView的分页和滑动效果涉及到的主要知识点包括:GridView的基础用法、Adapter的使用、滚动事件监听、自定义滚动效果以及用户体验优化。理解并掌握这些内容,可以帮助开发者创建出更加动态...

    Android 简单GridView使用.rar

    gridView.setAdapter(adapter); ``` 这里,`dataList`是存储数据的列表,`item_layout`是单个单元格的布局文件。 4. 单元格布局:在`item_layout.xml`中设计每个单元格的外观,例如: ```xml &lt;LinearLayout xmlns:...

    android学习——GridView

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id) { String selectedItem = items...

    Android GridView使用例子

    - `android:layout_width`和`android:layout_height`:定义GridView的宽度和高度,常用值有wrap_content和match_parent。 - `android:numColumns`:指定列数,可选自动(默认)或固定值。 - `android:...

    Android Studio —— GridView(模仿魅蓝手机下拉窗口)

    接着,在`PopupWindow`中添加`GridView`,并设置其位置和显示效果: ```java popup.showAsDropDown(button, 0, -button.getHeight()); // button是触发下拉的按钮 popup.setBackgroundDrawable(new ColorDrawable...

    AndroidGridView点击每一个图片进入个人页面渐变特效.zip

    在Android开发中,GridView是一种常用的布局控件,它允许我们以网格的形式展示数据。这个"AndroidGridView点击每一个图片进入个人页面渐变特效.zip"压缩包包含的资源可能是一个示例项目,展示了如何在GridView中实现...

    ——将GridView导出为PDF 通过itextsharp

    5. **允许全数据输出**:在转换前,`GridView.AllowPaging`属性被设置为`false`,目的是确保所有数据都能一次性输出到PDF,而不是只显示当前页的数据。 6. **Document对象**:iTextSharp库中的`Document`类代表PDF...

    Android 中ScrollView嵌套GridView.rar_GridView android_android_scrol

    在Android开发中,有时我们需要创建一个可滚动的...在提供的"Android 中ScrollView嵌套GridView,ListView的实例.pdf"文件中,应该包含了关于如何实际操作的详细步骤和示例代码,你可以参考这份文档来实践这一技术。

Global site tag (gtag.js) - Google Analytics