2011-10-04 117 views
3

我有一個的ListView,我的ListView默認包含複選框的所有複選框,如果我們取消選中任何複選框的位置添加到mCheckedArrayList.i想刪除列表視圖,從取消選擇所有位置。我用下面的代碼進行覈對,從ArrayList中移除對象?

for(int i=0;i<=mCheckedArrayList.size;i++){ 
    int removePosition=mCheckedArrayList.get(i); 
    mDisplayArrayList.remove(removePosition); 
} 

這是給ArrayIndexOutOfBounds exception.pls幫我

+1

發佈您的完整代碼。並不能理解你的問題。 –

回答

10

您正在刪除錯誤的順序的對象。你應該總是反向循環的順序,如果你刪除的循環中的元素:

for(int i = mCheckedArrayList.size()-1 ; i >= 0; i--){ 
    mDisplayArrayList.remove(mCheckedArrayList.get(i)); 
} 

作爲一個側面說明,如果你想通過前面的第一環(在你不刪除元素的情況下),你將不得不將您的循環結束條件更改爲以下內容:

i < mCheckedArrayList.size() 

感謝Martín發表評論。要意識到修改,您可以始終使用陣列的「最終參考」。

final ArrayList<T> arrayListToBeUsed = mCheckedArrayList; 
for(int i = arrayListToBeUsed .size()-1 ; i >= 0; i--){ 
    arrayListToBeUsed .remove(arrayListToBeUsed .get(i)); 
} 
+0

請注意您的列表是否被另一個線程修改。 –

+0

偉大的答案,只是一件事,我不能理解-1到arraylist大小來自哪裏,謝謝。 –

+0

頂部索引大小爲1,因爲索引從0開始於Java – Moss

0

嘗試在您的for循環中將'< ='更改爲'<'。

0

在編程中,第一項從0開始,最後一個項目是在大小減去1

for(int i=0;i<=mCheckedArrayList.size;i++){ // <-- remove '=' 
2

從我的使用迭代觀點是最正確的部分

ListIterator<Object> listIterator = mCheckedArray.listIterator();  
    for(;listIterator.hasNext() ; listIterator.next()){ 
     listIterator.remove(); 
    } 

它會還可以防止另一個線程將對象注入您的集合

3

無需採取任何迭代器。無需循環列表以從列表中刪除對象。

以下行將簡單地刪除arraylist中的所有對象,並使其爲空。

myArrayList.clear(); 
+0

它會刪除元素或將它們設置爲空? – bel