2010-11-17 213 views
0

我有一個對象,我需要能夠在活動之間傳遞。它實現了Parcelable,我寫了所有與之相關的代碼。需要在活動之間傳遞不可分類的對象

問題是,該對象的屬性之一是一個可繪製 - 真的需要。不幸的是,Drawable既不可Parcelable也不可序列化。我不明白如何通過它。

具有Drawable的原因是我需要緩存我在運行時從互聯網下載的圖像。我不想將圖像緩存在文件系統上,因爲這可能會隨着時間的推移最終耗盡大量空間。

我把圖像放入Drawable中,這樣我就可以輕鬆地將它放入ImageView中。

任何想法?

+0

它是一個可繪製的資源?你可以通過R.id .. – schwiz 2010-11-17 17:34:31

回答

1

在您的應用程序:

HashMap<String,Object> tempObjects = new H.... 

public Object getTempObject(String key) { 
    Object o = null; 
    o = tempObjects.get(key); 
    tempObjects.remove(key); 
return o; 
} 

public void addTempObject(String key, Object object) { 
    tempObjects.put(key, object); 
} 

和強制轉換對象繪製在回來的路上。你也可以在get()中添加一個布爾參數,如果它是真的,則從地圖中移除該對象,這樣你可以多次訪問某個臨時對象,或者如果你確信自己贏得了「 t需要它在那裏

編輯:對於異常捕獲抱歉,我粘貼代碼從一個函數,我有一個HashMap<Class<?>, HashMap<String, Object>>更詳細的臨時對象getter,我得到一個hashMap作爲值,然後獲取從它的對象,這就是爲什麼我有一個NPE檢查我先粘貼的代碼

+0

謝謝 - 我認爲這是沿着正確的路線。只有輕微的複雜性,我需要從我的對象訪問應用程序類 - 但我相信我可以弄清楚。 – 2010-11-17 17:46:19

+0

@保羅Hunnisett沒有問題:http://stackoverflow.com/questions/4177731/android-how-to-call-method-from-another-class-without-passing-context/4177776#4177776 – apps 2010-11-17 17:47:11

+0

我覺得越多關於這一點,我更關心的是用Drawables填充內存。我想知道Overiding在我的對象中完成並刪除相關的Drawable,但是不確定Parceling actualyl是否創建了一個新對象,在這種情況下,我的原始對象是GC,Drawable被刪除。對此有任何想法? – 2010-11-18 09:33:24

0

您不能在活動之間傳遞不是SerializableParcelable的複雜對象。一種選擇是緩存自定義Application類中的圖像,並在您的活動中從那裏訪問它們。

MyApplication application = (MyApplication)getAppliction(); 
Drawable drawable = application.getCachedDrawable(); 
1

您可以將drawable轉換爲byte [],然後以這種方式傳遞它(parcel it)。

Drawable to byte[]

1

您可以將您的數據unParcelable在定製的ContentProvider,然後通過URI引用它。