2011-10-28 25 views
1

我有一個ListView,它顯示一些數據量,並在底部有一個按鈕可以加載更多的數據。這種情況如下:當適配器被修改時Listview返回異常

CustomArrayAdapter a = GetInitialData(); 
LayoutInflater layoutInflater = 
    (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATR_SERVICE); 
LinearLayout ll = 
    (LinearLayout)layoutInflater.inflate(R.layout.more_button_layout, null, false); 
Button b = (Button)ll.findViewById(R.id.more_button); 

b.setOnClickListener(new OnClickListener() { 

public void onClick(View v) { 
    a.loadNextPage(); 
    } 
}); 

lv.addFooterView(ll); 
lv.setAdapter(a); 

的問題是,每當我按下按鈕,我得到了該適配器擁有的迭代器ConcurrentModificationException的。我認爲這是由於loadNextPage()被調用,而某些東西正在遍歷列表引起的,但我無法弄清楚如何做到這一點。

回答

0

參見下面的URL http://www.javacodegeeks.com/2011/05/avoid-concurrentmodificationexception.html

的CopyOnWriteArrayList

此異常可能由已檢測出的對象的併發修改時這種修改是不允許的方法被拋出嘗試。

例如,一個線程修改一個集合,而另一個線程或同一個線程正在迭代它,這通常是不可取的。

請注意,此異常並不總是表示某個對象已被另一個線程同時修改。如果單個線程發出違反對象合約的一系列方法調用,則該對象可能會拋出此異常。例如,如果一個線程在使用快速迭代器迭代集合的同時直接修改集合,那麼迭代器將會拋出這個異常。

例子:

for (Iterator it = myCollection.iterator(); it.hasNext()) { 
Object myObject = it.next(); 
if (someConditionIsTrue) { 
// myCollection.remove(myObject); // wrong can throw ConcurrentModificationException 
it.remove(myObject); // right 
} 
} 
+0

是我遇到的問題是,名單上迭代不斷以顯示它 - 我知道,這種情況正在發生,我只是不知道如何解決它。我不認爲有必要使用CopyOnWriteArrayList來完成像動態擴展ListView這樣簡單的事情。 – Slubb

相關問題