3

我有一个实现 Serializable 的自定义类型对象,并且我能够成功地通过我的活动传递这个对象。

现在的情况是这样的:

在 Activity 1 上,CustomObject 实例有一个 String 属性,其值为“A”,并作为 Extra 传递给 Activity 2:

Intent intent = new Intent(getApplicationContext(), Activity_2.class);
intent.putExtra("CUSTOM_OBJECT", customObjectInstance);

startActivityForResult(intent, 0);

在活动 2 中,我从 Intent 中检索 CustomObject 并将属性值从“A”修改为“B”。

当我按下返回按钮,从 Activity 2 回到 Activity 1 时,CustomObject 的属性值又是“A”了!

我检查了对象的哈希码并确认在两个活动上是同一个实例,但仍然无法弄清楚为什么会发生这种情况。

编辑:

根据要求,关于我设置属性值的代码,它尽可能简单:

关于活动 2:

CustomObject obj = (CustomObject) getIntent().getExtras().getSerializable("CUSTOM_OBJECT");
obj.setProperty("B");
4

2 回答 2

2

Intent 的 extras 仅包含值。您可以通过扩展 Application 类和部署“全局”变量来通过引用处理参数。

尽管您表示两个对象的哈希码相同,但我很确定每个 Activity 都处理自己的一组局部变量。在您的测试中,活动 A 和 B 中的对象是相互独立的。

希望能帮助到你。

于 2013-04-24T21:19:29.903 回答
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

于 2013-04-24T21:19:28.387 回答