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