2013-01-23 103 views
0

我有一個屏幕,用戶選擇他/她想要刪除的項目,然後我將他/她的選擇存儲到一個整數arrayList(根據他們在listView上點擊的位置)。ArrayList不正確刪除

然後我將他們想要刪除的項目傳遞給一個函數,我實際上從包含所有信息的散列表中刪除它們。不過由於某些原因,它只是不從hashtable中刪除。我測試過並查看了所有用於訪問數據的變量,它們都是正確的。我不知道爲什麼它不刪除什麼,我告訴它..

下面是函數:

for (Entry<Integer, ArrayList<Deck>> i : listOfDecks.entrySet()) { 
        for (int p = 0; p < i.getValue().size(); p++) { 
         if (i.getValue().get(p).getTitle().equals(deckTitle)) { 
          for (int z = 0; z < deletedItems.size(); z++) { 
           listOfDecks.get(i.getKey()).get(p).getDeck().remove(deletedItems.get(z)); 

          } 
         } 
        } 
       } 

deletedItems是ArrayList中持有什麼樣的用戶選擇,因爲他們想要刪除自己的物品。

+0

你應該使用'Log.i(String tag,String messageText)'來添加一些日誌記錄來查看它實際上在做什麼,比如'deckTitle'的值等等。而不是遍歷每個套牌,列表被刪除的項目應該確切地包含選擇的位置,因此您只需要遍歷該選項。 –

+0

確定你給我們的代碼有什麼問題會有點困難,但我建議你檢查'equals'和'hashCode'是否按照你想要的密鑰的預期工作去掉。 (也就是說,如果你沒有重新定義它們,確保'deletedItems.get(z)'的返回實際上是地圖中的一個鍵。) –

回答

1

我看到的是你調用Deck.remove(int),所以你不是從哈希表中移除,而是從甲板上移除。

這個方法刪除(int)類Deck是幹什麼的?

+0

對不起,我其實只是想通了。有人剛剛發佈了一個解決方案,然後將其刪除,但它給了我一個好主意。 well Deck是一個arrayList。並刪除標準的android arrayList刪除功能。它只是從arrayList中刪除那個位置。問題是我每次擦除東西時,都需要相應地調整我的arrayList並將其減1。 – cj1098

+0

然後,也許您應該首先獲取要刪除的項目,然後通過Object而不是位置來刪除它們。無論哪種方式,你應該發佈你的解決方案,以備將來參考:) – Alfergon