需要在活动之间传递不可分类的对象
我有一个对象,我需要能够在活动之间传递。它实现了Parcelable,我写了所有与之相关的代码。需要在活动之间传递不可分类的对象
问题是,该对象的属性之一是一个可绘制 - 真的需要。不幸的是,Drawable既不可Parcelable也不可序列化。我不明白如何通过它。
具有Drawable的原因是我需要缓存我在运行时从互联网下载的图像。我不想将图像缓存在文件系统上,因为这可能会随着时间的推移最终耗尽大量空间。
我把图像放入Drawable中,这样我就可以轻松地将它放入ImageView中。
任何想法?
在您的应用程序:
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检查我先粘贴的代码
谢谢 - 我认为这是沿着正确的路线。只有轻微的复杂性,我需要从我的对象访问应用程序类 - 但我相信我可以弄清楚。 – 2010-11-17 17:46:19
@保罗Hunnisett没有问题:http://*.com/questions/4177731/android-how-to-call-method-from-another-class-without-passing-context/4177776#4177776 – apps 2010-11-17 17:47:11
我觉得越多关于这一点,我更关心的是用Drawables填充内存。我想知道Overiding在我的对象中完成并删除相关的Drawable,但是不确定Parceling actualyl是否创建了一个新对象,在这种情况下,我的原始对象是GC,Drawable被删除。对此有任何想法? – 2010-11-18 09:33:24
您不能在活动之间传递不是Serializable
或Parcelable
的复杂对象。一种选择是缓存自定义Application
类中的图像,并在您的活动中从那里访问它们。
MyApplication application = (MyApplication)getAppliction();
Drawable drawable = application.getCachedDrawable();
您可以将您的数据unParcelable在定制的ContentProvider,然后通过URI引用它。
它是一个可绘制的资源?你可以通过R.id .. – schwiz 2010-11-17 17:34:31