2010-11-17 143 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引用它。