Intent extras不是通过引用传递的?

时间:2013-04-24 21:11:32

标签: android android-intent

我有一个实现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");

2 个答案:

答案 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