2012-08-31 79 views
5

我正在構建一個可以動態生成一些標籤和視圖的應用程序。 我定義了我的「自定義視圖」應該在xml佈局中看起來,並且從代碼中我膨脹了這種佈局。如何在Android中緩存視圖?

因爲膨脹的佈局總是相同的,所以我只想做一次這一步。 我有佈局後,我想緩存它,並在下次需要時使用它。

的問題是,如果我把我的充氣佈局高速緩存(通過例如一個HashMap),並將其添加到父佈局,下一次,當我再次嘗試添加它(這個時候我會從緩存中的佈局)系統表示我的佈局已經有了父項。

你知道任何方法從父視圖中分離子視圖,而不刪除子視圖嗎?

添加一些代碼:

private static HashMap<String, LinearLayout> mComponentsCache; 

// inflate and add the layout in cache 
layout = (LinearLayout)mLf.inflate(R.layout.form_textbox, mHolder, false); 
mComponentsCache.put(FormFieldType.TYPE_TEXT, layout); 
+0

你究竟如何緩存佈局,你爲什麼要這樣做? – DroidBender

+2

我想這樣做,因爲沒有必要重新誇大已經膨脹的相同視圖。作爲一個例子,我必須展示5個具有相同佈局但內容不同的文本框。 –

回答

9

你不能真正做到這一點。我引用您的評論

I want to do it in this way because is no point to re-inflate the same view which was already inflated. As an example I have to show 5 textboxes which have the same layout but different content.

你將有,因爲你需要這個文本框的5種不同的情況下,每一次膨脹。如果您不希望膨脹,您應該找到一種方法來複制已創建的佈局,這樣做無法改進,因爲複製也是「昂貴」的。事實上,僅僅爲了說清楚,膨脹視圖不會經歷XML解析(如果你這樣認爲的話),它是編譯代碼,因此,努力實現創建視圖副本的方式毫無意義。底線:堅持通貨膨脹。

+0

謝謝。我會堅持通脹:) –

+0

「事實上,只是爲了說清楚,膨脹視圖不經歷XML解析(只是以防萬一你這麼認爲),它是編譯代碼」....解決了一個我有... thnx :-) –

+0

如果是這樣的話,那麼如何緩存listview行工作?看來我們能夠在那裏重用視圖,它是如何做到的? – Justin