2012-08-08 66 views
3

我已經閱讀了幾次有關GetView DataAdapter類的android文檔。據我所知,如果我有一個homogeneus列表,其中每個項目只是一個文本視圖,並且所有項目都落在屏幕內(不可滾動),則不會有任何視圖回收,因此我應該接收4個對GetView的調用convertView爲空。那麼,這不是發生在我身上的事情。第一次convertView爲空,但其他3個創建的項目是相同的。列表填寫正確,但我想明白爲什麼會發生這種情況。如果任何人都可以幫助,我會非常感激。GetView方法和convertView誤解?

+0

我試圖解釋[這裏] [1]如何ListView和回收機制的工作 [1]:http://stackoverflow.com/a/14108676/1939564 – 2013-01-02 16:43:05

回答

4

我相信Android總是試圖回收視圖,因爲這會使人口增長最快。如果所有視圖都符合列表的可見視口,則無關緊要。通貨膨脹/創建視圖非常昂貴,這就是爲什麼Android想要儘可能回收利用的原因。

確保傳入GetView的視圖具有相同的視圖類型(在數據適配器中定義)或爲null。如果是空,您需要創建該視圖類型的新觀點,否則你應該嘗試重用傳入的觀點對於TextView中的的均勻名單,這是非常簡單的:

if (convertView == null) 
{ 
    TextView tv = new TextView(); 
    .... 
    tv.setText("First Item"); 
} 
else 
{ 
    TextView tv = (TextView) convertView; 
    ... 
    tv.setText("Recycled Item"); 
} 

爲了簡單起見, ,你總是可以返回一個新的視圖,而不是使用convertView,但性能不會那麼好。

+0

準確,這是基於從getItemViewType()返回的值 – CSmith 2012-08-08 15:05:42

+0

那麼,爲什麼我會在列表中顯示4個不同的文本?如果它始終是第一次創建的回收利用我不會將原始視圖的文本鏈接起來,因此,列出包含4個參考相同視圖的項目?我有點搞砸了。 – Notbad 2012-08-08 15:07:24

+0

Android引發的視圖引用數量不等於列表中的項目數量。一旦您將View引用返回給Android,您就不應該再考慮它了。 Android會照顧視圖參考的生命週期。它可能只是將視圖渲染爲位圖,然後由於它不需要View對象,它會將其返回以供回收。或者它可能會讓視圖的快速複製持續一段時間。如果您對它的工作原理感興趣,請查看Android源代碼。我敢打賭這很有趣。 – Samuel 2012-08-08 15:14:43

相關問題