2

问题很简单,如果我使一个对象可打包,并将其放入一个包中并使用该包创建一个片段。对象是被克隆还是被引用。

上下文。

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

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

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

(尽管我目前正在销毁任何重新创建的片段,因为重新附加到正确的视图存在一些奇怪的问题,另一篇文章)。

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

4

1 回答 1

5

问题很简单,如果我使一个对象可打包,并将其放入一个包中并使用该包创建一个片段。对象是被克隆还是被引用。

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

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

正确的。

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

不要使用ArrayList. 将 aHashMap与耐用的钥匙一起使用。将密钥传递给片段。让片段通过密钥获取数据。确保任何人删除此对象(从而将其从 中删除HashMap)仅在此片段不存在时才这样做,或通知此片段以便它知道如何处理这种情况。

于 2012-07-13T16:53:58.303 回答