2

ArrayList<Bitmap>メソッドを使用して入力したものがありgetBitmapFromAsset()、バンドルを使用してインテントを介して渡したいと考えています。ただし、次のように他のArrayListを渡すことができますArrayList<String>

Intent intent = new Intent(myClass.this, Rclass.class);  
Bundle bundle = new Bundle();    
bundle.putStringArrayList("names", (ArrayList<String>) names);  
intent.putExtras(bundle);
startActivity(intent);

しかし、バンドルにそのオプションが表示されないため、ビットマップタイプのArrayListを渡す方法がわかりません。これを実行する方法のアイデアはありますか?

4

2 に答える 2

7

あるアクティビティから別のアクティビティにビットマップ自体を渡すと、メモリの効率が大幅に低下します。ビットマップが小さいサイズのアイコンであれば問題ないかもしれませんが、大きいビットマップの場合、メモリ不足の例外が発生する可能性があります。

これを少しリファクタリングすることを検討してください。たとえば、ビットマップ ID (またはアセット名) の HashMap を持つシングルトンをビットマップ自体の WeakReference に使用します。このシングルトン (BitmapHelper と呼びましょう) は、ビットマップがまだロードされていない場合、またはガベージ コレクターによって解放された場合に、アセットからビットマップを自動的に再読み込みします。

この BitmapHelper を取得したら、ビットマップ ID/アセット名を文字列配列で別のアクティビティに渡すだけです。他のアクティビティからは、BitmapHelper からビットマップにアクセスできます。

于 2012-07-08T23:56:47.887 に答える
3

BitmapはデフォルトでParcelableを実装しています。

Bundle.putParcelableArrayList (String key, ArrayList<? extends Parcelable> value)を使用します。

ArrayList<Bitmap> bitmaps = new ArrayList<Bitmap>();
bitmaps.add(bitmap);
bundle.putParcelableArrayList("names", bitmaps);
于 2012-07-08T23:52:04.167 に答える