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 OSが何らかのメモリ管理を行い、バックグラウンドで実行されている場合はプロセスを強制終了し、後で戻ったときにプロセスを復元しようとする場合を除いて、定期的に機能します。

これは私が得るエラーです:

AndroidRuntime(4985): Caused by: java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to android.graphics.Bitmap[]

classLoaderを適切に設定していないことが関係していると思いましたが、すべてを試しましたが、機能しないようです。

4

2 に答える 2

3

こんにちは余分な処理時間を要するバンドルにビットマップを入れることはお勧めしません。また、大量のメモリを消費します。パスを渡すか、画像を外部ストレージに保存して、画像ファイルへの絶対パスをバンドルすることを強くお勧めします。SOバンドルビットマップでこの質問を確認してください。

于 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 に答える