Intent extra可以保留更改吗?

时间:2016-05-08 15:34:44

标签: android android-intent android-activity serialization

在一个被调用的活动中,我从调用活动传递给Intent的Extra中获取一个ArrayList:

Intent in = getIntent();
itemList = (ArrayList<HashMap<String, String>>) in
                .getSerializableExtra("list_content");

然后我添加或删除一些项目到ArrayList,如

itemList.add(map);

我看到在设备轮换之后,就是活动被销毁并重新创建,在onCreate()中调用来自Intent的相同getSerializableExtra()返回对前一个实例所做的ArrayList的所有更改。

  • 如何在Serialized对象中保留更改?
  • 这可能是onSaveInstanceState()的替代品,有什么优点和缺点?

1 个答案:

答案 0 :(得分:2)

如果您查看Intent的源代码,您会看到在访问其他内容时,Bundle来自Bundle。来自Map<String, Object>的{​​{1}} actually retrieving {/ 3}。{/ p>

Bundle由Android管理并在上下文切换期间保持活动状态,因此当您检索ArrayList时,您实际上正在检索ArrayListMap<String, Object>的引用}。这就是为什么当您对ArrayList进行更改时,它们会通过方向更改而保持不变而不会丢失。

至于修改Intent捆绑包中的变量是否合适,我建议您在ArrayList期间保存更新的onSaveInstanceState,然后从{在savedInstanceState中{1}}。这样做有助于防止此行为可能会让您或其他共同开发人员在使用此代码时感到惊讶。