0

私はこれを成し遂げるためにここ数日間頭をぶつけていますが、できません。誰か私を助けてください!全部は言わないで、簡単にはっきりと説明しようと思います。私は1つのArrayListを持っています。それを別のものに複製し、特定のインデックスでアイテムを削除しようとしています。ただし、これはレプリケートされた ArrayList 内のアイテムを削除するだけでなく、元の ArrayList も削除します。

例:

var DuplicateList:ArrayList = new ArrayList();
DuplicateList = OriginalList;

DuplicateList.removeItemAt(2);

上記は、DuplicateList の Index-2 にある「Item 3」を削除するだけでなく、OriginalList も削除します。

リスト コントロールの dataProvider を変更するときに、OriginalList を dataProvider として使用する FLEX List コントロールの ItemRenderer に存在するコントロール内に入力したものはすべて RETAINED にする唯一の方法であるため、このアプローチにはいくつかの回避策が必要です。 OriginalList から DuplicateList へ。次のアプローチでは、すべてのデータが保持されるわけではありません。

var DuplicateList:ArrayList = new ArrayList();
DuplicateList.addAll(OriginalList);

DuplicateList.removeItemAt(2);
ListCntrl.dataProvider = DuplicateList;

事前にご協力いただきありがとうございます...

4

1 に答える 1

2

理解しておくべき非常に重要なこと:

ActionScript3 は、オブジェクトへの参照を使用します。そのため、このコード行の 2 つの変数は、 のまったく同じインスタンスを参照していますArrayList

DuplicateList = OriginalList;

したがって、ある参照から項目を削除すると、次の参照から削除されます。の 2 つの個別のインスタンスがArrayList必要な場合は、コードの後半で提案しているように、それを複製する必要があります。

ここまでは順調ですが、なぜListCntrlからのデータを保持しているのOriginalListですか? それはまったく意味がありません。から項目を削除してからDuplicateListデータ プロバイダーとして使用する場合、その項目は存在しません。この話には続きがあると思います...

于 2012-06-19T18:48:10.070 に答える