2013-09-30 35 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中。 –

相关问题