2

我有一个ArrayList<Bitmap>使用该方法填充的,getBitmapFromAsset()并希望使用 Bundle 通过意图传递它。但是它允许我传递其他 ArrayLists,例如ArrayList<String>使用:

Intent intent = new Intent(myClass.this, Rclass.class);  
Bundle bundle = new Bundle();    
bundle.putStringArrayList("names", (ArrayList<String>) names);  
intent.putExtras(bundle);
startActivity(intent);

但我不知道如何传递 Bitmap 类型的 ArrayList,因为我在 Bundle 中看不到该选项。关于如何执行此操作的任何想法?

4

2 回答 2

7

将位图本身从一个活动传递到另一个活动是非常低效的内存。如果你的位图是小尺寸的图标可能没问题,但如果它们是大位图,你可能会遇到内存不足的异常。

您是否考虑过对此进行一点重构,例如,使用具有位图 ID(或资产名称)的 HashMap 的单例到位图本身的 WeakReference。这个单例,我们称之为 BitmapHelper,如果它尚未加载或已被垃圾收集器释放,它将自动从资产重新加载位图。

在您拥有此 BitmapHelper 之后,只需将字符串数组中的位图 ID/资产名称传递给另一个活动即可。在其他活动中,您可以从 BitmapHelper 访问位图。

于 2012-07-08T23:56:47.887 回答
3

Bitmap默认实现Parcelable

使用Bundle.putParcelableArrayList(String key, ArrayList<? extends Parcelable> value)

ArrayList<Bitmap> bitmaps = new ArrayList<Bitmap>();
bitmaps.add(bitmap);
bundle.putParcelableArrayList("names", bitmaps);
于 2012-07-08T23:52:04.167 回答