2013-02-26 90 views
1

我有一個帶有onListItemListener的ListView,我擁有它,所以如果你點擊一個ListView項目,它會刪除它,但由於某種原因,如果我從列表中刪除最後一項,應用程序崩潰,並給我這個錯誤(java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3)從Android的ListView中刪除最後一項時出錯

有沒有人有任何想法是什麼意思?

這是我的代碼:

@Override 
     protected void onListItemClick(ListView l, View v, int pos, long id) { 
      super.onListItemClick(l, v, pos, id); 
      adapter.remove(adapter.getItem(pos)); 
      adapter.notifyDataSetChanged(); 
     } 
+0

什麼線你得到的錯誤?你不應該在這個函數裏面得到它 – codeMagic 2013-02-26 03:04:03

+0

@codeMagic 40,它是'adapter.remove(adapter.getItem(pos));' – 2013-02-26 03:05:34

回答

1

我相信我已經想通了,所有說,pos變量是一個數字太高似乎合乎邏輯,但我想他們所有的答案,他們沒有工作。

看來是什麼錯了,當我從列表中刪除最後一項時,它會嘗試刷新ListView,但不會有任何內容刷新,所以應用程序會崩潰,我改變了我的代碼有點,現在它工作的很好! :)我不完全理解它爲什麼可行,但它確實!

感謝所有的答案傢伙!

@Override 
    protected void onListItemClick(ListView l, View v, int pos, long id) { 
     super.onListItemClick(l, v, pos, id); 

     if (adapter.getCount() != adapter.getItemId(pos)) { 
      adapter.remove(adapter.getItem(pos)); 
      adapter.notifyDataSetChanged();  
     }   
} 
+0

獎勵1分您的努力。很高興見到你 – kemdo 2015-01-21 03:11:20

4

我以爲你通過POS = 3的參數值。由於列表的大小爲3,最後一個元素的位置應該是2

*編輯:

記住,開始的ListView指數和適配器是不同的。 ListView項目pos從「1」開始作爲第一個位置,適配器(如數組)從索引「0」開始作爲第一個位置。

adapter.remove(adapter.getItem(pos-1)); 
+0

列表的大小是動態的,您可以將項目添加到列表中。 – 2013-02-26 03:00:38

+1

我應該更清楚地解釋,更新了答案。 =) – 2013-02-26 03:13:26

+0

實際上,pos的確從0開始,所以如果我嘗試去做(pos-1),當我刪除第一個項目時,它會被搞砸。但我確實找到了解決方法。 – 2013-02-26 03:33:53

0

根據documentation你應該已經使用id作爲值來刪除該項目。

這樣的:

adapter.remove(adapter.getItem(id)); 
0

嘗試以下操作: 如果有lsitview 4項則LAT項目則是指數3和第一種是在索引0

@Override 
     protected void onListItemClick(ListView l, View v, int pos, long id) { 
      super.onListItemClick(l, v, pos, id); 
      adapter.remove(adapter.getItem(pos-1)); 
      adapter.notifyDataSetChanged(); 
     } 
相關問題