2

我试图将元素从一个 arrayList 复制到另一个,我开始在我的应用程序中遇到错误,我认为问题是我在做浅拷贝。

如何将一个数组中的一项添加到另一个数组中进行深度复制/克隆?

这就是我到目前为止复制元素的方式:

public ArrayList<ResolveInfo> myAppsArr = new ArrayList(); 
public ArrayList<ResolveInfo> allAppsArr = new ArrayList(); 

    myAppsArr.add(allAppsArr.get(0));
4

2 回答 2

3

如何将一个数组中的一项添加到另一个数组中进行深度复制/克隆?

ResolveInfo 有一个构造函数,可以为您创建新的重复对象:

myAppsArr.add(new ResolveInfo(allAppsArr.get(0)));

这个构造函数似乎只在 API 17 中添加,您可以尝试通用克隆方法:

myAppsArr.add(allAppsArr.get(0).clone()); // No promises, I haven't tested this myself

或者,您可以创建一个手动创建新 ResolveInfo 对象的方法,因为所有成员数据都是公开的。

于 2013-01-13T20:14:07.880 回答
2

对于所有 android 版本,最简单和最可靠的方法是将 ResolveInfo 序列化到 parcel 并从该 parcel 创建新的 ResolveInfo 实例。

ResolveInfo r1 = new ResolveInfo();
Parcel p = Parcel.obtain();
r1.writeToParcel(p, 0);
ResolveInfo r2 = ResolveInfo.CREATOR.createFromParcel(p);
于 2013-01-13T20:37:00.813 回答