reference to : http://blog.csdn.net/welovesunflower/article/details/7926512

工作中遇到一个需求,对ListView某一项操作后刷新ListView,但是如果直接刷新,界面上ListView从第一列开始显示,用户体验不好,于是在网上搜了一些恢复LIstView滑动位置的方法。解决办法如下:

1 :

// 设置ListView到记录的位置
mListView.setSelection(mPosition);
mListView.setOnScrollListener(new OnScrollListener() {
// 滚动状态改变时调用
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// 不滚动时保存当前滚动到的位置
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
mPosition = mListView.getFirstVisiblePosition();
}
}
// 滚动时调用
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
});

2:

//给ListView设置监听器
backgroundList.setOnScrollListener(scrollListener);
private OnScrollListener scrollListener = new OnScrollListener() { @Override
public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {
} @Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
// scrollPos记录当前可见的List顶端的一行的位置
scrollPos = myList.getFirstVisiblePosition();
}
if (arrayList != null) {
View v=myList .getChildAt();
scrollTop=(v==null)?:v.getTop();
}
}
}; 调用setAdapter之后恢复位置:
myList .setSelectionFromTop(scrollPos, scrollTop);
04-24 09:36