2011-07-03 47 views
9

我正在使用listView處理Android應用程序,並且正在優化它。它在一個活動中使用了一個自定義的遊標適配器,並且我注意到bindview()爲列表的每一行觸發了兩次。在研究這裏的BindView()和NewView()方法的同時,我在一篇文章中讀到,對於我的listview寬度來說Wrap_Content是一個糟糕的主意。我把它切換到Fill_Parent和中提琴現在bindview()和newview()每個只爲每個項目觸發一次。爲什麼Wrap_Content會多次觸發BindView

爲了能更好地理解Andorid OS的內部,我想知道爲什麼Wrap_Content會導致bindview()多次觸發。

我已經在谷歌上做了幾次搜索,android開發人員的文檔和這裏沒有運氣。

任何迴應真的很感激。

謝謝, 喬治

回答

10

如果正確地記得從谷歌的I/O的視頻,設置ListViewwrap_content的寬度(或高度)將導致其測量所述第一3項和基它的尺寸關閉這些。爲了測量前三項,必須調用bindView()來填充它們。一旦測量完成,它將完全填充,並在前3和後續任何時間再次呼叫bindView()

這是由於ListView只保留在屏幕上的內容,當您可能有無限數量的項目在列表中。它的設計目的並不在於您的最大物品wrap_content,因爲它可能永遠停留在繪畫階段。

+2

正確,我昨天回答了類似的問題(http://stackoverflow.com/questions/6557240/expandablelist-getchildview-running-twice-per-child/6557284#6557284)。視頻/時間在那裏提供。 – dmon

+1

是的,這是正確的。出於測量目的,ListView有時會調用適配器的getView。不保證任何調用getView的結果將被放置在屏幕上,或者最近的getView調用與當前正在顯示的內容完全相關。 – adamp

+0

謝謝你的答案Glendon。正是我在找什麼。 –

相關問題