2012-07-13 26 views
2

问题很简单,如果我让一个对象parcelable,并将其放入一个包中,并使用该包创建一个片段。对象是否被克隆或被引用?Android Parcelable占用更多的内存

上下文。

我有一个对象在ArrayList中存储/引用。取决于ArrayList中的对象类型(使用多态性)。我创建了一个适合处理它的片段。

我还需要将此对象传递给片段。片段在自定义视图寻呼机中使用。我不希望有重复的对象,在我看来,可以克隆的克隆对象。

另一种方法是传递ArrayList中对象的索引。然后使用getActivity()。myList.get(Integer传递给)来从片段中获取对arraylist的引用。但对我来说这似乎不是很安全(ArrayList内容可能会更改,尽管我只是删除所有内容并重新开始)。我也读过,你应该避免将参数传递给fragment构造函数,因为它可能使用默认的无参数构造函数重新创建。

(虽然我正在销毁任何重新创建的碎片,因为在重新贴上正确的视图时出现了一些奇怪的问题,另一篇文章)。

新的子问题:有没有办法通过引用传递值的片段?

回答

5

问题很简单,如果我将一个对象设为parcelable,并将其放入一个包中并使用该包创建一个片段。对象是否被克隆或被引用?

如果不是立即在其他时间点(例如,当片段的参数Bundle包含在实例状态中),它可能被克隆。

我也读过,你应该避免传递参数给片段构造函数,因为它可能使用默认的无参数构造函数重新创建。

正确。

另一种方法是传递ArrayList中对象的索引。然后使用getActivity()。myList.get(Integer传递给)来从片段中获取对arraylist的引用。但对我来说似乎不是很安全(ArrayList内容可能会改变,尽管我只是删除所有内容并重新开始)。

请勿使用ArrayList。使用持久密钥的HashMap。将密钥传递给片段。让片段通过密钥获取数据。确保任何人删除此对象(从而将其从HashMap中删除)仅在此片段不存在时才这样做,或者通知此片段,以便知道如何处理此场景。

+0

这是我以前处理它的方式。只是本来者优先已经做了类似 新的ArrayList 为I McP 2012-07-13 20:30:03

+0

我曾尝试过这种方法,但是一旦电话被旋转,片段就会比活动更快地创建。所以对象初始化了。 – McP 2012-07-13 23:35:43