5

嗨,我有一个类的问题,我想通过将其放入 putExtras() 来传递一个意图,它是可序列化的,代码如下所示:

public abstract class ObjectA extends ArrayList<ObjectA> implements java.io.Serializable{...}

public class ObjectB extends ObjectA {...}


...
Bundle extras = new Bundle();
extras.putSerializable("blabla", ObjectB);
intent.putExtras(extras);

...

Object y = getIntent().getExtras().get("blabla");

问题是,y 现在是一个 ArrayList 而不再是 ObjectB 所以我不能转换它..如果我将代码更改为

public class ObjectB implements java.io.Serializable {...}

它工作正常

4

4 回答 4

14

通过在你的类中实现 java.util.List 和 java.io.Serializable,你触发了这个android bug

于 2009-11-16T17:22:06.250 回答
0

我怀疑发生的事情是,由于您没有将 ObjectB 声明为可序列化,因此它“回退”到最近的父对象。因此,当您将其放入 Bundle 时,您实际上并没有放入 ObjectB,而是将 ObjectB 转换回 ArrayList。

我认为您将不得不使用第二个(“工作正常”)代码。

于 2009-10-12T23:37:08.917 回答
0

在将 ObjectB 传递到包之前如何声明它?根据我对您的问题的理解,您在传递捆绑包时不会出错,只有在删除它时才会出错。尝试将您的 ObjectB 直接检索为 ObjectB 类型,如下所示:

ObjectB y = (ObjectB) getIntent().getExtras().get("blabla");
于 2009-10-20T14:00:55.573 回答
0

ObjectAin应该实现ArrayList接口。Parcelable之后,您可以将您的数组列表放入意图中,并将它们放入另一个活动中。

于 2009-12-12T07:37:16.090 回答