0

在过去的几天里,我一直在努力完成这项工作,但我做不到。有人请帮帮我!让我不要告诉你整件事,我会试着简单地解释清楚。我有 1 个 ArrayList。我正在尝试将其复制到另一个中,并尝试删除特定索引处的项目。但这不仅会删除复制的 ArrayList 中的项目,还会删除原始 ArrayList。

例如:

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

DuplicateList.removeItemAt(2);

以上不仅删除了 DuplicateList 中 Index-2 处的“Item 3”,还删除了 OriginalList 中的“Item 3”。

我只需要使用这种方法的一些解决方法,因为这是我在使用 OriginalList 作为 dataProvider 的 FLEX 列表控件的 ItemRenderer 中的控件中键入的任何内容的唯一方法,当我更改列表控件的 dataProvider 时从 OriginalList 到 DuplicateList。以下方法不会保留所有数据。

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

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

提前感谢您的帮助...

4

1 回答 1

2

理解一个非常非常重要的事情:

ActionScript3 使用对对象的引用。因此,这行代码中的两个变量指的是完全相同的 an 实例ArrayList

DuplicateList = OriginalList;

因此,当您从一个参考中删除一个项目时,它会从下一个参考中消失。如果您想要两个单独的实例ArrayList,那么您需要像稍后在代码中建议的那样克隆它。

到目前为止,一切都很好......但为什么你要ListCntrl保留来自的数据OriginalList?这根本没有任何意义。如果您从中删除一个项目DuplicateList,然后将其用作数据提供者,则该项目不应该存在。我觉得这个故事还有更多...

于 2012-06-19T18:48:10.070 回答