我基本上是想在状态之间保存一组位图。
我的片段是onSaveInstanceState:
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArray(SELECTED_IMAGES_ARRAY_BUNDLE, galleryAdapter.getImageBitmaps());
}
在它的onCreateView中我检索数组:
savedInstanceState.setClassLoader(Bitmap.class.getClassLoader());
Bitmap[] savedSelectedImages = (Bitmap[]) savedInstanceState.getParcelableArray(SELECTED_IMAGES_ARRAY_BUNDLE);
这个定期工作,除了当Android操作系统进行一些内存管理时,如果它在后台运行就会终止我的进程,后来当我回到它时会尝试恢复它。
这是我得到的错误:
AndroidRuntime(4985): Caused by: java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to android.graphics.Bitmap[]
我认为这与未正确设置classLoader有关,但我尝试了所有内容并且似乎无法使其工作
答案 0 :(得分:3)
嗨不建议将Bitmap放在一个需要额外处理时间的捆绑包中。并且消耗大量内存..强烈建议传递路径或将图像保存在外部存储器中,并将绝对路径捆绑到图像文件....在SO Bundle Bitmap中检查此问题。
答案 1 :(得分:2)
您可以执行以下操作。其中p是您的可分配列表。最后将位图列表转换回数组。
List<Parcelable> pList = Arrays.asList(p);
ArrayList<Bitmap> bList = new ArrayList<Bitmap>();
for(Parcelable px : pList){
bList.add((Bitmap)px);
}