[Android Pro] 精確記錄和恢復ListView滑動位置


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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM