2012-06-25 2 views
1

Как скопировать переменную ListCollectionView в новую переменную ListCollectionView по значению (а не ссылку)?Flex/ActionScript: как скопировать переменную ListCollectionView по значению (а не ссылку)?

Т.е. изменения в новой переменной ListCollectionView не должны влиять на исходную переменную ListCollectionView (и наоборот).

Конечная цель состоит в том, чтобы иметь 2 переменные ListCollectionView, указывающие на один и тот же ArrayList, но обновления одной переменной ListCollectionView не влияют на другую переменную ListCollectionView.

UPDATE 1

Вот один из способов я нашел, чтобы сделать это, хотя я не уверен, если это чистейший или наиболее эффективным способом.

LCV2=new ListCollectionView(new ArrayList()); 
for (var ii:int=0; ii<LCV1.length; ii++) { 
    var item:Object=LCV1[ii]; 
    LCV2.list.addItem(item); 
} 
+0

Как вы заявляете вопрос, это совершенно невозможно, потому что вы оба хотите, чтобы указывать на один и тот же базовый список/объекты, но вы не хотите изменения, внесенные с помощью одного до тех базовых объектов, которые будут отражено другой. У вас должна быть «глубокая копия», которая клонирует все объекты в базовом списке и предоставляет этот скопированный список в качестве аргумента для другого ListCollectionView, если вы хотите, чтобы они не изменяли друг друга. – shaunhusain

+0

Возможно, я не правильно сформулировал это. Изменения в ArrayList отражаются в переменных ListCollectionView. Однако изменения одной переменной ListCollectionView (например, removeAll()) не влияют на другую переменную ListCollectionView. Я начинаю с одной переменной ListCollectionView, и мне нужна вторая переменная ListCollectionView, которая начинается с того же списка, что и первая переменная ListCollectionView, но после этого действует независимо. – ggkmath

+0

ах ладно, в этом случае вы заявляете это правильно, я просто неправильно понял ваш смысл ... поэтому я думаю, что вы можете просто listCollection2.addAll (listCollection1.list); Я напишу это в ответ – shaunhusain

ответ

1
listCollection1 = new ListCollectionView(event.result); //populate your first list however 

listCollection2 = new ListCollectionView(); //create a new ListCollectionView that isn't related to the first 
listCollection2.addAll(listCollection1.list); //add all the items from the first list to the second 
+0

Спасибо Shaunhusain, похоже, что 'listCollection2.addAll (listCollection1.list);' solution отлично работает. Однако решение 'listCollection2.list = listCollection1.list;' все еще связывает два списка ListCollectionViews (изменения одного эффекта - другого). Конечно, мне нужно только одно решение, и ваше первое решение гораздо более понятно и красно, чем решение, которое я нашел выше в обновлении 1. Спасибо !!! – ggkmath

+0

@ggkmath cool Я удалю другую часть ответа, а затем спасибо за обратную связь – shaunhusain

+0

Я считаю, что мне часто приходится использовать 'listCollection2 = новый ListColectionView (новый ArrayList());', чтобы избежать ошибок времени компиляции FlashBuilder. – ggkmath

Смежные вопросы