2

あるarrayListから別の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 をパーセルにシリアル化し、そのパーセルから新しい 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 に答える