Android--记录和恢复listView滚动位置的3种方法 (20
2015-09-27 08:49
507 查看
有时在view切换时,需要恢复listView之前滚动到的位置,常用的三种方法如下:
1、记录listView滚动到的位置的坐标,然后利用listView.scrollTo精确的进行恢复
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
if (currentMenuInfo!=null) {
scrolledX = listView.getScrollX();
scrolledY = listView.getScrollY();
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
在恢复位置时调用:
listView.scrollTo(scrolledX, scrolledY);
2、记录listView显示在屏幕上的第一个item的位置,然后利用listView.setSelection恢复
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
position = listView.getFirstVisiblePosition();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
3、通知listView的适配器数据变更
这种适用于listView追加数据的情况,严格说不是恢复listView滚动的位置,只是保持滚动位置不错
1、记录listView滚动到的位置的坐标,然后利用listView.scrollTo精确的进行恢复
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
if (currentMenuInfo!=null) {
scrolledX = listView.getScrollX();
scrolledY = listView.getScrollY();
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
在恢复位置时调用:
listView.scrollTo(scrolledX, scrolledY);
2、记录listView显示在屏幕上的第一个item的位置,然后利用listView.setSelection恢复
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
position = listView.getFirstVisiblePosition();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
</pre><p style="margin-top: 0px; margin-bottom: 5px; padding-top: 0px; padding-bottom: 0px; border: 0px; list-style: none; word-wrap: normal; word-break: normal; line-height: 21.600000381469727px;"><span style="background-color: rgb(255, 204, 102);">在恢复位置时调用:</span></p><pre name="code" style="white-space: normal;"><span style="background-color: rgb(255, 204, 102);">listView.setSelection(position);</span>
3、通知listView的适配器数据变更
这种适用于listView追加数据的情况,严格说不是恢复listView滚动的位置,只是保持滚动位置不错
<span style="background-color: rgb(255, 204, 102);">listDataAdapter.getDataList.addAll(newDataList()); listDataAdapter.notifyDataSetChanged();</span>
相关文章推荐
- android 用Parcelable在组件中传递List集
- android中tesseract-ocr的介绍
- android第一个用户进程Init进程
- Android入门——Broadcast Receiver详解与应用
- Android 5.1 Contacts源码分析(二):Contacts模块主要窗口
- SearchView+RecyclerView+GreenDao的搜索功能实现(1)
- android接收和发送短信代码-BroadcastReceiver应用
- Android - 禁止Gridview滚动
- android AnimatorSet AnimationSet 的区别
- 学习《android 开发艺术探索》记录
- android 工程目录 简介
- Android之万能适配器Adapter的使用
- android textview时实显示checkbox选中的内容
- ANDROID之路-Android_Notification 中 PendingIntent 的作用
- Android 列表A~Z索引控件
- Android之SparseArray<E>详解
- ANDROID之路-Android_Intent setFlags | 或运算符的含义
- Android 无线调试
- android入门-1
- 我眼中的Android Framework