即使密钥不同,Bundle.putStringArrayList也会覆盖所有值

时间:2011-11-07 23:00:48

标签: android bundle

我一直在玩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。

1 个答案:

答案 0 :(得分:1)

您正在#clear()&amp;上致电myArrayList重用它 - 导致所有键引用相同的列表(直到/如果它们被分配,我猜)。尝试为ArrayList的每次通话分配新的#putStringArrayList(...)