Intent 和 getSerializableExtra 值 return
Intent and getSerializableExtra value return
在 onCreate
中,我从 activity
的 itemsList
中获得了一个额外的可序列化
itemsList = (ArrayList<HashMap<String, String>>) intent
.getSerializableExtra("sliding_menu_content");
然后在 activity 中我将一些其他地图元素添加到 itemsList
数组。
令我惊讶的是,更改设备的方向后,getSerializableExtra
returns itemsList
的更新状态包括所有地图元素添加。怎么可能?
编辑:
我的电话 activity 像这样
ArrayList<HashMap<String, String>> startingList =
new ArrayList<HashMap<String, String>>();
i.putExtra("sliding_menu_content", startingList);
startActivity(i);
据我了解传递参数,这是一个评估假设,当我通过 getSerializableExtra
分配 itemsList
时,我得到的不是 其值的副本 但是我得到了一个 指针 的副本到调用 activity 传递的原始对象(即 startingList
),然后它的每个更新都是更新原始值。
您应该知道 Intent.putExtra() 和 Intent.getSerializable() 的工作原理。 Intent使用Bundle来保存参数,如果不是进程间intent内部Bundle只是将原始对象保存在数据映射中。 , 对象将不被复制(做拆包和包裹的事情),所以你得到的仍然是原始对象。
在 onCreate
中,我从 activity
itemsList
中获得了一个额外的可序列化
itemsList = (ArrayList<HashMap<String, String>>) intent
.getSerializableExtra("sliding_menu_content");
然后在 activity 中我将一些其他地图元素添加到 itemsList
数组。
令我惊讶的是,更改设备的方向后,getSerializableExtra
returns itemsList
的更新状态包括所有地图元素添加。怎么可能?
编辑:
我的电话 activity 像这样
ArrayList<HashMap<String, String>> startingList =
new ArrayList<HashMap<String, String>>();
i.putExtra("sliding_menu_content", startingList);
startActivity(i);
据我了解传递参数,这是一个评估假设,当我通过 getSerializableExtra
分配 itemsList
时,我得到的不是 其值的副本 但是我得到了一个 指针 的副本到调用 activity 传递的原始对象(即 startingList
),然后它的每个更新都是更新原始值。
您应该知道 Intent.putExtra() 和 Intent.getSerializable() 的工作原理。 Intent使用Bundle来保存参数,如果不是进程间intent内部Bundle只是将原始对象保存在数据映射中。 , 对象将不被复制(做拆包和包裹的事情),所以你得到的仍然是原始对象。