如何将对象传递给活动?

时间:2011-12-31 07:23:08

标签: android

我有两个活动,NewTransferMyOwn.java和FromAccount.java

当我从NewTransferMyOwn.java转到FromAccount.java时,我会编写如下代码

Intent i = new Intent(NewTransferMyOwn.this, FromAccount.class);
startActivityForResult(i, FROM_ACCOUNT);

当我从FromAccount.java回到NewT​​ransferMyOwn.java时,我希望传递一个完整的对象语句

我把代码编写为

Statement st = ItemArray.get(arg2);//ItemArray is ArrayList<Statement>, arg2 is int
Intent intent = new Intent(FromAccount.this,NewTransferMyOwn.class).putExtra("myCustomerObj",st);

我在putExtra上收到错误,

更改为“getIntExtra”

就像我一样,再次将st转换为int,这里有什么问题,我怎样才能将Statement对象传递回acitivity?

2 个答案:

答案 0 :(得分:7)

您还可以按Serializable实现自定义类并传递自定义对象

public class MyCustomClass implements Serializable
{
  // getter and setters
}

然后使用Intent传递自定义对象。

intent.putExtra("myobj",customObj);

检索您的对象

Custom custom = (Custom) data.getSerializableExtra("myobj");

<强>更新

在使用startActivityForResult

时将自定义对象传递给上一个活动
Intent data = new Intent();
Custom value = new Custom();
value.setName("StackOverflow");
data.putExtra("myobj", value);
setResult(Activity.RESULT_OK, data);
finish();

在先前活动中检索自定义对象

if(requestCode == MyRequestCode){
     if(resultCode == Activity.RESULT_OK){
         Custom custom = (Custom) data.getSerializableExtra("myobj");
         Log.d("My data", custom.getName()) ;
         finish();
     }
 }

答案 1 :(得分:2)

您无法在活动之间传递任意对象。您可以作为附加/在包中传递的唯一数据是基本类型或Parcelable对象。

Parcelables基本上是可以对字符串进行序列化/反序列化的对象。

您还可以考虑仅传递引用内容的URI并在其他活动中重新获取它。