android安卓开发设置adapter以后让界面显示设置的位置
2017-01-07 14:22
218 查看
文章说明:本文是页面里listview展示并设置了HeaderView和FooterView,设置adapter以后让界面显示自己设置的位置开始往下展示数据。
在开发的时候碰到这样一个需求,在请求完某个接口更新数据以后,需要再请求一下整个页面的数据,如果说重新加载的话,页面会知己跳到最开始显示,这样的造成的用户体验非常不友好,现在的情况是即使重新加载数据也不会让用户知道页面的数据重新加载了,重新加载数据之前界面显示在什么位置,重新加载数据以后也显示到什么位置,即图中所示headerView出去了屏幕一些。
先贴一个自己画的图:
按图分析是这样:如果想达到这样的效果,需要记录一下视图在屏幕外的高度,下次显示的时候让其从此处显示即可,具体解决问题办法如下。
步骤:
1.给listview设置ScrollListener,用来监听页面滚动了多少距离并记录下此位置
2.设置setAdapter显示的时候利用lv.setSelectionFromTop(position,distance)方法设置视图呈现的位置。
此处记录位置的代码需要贴一下:
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
由于我只是从我的用处角度来写的这些东西,如果您有类似的更复杂的需求还是要结合实际分析需要显示的位置,或是要更动态的获取,或需要其他情况的处理才能解决。
在开发的时候碰到这样一个需求,在请求完某个接口更新数据以后,需要再请求一下整个页面的数据,如果说重新加载的话,页面会知己跳到最开始显示,这样的造成的用户体验非常不友好,现在的情况是即使重新加载数据也不会让用户知道页面的数据重新加载了,重新加载数据之前界面显示在什么位置,重新加载数据以后也显示到什么位置,即图中所示headerView出去了屏幕一些。
先贴一个自己画的图:
按图分析是这样:如果想达到这样的效果,需要记录一下视图在屏幕外的高度,下次显示的时候让其从此处显示即可,具体解决问题办法如下。
步骤:
1.给listview设置ScrollListener,用来监听页面滚动了多少距离并记录下此位置
2.设置setAdapter显示的时候利用lv.setSelectionFromTop(position,distance)方法设置视图呈现的位置。
此处记录位置的代码需要贴一下:
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
private SparseArray recordSp = new SparseArray(0); private int mCurrentfirstVisibleItem = 0; @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { mCurrentfirstVisibleItem = firstVisibleItem; View firstView = view.getChildAt(0); if (null != firstView) { ItemRecod itemRecord = (ItemRecod) recordSp.get(firstVisibleItem); if (null == itemRecord) { itemRecord = new ItemRecod(); } itemRecord.height = firstView.getHeight(); itemRecord.top = firstView.getTop(); recordSp.append(firstVisibleItem, itemRecord); } show_pos = getScrollY(); } private int getScrollY() { int height = 0; for (int i = 0; i < mCurrentfirstVisibleItem; i++) { ItemRecod itemRecod = (ItemRecod) recordSp.get(i); height += itemRecod.height; } ItemRecod itemRecod = (ItemRecod) recordSp.get(mCurrentfirstVisibleItem); if (null == itemRecod) { itemRecod = new ItemRecod(); } return height - itemRecod.top; } class ItemRecod { int height = 0; int top = 0; } });
由于我只是从我的用处角度来写的这些东西,如果您有类似的更复杂的需求还是要结合实际分析需要显示的位置,或是要更动态的获取,或需要其他情况的处理才能解决。
相关文章推荐
- iOS开发(iPad/iPhone)设置app界面 默认横向显示的两种方法
- 解决Android开发中ViewPager动态设置PagerAdapter时第二次进入Fragment内容不显示的问题
- iOS开发(iPad/iPhone)设置app界面 默认横向显示的两种方法
- 学习iOS开发之设置地图初始显示区域为当前位置
- 解决Android开发中ViewPager动态设置PagerAdapter时第二次进入Fragment内容不显示的问题
- iOS开发-- 设置UIButton的文字显示位置、字体的大小、字体的颜色
- (界面笔记之二十七)设置按钮图标可用不可用的图标显示(CBitmapButton的使用)
- 使用C#和Excel进行报表开发(七)-设置单元格的显示格式
- 使用C#和Excel进行报表开发(七)-设置单元格的显示格式
- 使用C#和Excel进行报表开发(七)-设置单元格的显示格式 【转】
- 我的VS2005采用的是web开发设置。不知道动到了那里,现在每次按F5启动调试的时候总是不能成功启动调试。效果和按CTRL+F5一样。就是把项目显示在了浏览器之后,那个启动调试的绿色按钮还可以使用,不是暗色的。
- 随意设置Form的显示位置
- div层滑动条自动显示并固定设置滑动条默认滑动块位置
- 使用C#和Excel进行报表开发(七)-设置单元格的显示格式
- CUDA开发环境高亮显示设置(转)
- 使用C#和Excel进行报表开发(七)-设置单元格的显示格式
- LWUIT Dimension的设置位置与容器最终显示相关的一个例子
- tomcat管理界面常用设置(2)-禁止TOMCAT显示文件和文件夹
- 使用C#和Excel进行报表开发(七)-设置单元格的显示格式
- 使用C#和Excel进行报表开发(七)-设置单元格的显示格式