我正在尝试将元素从一个arrayList复制到另一个arrayList中,我开始在我的应用程序中收到错误,我认为问题在于我正在做浅层复制。
如何将一个项目中的项目添加到另一个数组中进行深层复制/克隆?
这就是我到现在为止复制元素的方式:
public ArrayList<ResolveInfo> myAppsArr = new ArrayList();
public ArrayList<ResolveInfo> allAppsArr = new ArrayList();
myAppsArr.add(allAppsArr.get(0));
答案 0 :(得分:3)
如何将一个项目中的项目添加到另一个数组中进行深层复制/克隆?
ResolveInfo有constructor为您创建新的重复对象:
myAppsArr.add(new ResolveInfo(allAppsArr.get(0)));
看来这个构造函数只在API 17中添加,您可以尝试通用克隆方法:
myAppsArr.add(allAppsArr.get(0).clone()); // No promises, I haven't tested this myself
或者您可以创建一个手动创建新ResolveInfo对象的方法,因为所有成员数据都是公共的。
答案 1 :(得分:2)
对所有Android版本执行此操作的最简单,最可靠的方法是将ResolveInfo序列化为parcel并从该parcel创建新的ResolveInfo实例。
ResolveInfo r1 = new ResolveInfo();
Parcel p = Parcel.obtain();
r1.writeToParcel(p, 0);
ResolveInfo r2 = ResolveInfo.CREATOR.createFromParcel(p);