2013-09-30 5 views
0

someclass_adapterEvents_part получил 20 пунктов. После окончания цикла GlobalData.buffer получил 40, а someclass_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» после добавления элементов и проверить, распечатав журналы размером с оба арраиста перед добавлением элементов и после добавления элементов. – GrIsHu

+4

Сделайте проверку следующим образом: 'if (someclass_adapter == GlobalData.buffer) { System.out.println («Они одинаковы»);} ', чтобы увидеть, совпадают ли эти два ... Возможно, вы ссылаетесь на ** ту же коллекцию ** на два ** разных имени **. .. – ppeterka

ответ

3

Похоже, ваш someclass_adapter оборачивает экземпляр буфера. Таким образом, вы добавляете одинаковые элементы дважды к одному и тому же массиву ArrayList. Достаточно добавить их только к адаптеру.

+0

Я использую статический файл GlobalData.buffer для кэширования данных при воссоздании активности. GlobalData.buffer используется в someclass_adapter, когда init и метод getView для someclass_adapter. Я думал, что в java нет пропусков по ссылке, поэтому, когда я передаю GlobalData.buffer в конструктор someclass_adapter, я ожидаю, что someclass_adapter скопирует GlobalData.buffer в свой внутренний ArrayList. –

Смежные вопросы