2010-10-06 149 views
2

我的ListActivity被綁定到一個ArrayAdapter,我已經覆蓋了getView()方法。如果我在該方法中更改小部件的可見性或修改視圖的背景顏色,那麼一旦該修改後的列表項從屏幕滾動後返回,這些更改就會丟失。事實上,列表中的其他一些觀點正在挑選變化。維護ListView項目狀態

如何讓修改過的視圖在滾動後重新顯示時看起來相同?

+0

您可能想要從getView()方法發佈代碼,以便我們可以更好地瞭解發生了什麼。您是否在getView中檢查數據的位置以設置和清除選擇值?同樣,視圖也會在列表中重複使用,所以您還需要在getView方法中檢查預先存在的視圖,並相應地更改其狀態。 – 2010-10-06 01:53:07

回答

3

你是否每次膨脹一個新視圖或使用傳入的convertView?

通常,適配器會嘗試回收視圖,只創建足以提供平滑滾動的視圖。現有的再循環視圖作爲convertView傳入。您可以每次膨脹並返回一個新視圖(昂貴),或者只需根據位置重新設置convertView(如果存在)。如果回收您需要重新設置所有視圖屬性,因爲不能保證您獲得的回收視圖與過去用於此位置的視圖屬性相同。

這聽起來像你的錯誤是,你沒有正確重新設置循環視圖(convertView)的所有屬性,以匹配當前位置的數據。