2010-10-11 55 views
0

我想用此代碼交換ArrayCollection中的兩個項目。ArrayCollection.setItemAt正在做一些有趣的事

private function swapCollectionElements(collection:ArrayCollection, fromIndex:uint, toIndex:uint) : void 
{ 
    var curItem:Object = collection.getItemAt(fromIndex); 
    var swapItem:Object = collection.getItemAt(toIndex); 

    collection.setItemAt(curItem, toIndex); 
    collection.setItemAt(swapItem, fromIndex); 

    collection.refresh(); 
} 

在調試代碼中,我可以看到curItem和swapItem是正確的對象,但是當我做我的第一setItemAt,它取代了一個,我想也是一個我沒有想。有什麼想法發生在這裏?

回答

4

這是因爲調用getItemAt來設置curItem和swapItem結果引用ArrayCollection中的對象而不是對象本身。當你用第一個setItemAt改變對象時,你的引用也會改變。在這一點上,curItem和swapItem可能都指向同一個對象。我會以不同的方式處理,並使用removeItemAt和addItemAt來代替,這樣您就可以使用對象而不是引用。希望有所幫助。

+0

+1因爲這次你打敗了我。 ;) – JeffryHouser 2010-10-12 03:04:33

相關問題