问题很简单,如果我将一个对象设为parcelable,并将其放入一个包中并使用该包创建一个片段。该对象是否被克隆或被引用。
背景。
我在ArrayList中存储/引用了一个对象。取决于ArrayList中的对象类型(使用多态)。我创建了一个适合处理它的片段。
我还需要将此对象传递给片段。该片段在自定义视图寻呼机中使用。我不希望有重复的对象,在我看来,可以克隆的克隆对象。
另一种方法是传递ArrayList中对象的索引。然后使用getActivity()。myList.get(传递给Integer)从片段中获取对arraylist的引用。但它对我来说似乎不太安全(ArrayList内容可能会改变,虽然我只是删除所有内容并重新开始)。我还读过,你应该避免将参数传递给片段构造函数,因为它可以使用默认的no-args构造函数重新创建。
(虽然我正在销毁任何重新创建的片段,因为重新连接到正确的视图会有一些奇怪的问题,另一篇文章)。
新的子问题:有没有办法通过引用片段来传递值?
答案 0 :(得分:5)
问题很简单,如果我将一个对象设为parcelable,并将其放入一个包中并使用该包创建一个片段。该对象是否被克隆或被引用。
如果没有立即克隆,可能会在其他时间点克隆(例如,当片段的参数Bundle
包含在实例状态中时)。
我还读过,你应该避免将参数传递给片段构造函数,因为它可以使用默认的no-args构造函数重新创建。
正确。
另一种方法是传递ArrayList中对象的索引。然后使用getActivity()。myList.get(传递给Integer)从片段中获取对arraylist的引用。但它对我来说似乎不太安全(ArrayList内容可能会改变,虽然我只是删除所有内容并重新开始)。
不要使用ArrayList
。使用带有持久密钥的HashMap
。将密钥传递给片段。让片段通过密钥获取数据。确保删除此对象的任何人(从而将其从HashMap
中删除)仅在此片段不存在时才这样做,或者通知此片段以便它知道如何处理此场景。