正如您在自訂清單適配器中觀察到的, getView 方法被多次呼叫每一行,而且看起來都是以隨意的方式完成的。這種行為可能會令人困惑,但實際上這不是 Android 設計中的問題。
儘管人們普遍認為 getView 應該只針對可見行調用,但事實並非如此。當您捲動清單時,ListView 項目會被回收和重複使用。為了促進這種回收,ListView 預先測量並快取即將變得可見的行的視圖。這個預測量過程需要多次呼叫 getView 來決定視圖的尺寸。
getView 呼叫中感知到的缺乏順序也是回收。當行捲動到視圖之外時,它們的關聯視圖將從快取中刪除,並重新用於即將變得可見的視圖。這意味著 getView 呼叫的順序可能會根據使用者的滾動行為而變化。
在您的範例中,您已經為 ListView 提供了一個wrapp_content 高度。這迫使 ListView 在佈局時測量多個子項以確定其自身的高度。因此,ListView 在開始捲動之前就為這些子視圖建立了快取視圖。
ListView 的回收機制對於保持平滑的滾動性能至關重要。雖然 getView 呼叫的順序和次數可能看起來不穩定,但這是此機制的自然副產品,並不是錯誤或 bug。
以上是為什麼我的 Android ListView 的 getView() 方法會被多次調用,順序明顯是隨機的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!