Android ListView 單條重新整理方法實踐及原理解析

來源:互聯網
上載者:User

標籤:

對於使用listView配合adapter進行重新整理的方法大家都不陌生,先重新整理adapter裡的資料,然後調用notifydatasetchange通知listView重新整理介面。

方法雖然簡單,但這裡面涉及到一個效率的問題,調用notifydatasetchange其實會導致adpter的getView方法被多次調用 (畫面上能顯示多少就會被調用多少次),如果是很明確的知道只更新了list中的某一個項的資料(比如使用者點擊list某一項後更新該項的顯示狀態,或者 後台回調更新list某一項,等等),應該盡量避免getView被無辜的多次調用,特別是當後台線程特別多,回調的頻率特別高,並且介面的布局最佳化得不是特別好的時候,使用notityDataSetChaned()方法來更新介面就會顯得列表卡頓,使用者體驗不佳。

下面我們來介紹一下如何對listView進行單條重新整理:

首先我們看一下adapter的getView方法,我們要進行單條重新整理就要手動調用這個方法。

public View getView(int position, View convertView, ViewGroup parent)

那麼這三個參數是如何確定的呢,第三個參數很好確定,就是你的listview。

為了確定另外兩個參數position和converView,這裡介紹幾個lisView的新方法:

getFirstVisiblePosition(),該方法擷取目前狀態下list的第一個可見item的position。

getLastVisiblePosition(),該方法擷取目前狀態下list的最後一個可見item的position。

getItemAtPosition(int position),該方法返回目前狀態下position位置上listView的convertView

ps:這裡的convertView是複用的,也就是說不管position的值是多大(這個要看你整個list有多大),converView的個數應該始終是螢幕上能顯示的list的條數那麼多。

所 以,我們通過從getFirstVisiblePosition的值到getLastVisiblePosition的值之間的listitem和需要進 行更新的條件(比如id)進行比較確定哪一個是要更新的(如果不在當前可是範圍內也就沒有必要更新了,等list拉動的時候自然就會更新出來)

 

代碼如下,其實這個方法是google 2011年開發人員大會上提出的方法——ListView單條更新:

 

private  void  updateSingleRow(ListView listView,  long  id) {               if  (listView !=  null ) {               int  start = listView.getFirstVisiblePosition();               for  ( int  i = start, j = listView.getLastVisiblePosition(); i <= j; i++)                   if  (id == ((Messages) listView.getItemAtPosition(i)).getId()) {                       View view = listView.getChildAt(i - start);                       getView(i, view, listView);                       break                                } 


來自:http://blog.csdn.net/yuyuanhuang/article/details/43198107

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.