3

我基本上是在尝试在状态之间保存一组位图。

我的片段的 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[]

我认为这与没有正确设置类加载器有关,但我尝试了一切,似乎无法让它工作

4

2 回答 2

3

您好不建议将位图放在需要额外处理时间的捆绑包中。并且消耗大量内存.. 强烈建议传递路径或将图像保存在外部存储中,并将绝对路径捆绑到图像文件....在 SO Bundle Bitmap中检查这个问题。

于 2013-02-22T05:26:50.770 回答
2

您可以执行类似的操作。其中 p 是您的可打包列表。最后将位图列表转换回数组。

List<Parcelable> pList = Arrays.asList(p);
        ArrayList<Bitmap> bList = new ArrayList<Bitmap>();
        for(Parcelable px : pList){
            bList.add((Bitmap)px);
        }
于 2013-02-22T02:52:02.670 回答