在意图之间传递ArrayList会丢失数据

时间:2011-04-20 20:44:14

标签: android android-intent arraylist

我将ArrayList<Custom implements Parcelable> myList传递给意图。 将ArrayList放入新的Intent中,以下两种方法似乎都能正常工作。

        results.putParcelableArrayListExtra("list", myList);
        results.putExtra("list", myList);

当我检查mIntent / mExtras / mMap / table时,它就是那里的一切。但是在onCreate方法的意图中,一些数据似乎丢失了。我正在使用myList = (ArrayList<Custom>) this.getIntent().getParcelableArrayListExtra("list");

获取ArrayList

例如,该列表包含五个项目[a],[b],[c],[d]和[e]:

put...   get...
[a]  ->  [a]
[b]  ->  null
[c]  ->  [b]
[d]  ->  null
[e]  ->  [c]

似乎新列表中的每个第二项都不是预期的,并占用了最后遗漏的一个地方。 你能告诉我我做错了什么吗?

3 个答案:

答案 0 :(得分:1)

尝试使用

检索数组
getIntent().getExtras().getParcelableArrayList(yourArray);

答案 1 :(得分:1)

试试我的朋友:

intent.putParcelableArrayListExtra("tag",yourObjectImplementsParceable);

xxx = (ArrayList<yourClassImplementsParceable>) intent.getParcelableArrayListExtra("tag");

希望这会有所帮助

答案 2 :(得分:1)

与其亲自编写Parcelable实现,不如尝试使用Android Studio代码完成功能(在Windows中:一旦您写入“ implements Parcelable”,然后再次在CustomObject类名上输入Alt + Enter)。这样可以防止实现中的常见错误。

即使如此,请注意:如果您实现了Parcelable并随后在CustomObject中添加/删除对象变量,则Parcelable的实现将不再有效。

在这种情况下,您可以手动将缺少的详细信息添加到Parcelable方法中,但是我更喜欢删除它们并让Android Studio再次实现它们(请确保删除CustomObject中所有已实现的Parcelable方法,因为Android Studio不会更新已经存在的Parcelable方法。

我遇到了与您所写的相同的错误,并且在CustomObject上正确地重新实现了Parcelable之后(自从我上次实现Parcelable以来,我对其进行了几次更改),一切正常。