我尝试将多个列表发送到其他活动,因此我编写了以下代码:
ArrayList<String> sections = new ArrayList<String>();
for(int i=1; i<=last; i++)
{
sections.clear();
for(j = 0; j < size; j++)
{
sections.add(someText);
}
ourIntent.putStringArrayListExtra("sections_"+i, sections);
}
如您所见,对于每个i循环周期,我给发送列表的名称都是不同的(sections_1,sections_2,...)。
在每个循环循环中清除节列表。在调试模式下,我可以看到在每个循环周期中,这些部分都有正确的列表。
问题出在下一个活动中。当我列出列表时,使用以下代码:
sections1 = extras.getStringArrayList("sections_1");
sections2 = extras.getStringArrayList("sections_2");
sections1和sections2获得相同的列表,这是在putStringArrayListExtra中插入的最后一个列表。
任何人都可以解释这种行为吗?
答案 0 :(得分:1)
我认为这是因为它存储的是对您的ArrayList
的引用,而不是循环的每次迭代时列表的当前“状态”的副本。
例如,当您的ArrayList
包含1个项目时,您首先要插入对其的引用。接下来,在包含两个项目的ArrayList
上插入一个引用。两者都是参考,因此当您实际过渡到下一个Activity
时,它会复制完整的ArrayList
。
要解决此问题,实际上您可以在每次循环时制作ArrayList
的本地副本。
ArrayList<String> sections = new ArrayList<String>();
for(int i=1; i<=last; i++) {
sections.clear();
for(j = 0; j < size; j++){
sections.add(someText);
}
// Creating a new local copy of the current list.
ArrayList<String> newList = newArrayList<>(sections);
// Inserting the local copy instead.
ourIntent.putStringArrayListExtra("sections_"+i, newList);
}