2013-09-30 40 views
0

someclass_adapterEvents_part有20個項目。循環結束後,GlobalData.buffer得到了40,而一些class_adapter得到了40,我真的很困惑!在循環之前,someclass_adapter和GlobalData.buffer都是空的。爲什麼循環加倍ArrayList中的項目添加

SomeClass tmp_sc; 
for (int i = 0; i < events_part.size(); i++) 
{ 
    tmp_sc = events_part.get(i); 
    someclass_adapter.add(tmp_sc); 
    GlobalData.buffer.add(tmp_sc); 
} 

someclass_adaper是適配器延伸ArrayAdapter(SomeClass的) 和緩衝器是靜態的ArrayList(SomeClass的)。它在java中,特別是android代碼中。 我用Global.buffer到initzialized someclass_adapter像

someclass_adapter = new SomeClassAdapter(this, R.layout.lv_events_item, GlobalData.buffer); 
+1

在循環之前和之後打印尺寸。在循環之前,您確定GlobalData.buffer是空的嗎? – Cruncher

+0

添加項目後需要清除'ArrayList',並通過在添加項目之前和添加項目之後打印日誌來查看兩個arraylist的大小 – GrIsHu

+4

執行如下檢查:'if(someclass_adapter == GlobalData.buffer){ System.out.println(「他們是相同的」);}'看看這兩者是否是相同的......可能會發生,你通過兩個**不同的名稱引用**相同的集合**。 .. – ppeterka

回答

3

看起來你someclass_adapter被包裝緩衝實例。所以基本上,你將兩個相同的元素添加到同一個ArrayList中。僅將它們添加到適配器就足夠了。

+0

我使用靜態GlobalData.buffer在活動重新創建時緩存數據。 GlobalData.buffer在某些class_adapter中用於init和getclass方法的someclass_adapter。我認爲在java中沒有通過引用傳遞,因此當我將GlobalData.buffer傳遞給某個class_adapter的構造函數時,我期望someclass_adapter將GlobalData.buffer複製到它的內部ArrayList中。 –

相關問題