2014-10-20 58 views
1

我理解Viewholder pattern的想法和用法,但我仍然有一個問題:
假設我們在視圖中有一個TextView,並顯示10個項目(「item0,item1 ....」)。
如果我調用findViewById一次,據我所知我有一個TextView的對象。 因此,首先調用getView我爲視圖充氣,找到參考並設置文本「item0」。
在第二次調用時,我獲得相同的TextView並將文本「item1」設置爲相同的TextView。
爲什麼第0項文字不變?
背景中是否有任何克隆?Android Viewholder實現

回答

1
Is there any cloning in the background? 

的Android預分配的若干意見是足以填滿其中正在運行的應用程序(的景色的游泳池)裝置的屏幕,從內容透視相同但不同於參考透視

1

假設您在適配器類中實現了ViewHolder,並且在getView()方法中使用了持有者,唯一可以肯定的是TextView在您的情況下描述了父結構的一個槽(例如ListView) 。一旦你定義了一個xml中的插槽,這是從你的適配器充氣,沒有克隆或類似的東西。
根據Google Documentation持有人的想法描述爲:

你的代碼 的ListView的滾動,這會降低性能期間可能調用findViewById()頻繁。即使適配器 返回回收的充氣視圖,您仍然需要查找 元素並進行更新。圍繞重複使用findViewById() 的方法是使用「視圖持有者」設計模式。

ViewHolder對象將佈局中標記爲 的每個組件視圖存儲,因此您可以立即訪問它們而不需要重複查找它們。首先,你需要創建一個類到 保持你的確切的一套意見。

有沒有克隆,只有視圖的可重用性