在一个被调用的活动中,我从调用活动传递给Intent的Extra中获取一个ArrayList:
Intent in = getIntent();
itemList = (ArrayList<HashMap<String, String>>) in
.getSerializableExtra("list_content");
然后我添加或删除一些项目到ArrayList,如
itemList.add(map);
我看到在设备轮换之后,就是活动被销毁并重新创建,在onCreate()
中调用来自Intent的相同getSerializableExtra()
返回对前一个实例所做的ArrayList的所有更改。
onSaveInstanceState()
的替代品,有什么优点和缺点?答案 0 :(得分:2)
如果您查看Intent
的源代码,您会看到在访问其他内容时,Bundle
来自Bundle
。来自Map<String, Object>
的{{1}} actually retrieving {/ 3}。{/ p>
Bundle
由Android管理并在上下文切换期间保持活动状态,因此当您检索ArrayList
时,您实际上正在检索ArrayList
中Map<String, Object>
的引用}。这就是为什么当您对ArrayList
进行更改时,它们会通过方向更改而保持不变而不会丢失。
至于修改Intent
捆绑包中的变量是否合适,我建议您在ArrayList
期间保存更新的onSaveInstanceState
,然后从{在savedInstanceState
中{1}}。这样做有助于防止此行为可能会让您或其他共同开发人员在使用此代码时感到惊讶。