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>在父 Activity 上获得这个

@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

你的Users类是否实现了Parcelable接口?如果没有,这就是您收到消息的原因。

于 2012-12-10T14:25:36.880 回答
1

您正在使用不同的方法进行序列化和反序列化。当您returnIntent.putExtra实际上调用类中的这个重载方法时Intent。因此,您的用户列表实际上被视为单个Serializable对象。在这种情况下putExtra,子端应与getSerializableExtra父端的 getter 一起使用。

如果你想在父端使用getter 方法,你应该在子端getParcelableArrayListExtra结合使用它,你的类应该是.putParcelableArrayListExtraUsersParcelable

于 2012-12-10T14:48:43.213 回答
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 中触发警告: Type safety: Unchecked cast from Serializable to ArrayList < Users >

不用担心,您可以忽略警告或在方法之前添加以下语句:

    @SuppressWarnings("unchecked")

更新 :

您存储在数组列表中的对象也必须是可序列化的,这意味着您的类应该实现可序列化,在您的情况下,用户类应该采用以下方式:

class Users implements Serializable {

    // ... 

}
于 2012-12-10T15:09:38.203 回答