我有一个实现Serializable的Custom Type对象,我可以通过我的活动成功传递这个对象。
现在的情况是这样的:
在Activity 1上,CustomObject实例具有一个String属性,其值为“A”,并作为Extra传递给Activity 2:
Intent intent = new Intent(getApplicationContext(), Activity_2.class);
intent.putExtra("CUSTOM_OBJECT", customObjectInstance);
startActivityForResult(intent, 0);
在Activity 2上,我从Intent中检索CustomObject,并将属性值从“A”修改为“B”。
当我按下后退按钮,从活动2返回到活动1时,CustomObject属性上的值再次为“A”!
我检查了对象的哈希码并确认两个活动上的实例相同,但仍无法弄清楚为什么会发生这种情况。
修改
根据要求,关于我设置属性值的代码,它尽可能简单:
活动2:
CustomObject obj = (CustomObject) getIntent().getExtras().getSerializable("CUSTOM_OBJECT");
obj.setProperty("B");
答案 0 :(得分:2)
意图的附加内容仅包含值。您可以通过扩展Application类并部署" global"来引用参数。变量。
虽然你表示两个对象的哈希码都是一样的,我很确定每个Activity都处理它自己的一组局部变量。在测试中,活动A和B中的对象彼此独立。
希望它有所帮助。
答案 1 :(得分:0)
您是否在Activity中返回结果调用setResult(int)?这是关于开始活动结果的文档。
必须始终提供结果代码,该结果代码可以是标准结果RESULT_CANCELED,RESULT_OK或从RESULT_FIRST_USER开始的任何自定义值。此外,它还可以选择返回包含所需的任何其他数据的Intent。所有这些信息都会显示在父级的Activity.onActivityResult()上,以及它最初提供的整数标识符。
如果子活动因任何原因(例如崩溃)失败,则父活动将收到代码为RESULT_CANCELED的结果。
http://developer.android.com/reference/android/app/Activity.html#StartingActivities