自定義列表視圖適配器的getView 方法:多次調用的深入分析
問題:
在自訂清單適配器中,為什麼多次呼叫getView方法,貌似是在一個隨意順序?
答案:
由於 ListView 工作方式的固有性質,自訂清單適配器中的 getView 方法可以以任何順序多次呼叫。以下是所提供程式碼中觀察到的行為的解釋:
ConvertViews:
convertView 參數表示正在回收以供重用的視圖。當convertView為非空時,表示ListView已經測量並膨脹了對應位置的視圖。適配器不會建立新視圖,而是重複使用此回收的視圖。
getView 呼叫順序:
對於不同位置呼叫 getView 的順序沒有保證。即使在收到使用者輸入之前,ListView 也可能會呼叫 getView 來取得多個位置。當 ListView 的高度設定為 wrap_content 時(如給定的 XML 佈局所示),此行為尤其常見。
為什麼 getView 被多次呼叫:
getView 被呼叫由於 ListView 的測量過程,每個位置都會多次。當 ListView 首次顯示時,它會測量適配器以外的幾個子視圖以確定其自身的高度。此測量過程會觸發對清單可見部分的 getView 呼叫。
不可預測的 ConvertViews:
當使用者捲動時,ListView 可能會回收不再可見的視圖並將其重新用於新職位。這解釋了為什麼即使在使用者滾動之前,convertView 參數也可以為非空。
結論:
雖然看起來不尋常,但調用 getView 的行為多次並且以不可預測的順序不是問題。它是 ListView 如何透過重複使用視圖並僅測量其初始佈局的子級子集來優化效能的固有部分。
以上是為什麼我的 ListView 的'getView”方法被多次調用,並且順序明顯是隨機的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!