2012-07-13 51 views
2

問題很簡單,如果我讓一個對象parcelable,並將其放入一個包中,並使用該包創建一個片段。對象是否被克隆或被引用?Android Parcelable佔用更多的內存

上下文。

我有一個對象在ArrayList中存儲/引用。取決於ArrayList中的對象類型(使用多態性)。我創建了一個適合處理它的片段。

我還需要將此對象傳遞給片段。片段在自定義視圖尋呼機中使用。我不希望有重複的對象,在我看來,可以克隆的克隆對象。

另一種方法是傳遞ArrayList中對象的索引。然後使用getActivity()。myList.get(Integer傳遞給)來從片段中獲取對arraylist的引用。但對我來說這似乎不是很安全(ArrayList內容可能會更改,儘管我只是刪除所有內容並重新開始)。我也讀過,你應該避免將參數傳遞給fragment構造函數,因爲它可能使用默認的無參數構造函數重新創建。

(雖然我正在銷燬任何重新創建的碎片,因爲在重新貼上正確的視圖時出現了一些奇怪的問題,另一篇文章)。

新的子問題:有沒有辦法通過引用傳遞值的片段?

回答

5

問題很簡單,如果我將一個對象設爲parcelable,並將其放入一個包中並使用該包創建一個片段。對象是否被克隆或被引用?

如果不是立即在其他時間點(例如,當片段的參數Bundle包含在實例狀態中),它可能被克隆。

我也讀過,你應該避免傳遞參數給片段構造函數,因爲它可能使用默認的無參數構造函數重新創建。

正確。

另一種方法是傳遞ArrayList中對象的索引。然後使用getActivity()。myList.get(Integer傳遞給)來從片段中獲取對arraylist的引用。但對我來說似乎不是很安全(ArrayList內容可能會改變,儘管我只是刪除所有內容並重新開始)。

請勿使用ArrayList。使用持久密鑰的HashMap。將密鑰傳遞給片段。讓片段通過密鑰獲取數據。確保任何人刪除此對象(從而將其從HashMap中刪除)僅在此片段不存在時才這樣做,或者通知此片段,以便知道如何處理此場景。

+0

這是我以前處理它的方式。只是本來者優先已經做了類似 新的ArrayList 爲I McP 2012-07-13 20:30:03

+0

我曾嘗試過這種方法,但是一旦電話被旋轉,片段就會比活動更快地創建。所以對象初始化了。 – McP 2012-07-13 23:35:43