我使用方法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中没有看到该选项。有关如何执行此操作的任何想法吗?
答案 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);