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(0); scrollTop=(v==null)?0:v.getTop(); } } }; 調用setAdapter之后恢復位置: myList .setSelectionFromTop(scrollPos, scrollTop);