无法将ArrayList<Parcelable>传递给活动。

5
这是代码。
ArrayList<MyObject> list = new ArrayList<MyObject>();
list.add(new MyObject());
Intent intent = new Intent(this, ReceiverActivity.class);
intent.putExtra("list", list);
startActivity(intent);

ReceiverActivity

List<MyObject> list = (List<MyObject>)getIntent().getExtras().getParcelable("list");

这里的列表为空。同时,这个方法不起作用:

List<MyObject> list = (List<MyObject>)getIntent().getExtras().getSerializable("list");

我的对象是可 Parcelable 的,我已经实现了所有必需的方法。我猜这个实现不是问题所在,因为否则我会收到其他类型的异常。但是除了列表为空之外,我什么都没有得到。

提前致谢...

现在我发现了这个:

List<Parcelable> list = (List<Parcelable>)getIntent().getParcelableArrayListExtra("list");

需要在接收器活动中使用List<MyObject>,但是我该如何发送它以及如何从List<Parcelable>中获取List<MyObject>

2个回答

15

在处理 parcelable ArrayList 时,请使用 i.putParcelableArrayListExtra(name, value),其中 i 是您的 intent。不要使用 putExtra()。


方法getParcelableArrayListExtra返回一个ArrayList<Parcelable>,我如何获得ArrayList<MyObject>?似乎我必须对元素进行强制转换,或者使用类型ArrayList<MyObject>实例化一个新副本? - User
你的对象必须实现Parcelable接口。这样它们就可以正常工作了。 - Akhil
由于它们在列表中,且泛型不是协变的,因此无法将它们强制转换。 - User
你的意思是为了通过Intent传递Parcelable数组,我们必须使用静态数组而不是通用列表吗? - Jeff Bootsholz

6

尝试:

ArrayList<MyObject> myList = extras.<MyObject>getParcelableArrayList("list"));

只是作为一个附注。对于意图本身,它是intent.getParcelableArrayListExtra("name")。 - Tobias Reich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接