1

ArrayList親アクティビティに戻る子アクティビティがあります

子供の活動

ArrayList<Users> selectedMembers = new ArrayList<Users>();

//And then

Intent returnIntent = new Intent();

returnIntent.putExtra("ArrayOfUsers",selectedMembers);

setResult(RESULT_OK,returnIntent);        

finish();

親の活動

ArrayList<Users>親アクティビティでこれを取得する方法

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if (resultCode == RESULT_OK) {


            //how to get ArrayList<Users> here
        }
    }

私はこのようなことをしましたが、私はエラーを出します

selectedMembers.addAll((data.getParcelableArrayListExtra("ArrayOfUsers"));

エラー:

The method addAll(Collection<? extends Users>) in the type ArrayList<Users> is not applicable for the arguments (ArrayList<Parcelable>)

4

3 に答える 3

1

シリアル化と逆シリアル化に異なる方法を使用しています。returnIntent.putExtra実際に呼び出すと、クラス内のこのオーバーロードされたメソッドが呼び出されます。Intentしたがって、ユーザーのリストは実際には単一のSerializableオブジェクトとして扱われます。この場合、子側は親側のゲッターputExtraと組み合わせて使用​​する必要があります。getSerializableExtra

ゲッターメソッドとして親側で使用する場合は、子側とgetParcelableArrayListExtra組み合わせて使用​​する必要があり、クラスはである必要があります。putParcelableArrayListExtraUsersParcelable

于 2012-12-10T14:48:43.213 に答える
1

あなたのUsersクラスはParcelableインターフェースを実装していますか? そうでない場合は、これがメッセージを受け取っている理由です。

于 2012-12-10T14:25:36.880 に答える
1

ArrayListクラスは を実装します。Serializableこれは、配列リストをインテントに追加するときの方法です。

配列リストを取得するには、シリアル化可能なオブジェクトを取得ArrayListし、次の方法でキャストする必要があります。

// Check that the result is successful and that the intent is valid (not null)
if ( resultCode == RESULT_OK && data != null ) {

    ArrayList<Users> selectedMembers = (ArrayList<Users>) data.getSerializableExtra ( "ArrayOfUsers" );

    // Your logic goes here ...
}

このキャスト プロセスにより、Eclipse IDE で次のような警告がトリガー されます。

これについて心配する必要はありません。警告を無視するか、メソッドの前に次のステートメントを追加するだけです。

    @SuppressWarnings("unchecked")

アップデート :

配列リストに格納しているオブジェクトもシリアライズ可能である必要があります。つまり、クラスはシリアライズ可能を実装する必要があります。この場合、クラス Users は次のようにする必要があります。

class Users implements Serializable {

    // ... 

}
于 2012-12-10T15:09:38.203 に答える