我一直在玩Bundle.putStringArrayList
ArrayList<String> myArrayList = new ArrayList<String>();
ArrayList<String> keys = new ArrayList<String>();
Bundle name_bundle = new Bundle();
for (int i = 0; 10 > i; i++){
myArrayList.add(i + " first");
myArrayList.add(i + " second");
keys.add(i + " key");
name_bundle.putStringArrayList(keys.get(i), myArrayList);
myArrayList.clear();
}
我希望输出(在调试时)(在运行循环几次后,但不完成):
Bundle [{2 key = [2 first,2 second],1 key = [1 first,1 second],0 key = [0 first,0 second]}]
然而,它是:
捆绑[{2 key = [2 first,2 second],1 key = [2 first,2 second],0 key = [2 first,2 second]}]
这是一个错误,或者它是如何工作的?如果是这样,是因为它重复使用相同的数组吗?
由于密钥永远不同,我不确定为什么会覆盖每个值。
特别是因为:
ArrayList<String> keys = new ArrayList<String>();
Bundle name_bundle = new Bundle();
for (int i = 0; 10 > i; i++){
keys.add(i + " key");
String s = i + " string";
name_bundle.putString(keys.get(i), s);
}
产生这个(在运行循环几次之后):
Bundle [{2 key = 2 string,1 key = 1 string,3 key = 3 string,0 key = 0 string}]
EDITED
使用以下内容时:
ArrayList<String> one = new ArrayList<String>();
ArrayList<String> two = new ArrayList<String>();
ArrayList<String> tmpkey = new ArrayList<String>();
one.add("1 first array");
one.add("2 first array");
two.add("1 second array");
two.add("2 second array");
tmpkey.add("first key");
tmpkey.add("second key");
name_bundle.putStringArrayList(tmpkey.get(0), one);
name_bundle.putStringArrayList(tmpkey.get(1), two);
你得到:
Bundle [{first key = [1 first array,2 first array],second key = [1 second array,2 second array]}]
然而,它需要新的arraylists才能通过使用.clear()来重用arraylist。
只需验证,将以下内容添加到上述结尾时:
one.clear();
one.add("will it work?");
name_bundle.putStringArrayList(tmpkey.get(2), one);
你得到:
捆绑[{第三个键= [它会起作用吗?],第一个键= [它会起作用吗?],第二个键= [1秒阵列,2秒阵列]}]
有没有人知道我可以重用arraylist的解决方法,所以我可以在循环中使用它?或者也许是一种不同的方法?我之所以选择循环是因为我不知道有多少次我需要重复使用arraylist,或者因为它不允许你,我需要多少个arraylists。
答案 0 :(得分:1)
您正在#clear()
&amp;上致电myArrayList
重用它 - 导致所有键引用相同的列表(直到/如果它们被分配,我猜)。尝试为ArrayList
的每次通话分配新的#putStringArrayList(...)
。