2011-11-08 55 views
5

我正在實施使用自定義適配器的ListView。如果convertView爲空,爲了提高性能,我將返回新充值的View,否則返回回收的ViewView的setTag方法有什麼用處?

現在,在此過程中,我使用了ViewHolder模式,並使用了ViewsetTag()方法。最初我認爲這是某種書籤,但我還沒有完全理解它的使用。我已經檢查了他們在代碼中使用它的不同博客帖子。

有人可以請我解釋一下setTag()方法的用法嗎?

回答

13

基本上你可以存儲任何類型的對象作爲標記(當調用getTag時將其返回)。這可以是一個簡單的ID或一些複雜的數據。這是你與這個觀點相關的一些信息。

對於列表和視圖持有者模式,它是一個簡單對象,其中包含對已標記視圖(組)的視圖的引用。因此,您每次更新視圖的內容時都不必撥打findViewById。這只是性能優化。

我們可以在視圖標籤中存儲列表項的數據嗎?
不可以。由於視圖回收,您有(例如)10個視圖可以重複用於1000個列表項目。在標籤中存儲數據在這裏沒有意義。最好使用自定義數據對象來存儲列表項狀態(可能是包含顯示數據的同一個數組),或者在列表項更改時立即保存它。參見setTag documentation

+0

感謝您的回答。所以我知道我們可以存儲對象。是否我們可以存儲對象的狀態,例如listview的複選框選中狀態? – droidsites

+0

我更新了我的答案。 – Knickedi

相關問題