如何在活动之间传递ArrayList <bitmap> </bitmap>

时间:2012-07-08 23:39:05

标签: android arraylist

我使用方法ArrayList<Bitmap>填充了getBitmapFromAsset(),并希望使用Bundle通过intent传递它。但是它允许我使用:

传递像ArrayList<String>这样的其他ArrayLists
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中没有看到该选项。有关如何执行此操作的任何想法吗?

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:3)

Bitmap默认实现Parcelable

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

ArrayList<Bitmap> bitmaps = new ArrayList<Bitmap>();
bitmaps.add(bitmap);
bundle.putParcelableArrayList("names", bitmaps);