android 记录和恢复ListView滚动的位置 四种方法
16lz
2021-01-24
方法1 setOnScorll Listener 方法,记录滑动位置
方法2 setOnScorllListener方法,记录滑动的position
方法三 让适配器和List关联起来(初次理解可能会有点难,但理解之后,你会发现很好用)
方法四 Google推荐的方法:
方法5 和方法一类似 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0924/1711.html
listview的 getScrollY()方法返回0 可以用这个方法获取
最后 listView.scrollTo(0, getScrollY());
listView.setOnScrollListener(new OnScrollListener() { /** * 滚动状态改变时调用 */ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // 不滚动时保存当前滚动到的位置 if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { if (currentMenuInfo != null) { scrolledX = statusListView.getScrollX(); scrolledY = statusListView.getScrollY(); } } } /** * 滚动时调用 */ @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } });恢复时使用: listView.scrollTo(scrolledX,scrolledY);
方法2 setOnScorllListener方法,记录滑动的position
listView.setOnScrollListener(new OnScrollListener() { /** * 滚动状态改变时调用 */ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // 不滚动时保存当前滚动到的位置 if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { position = statusListView.getFirstVisiblePosition(); } } /** * 滚动时调用 */ @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } });恢复时调用:listView.setSelection(position);
方法三 让适配器和List关联起来(初次理解可能会有点难,但理解之后,你会发现很好用)
listView.setAdapter(listDataAdapter);listDataAdapter.getDataList.removeAll(newRemoveList()); listDataAdapter.getDataList.addAll(newDataList()); listDataAdapter.notifyDataSetChanged();这种适用于listView追加数据的情况,严格说不是恢复listView滚动的位置,只是保持滚动位置不变
方法四 Google推荐的方法:
// save index and top positionint index = mList.getFirstVisiblePosition();View v = mList.getChildAt(0);int top = (v == null) ? 0 : v.getTop();// ...// restoremList.setSelectionFromTop(index, top);
方法5 和方法一类似 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0924/1711.html
listview的 getScrollY()方法返回0 可以用这个方法获取
public int getScrollY() { View c = mListView.getChildAt(0); if(c == null) { return0; } int firstVisiblePosition = mListView.getFirstVisiblePosition(); int top = c.getTop(); return-top + firstVisiblePosition * c.getHeight() ;}
最后 listView.scrollTo(0, getScrollY());
更多相关文章
- android中EditText只允许输入汉字(过滤汉字)
- Android界面的架构图
- Android(安卓)5.0以上版本去掉Button自带阴影效果的方法
- android CTS测试使用方法
- android之数组排序
- Android(安卓)MediaPlayer类
- Android(安卓)WebView开发常见问题
- Android(安卓)启动分析-init进程&init.rc
- android 广告栏 viewpager