Android ListView的getview()中position錯位 重複調用(position重複調用)

來源:互聯網
上載者:User

重寫的listview adapter中,在getView()方法中,列印語句時,相同的position列印了多次,修改方法:
將布局檔案中ListView的高度改為“fill_parent”

 
<ListView  
  
android:id="@+id/dynamic_list"  
  

android:layout_height="fill_parent"  
  
android:layout_width="fill_parent"  
  
android:scrollbars="vertical"  
  
android:layout_weight="1"  
  
android:drawSelectorOnTop="false"  
  

 
  
android:fadingEdgeLength="0dip"  

 
  
android:divider="@null" 

 
  
android:dividerHeight="0dip"  
  
android:cacheColorHint="#00000000" 

 
  
android:background="@color/listview_bg_color" />


原因,參考:http://blog.csdn.net/f8376904110/article/details/6460934 

當我們在使用listview的時候。有時候自訂adapter的時候,是不是會發現在getview裡列印日誌的時候,重複調用很多次?有時候4次。有的嚴重甚至到10次,當我們在listview中移動的時候。每移動一列都會調用很多次,這樣大大影響到效率!其實這和listview本身在android上的機制有關。下面我開始來介紹一下吧:

      在布局,我們只有一個listview的時候。那好。我們把高設定成wrap_content的時候。在listview裡載入幾行看看。日誌在getview裡列印一下。是不是重複調用了?那這個辦法就好弄了。把高設定成fill_parent就成了。這個時候發現日誌還是重複調用?那就要看一下Listview的上一級而已的高是不是也是設定也fill_parent的,如果不是。請改動吧。如果是。。。那我還真沒碰到重複調用的!因為測試好幾次了!

     如果我們在而已裡不只一個Listview。一個複雜好看的布局可能有很多。listview在布局的某個地方。這個時候有時候運氣不好。你會發現你調用了很多次getview。我測試的時候。最高230次。。。可想而知。這個速度是相當慢。而且每移動一次就是調用這麼多次!對於這樣的情況,在修改布局的時候,要考慮以下兩點:1.首先考慮需求布局和效能哪個更重要一點。2.考慮listview周邊哪個布局控制項影響到了它!

     如果在效能上沒有太大影響,而需求要求必需是那樣的布局。那就以布局為主。看看有沒有別的方法來最佳化一下listview,當然前提是布局一點都不能調整。如果能調整,布局沒有太大變動。而listview又能很好的最佳化。那就當然最佳化了!當我們最佳化的時候。首先要看一下有沒有影響到Listview重繪的控制項,比如。如果它上面和下面都有控制項。而且高都是wrap_content,那麼你就要設定成fill_parent或者固定高。這樣listview在高上就不會重繪,這是最主要的一點。那左右是不是也有控制項(一般一個手機頁面用到list的時候不會有這麼多控制項)?有,那我們就也要調整,那就同高一樣的設定。一定要讓listview是一個固定在那個地方不動的。不然,你就等著讓他重複去調用吧!

     其實說了這麼多。最主要的還是在我們進行布局的時候。要巧妙的運用每個控制項的屬性,以及瞭解控制項每個的原理。這樣在我們進行UI設計的時候,才能很好的去結合!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.