Android 記錄和恢複ListView滾動的位置的三種方法

來源:互聯網
上載者:User

標籤:

本文主要介紹記錄和恢複listView滾動位置的3種方法, 記錄listView滾動到的位置的座標(推薦)、 記錄listView顯示在螢幕上的第一個item的位置、 通知適配器資料改變。

有時在view切換時,需要恢複listView之前滾動到的位置,鑒於網上已有資料說的都是第二種方法,而第二種方法本身在精確度上較差,自己找到了第一種方法分享下。

1、記錄listView滾動到的位置的座標,然後利用listView.scrollTo精確的進行恢複

  1. listView.setOnScrollListener(new OnScrollListener() {   
  2.   
  3.     /**  
  4.      * 滾動狀態改變時調用  
  5.      */  
  6.     @Override  
  7.     public void onScrollStateChanged(AbsListView view, int scrollState) {   
  8.         // 不滾動時儲存當前滾動到的位置   
  9.         if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {   
  10.             if (currentMenuInfo != null) {   
  11.                 scrolledX = statusListView.getScrollX();   
  12.                 scrolledY = statusListView.getScrollY();   
  13.             }   
  14.         }   
  15.     }   
  16.   
  17.     /**  
  18.      * 滾動時調用  
  19.      */  
  20.     @Override  
  21.     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {   
  22.     }   
  23. });  
在恢複位置時調用
  1. listView.scrollTo(scrolledX, scrolledY);  

2、記錄listView顯示在螢幕上的第一個item的位置,然後利用listView.setSelection恢複

這是網上能找到的最普遍的一種方式,但是卻無法準確恢複到原位置,只能定位到每個item的位置,推薦使用第1種

  1. listView.setOnScrollListener(new OnScrollListener() {   
  2.   
  3.     /**  
  4.      * 滾動狀態改變時調用  
  5.      */  
  6.     @Override  
  7.     public void onScrollStateChanged(AbsListView view, int scrollState) {   
  8.         // 不滾動時儲存當前滾動到的位置   
  9.         if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {   
  10.             position = statusListView.getFirstVisiblePosition();   
  11.         }   
  12.     }   
  13.   
  14.     /**  
  15.      * 滾動時調用  
  16.      */  
  17.     @Override  
  18.     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {   
  19.     }   
  20. });  
在恢複位置時調用
  1. listView.setSelection(position);  
由於此方式的缺陷加上可以使用listView.scrollTo(x, y)滾動到某個位置,如scrollView.scrollTo(0, 0)表示滾動到頂部這點想到第一種方式,從而實現精確無誤的滾動位置恢複

3、通知listView的適配器資料變更

這種適用於listView追加資料的情況,嚴格說不是恢複listView滾動的位置,只是保持滾動位置不錯

  1. listDataAdapter.getDataList.addAll(newDataList());   
  2. listDataAdapter.notifyDataSetChanged();  

Android 記錄和恢複ListView滾動的位置的三種方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.