-1

重複の可能性:
ArrayList<Parcelable> をアクティビティに渡すことはできません

昨日、これを機能させました。コードを再編成しましたが、何かが機能しなくなりました。しばらく見ていて、問題が見つかりません。

Parcelables の ArrayList をアクティビティに渡しています。

ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>();

//...

Intent intent = new Intent(this, ChooseGiftDetailsActivity.class);
intent.putParcelableArrayListExtra(Constants.FOO, myArrayListOfParcelables);
startActivity(intent);

レシーバー:

ArrayList<Parcelable> parcelableList = (ArrayList<Parcelable>)getIntent().getParcelableArrayListExtra(Constants.FOO);

parcelableList は送信していますが、常に null です。

もちろん、MyParcelable は Parcelable を拡張します。を使用して MyParcelable の 1 つのオブジェクトを渡すことを既にテストしましputExtraたが、常に機能します。

Parcelable p = (Parcelable)getIntent().getExtras().getParcelable(Constants.BAR);

また

MyParcelable p = (MyParcelable)getIntent().getExtras().getParcelable(Constants.BAR);

MyParcelable のコードにいくつかのデバッグ メッセージを入れました。リストを渡すと、書き込みメソッドのみが実行されますが、読み取りが開始されず、createFromParcel実行さえされません。これは何ですか?

4

1 に答える 1

0

作成者がいると思いますが、作成していない場合は作成してください。それから私はこのようにそれを試してみます:

ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>();

//...

Intent intent = new Intent(this, ChooseGiftDetailsActivity.class);
intent.putIntExtra(Constants.FOO_COUNT, myArrayListOfParcelables.size());
MyParcelable p;
for (int i = 0; i < myArrayListOfParcelables.size(); i++){
    p = myArrayListOfParcelables.get(i);
    intent.putParcelableExtra(Constants.FOO + "_" + i, p);
}
startActivity(intent);

次に、このようにもう一度読んでください。

Intent intent = getIntent();
int cnt = intent.getIntExtra(Constants.FOO_COUNT);
ArrayList<MyParcelable> myArrayListOfParcelables = new ArrayList<MyParcelable>(cnt);
MyParcelable p;
for (int i = 0; i < cnt; i++){
    p = (MyParcelable)intent.getParcelableExtra(Constants.FOO + "_" + i);
    myArrayListOfParcelables.add(p);
}

このようにして、内部で何が起こっているかをよりよく見ることができます。パーセラブルの配列が大きすぎてパーセリングできない場合があります。一度ビットマップを渡してみましたが、同様の問題があります。

于 2012-06-26T11:04:00.847 に答える