将一个arraylist发送回父活动

时间:2012-02-23 09:58:52

标签: java android

我正在尝试将一个arraylist传递回我的父活动

这是简单的代码。

private ArrayList<Receipt> receipts = new ArrayList<Receipt>();


 Intent data = new Intent();
 data. // what to do here?
setResult(RESULT_OK, data); 

//************************************

这是基本收据类

public class Receipt {


    public String referenceNo;
    public byte[]   image;
    public String comments;
    public Date   createdOn;
    public Date   updatedOn;

告诉我如何在我的意图中添加它以及如何从

中的父活动中检索它
onActivityResult(final int requestCode, int resultCode, final Intent data)

4 个答案:

答案 0 :(得分:3)

您可以使用data.putExtra() / bundle.putSerializable()将自定义对象放入Bundle / Intent中,但是,您必须使您的类Receipt工具Serializable(只需添加implements Serializable在班级名称之后,只需要这么简单的班级即可。 然后要回读它,请使用getSerializable()

注意:我不认为Date - 类是可序列化的,您可能希望用毫秒代替具有长代表时间的那些(您可以使用{{1对于那个)。

示例:

Date.getTime()

答案 1 :(得分:0)

您的解决方案是使用parcelable。请浏览以下链接:

link1link2link3

答案 2 :(得分:0)

您只需传递ArrayList并返回即可。

例如:

ArrayList<Receipt> list = new ArrayList<Receipt>();
intent intent = new Intent();
intent.putExtra("Hello", list);

但请确保您的收据类中必须有 implements Serializable 界面。

即。

public class Receipt implements Serializable

答案 3 :(得分:0)

如果您的ArrayList要大,那么传递它会因为Intent数据可能会导致应用程序无响应等问题。这是因为操作系统需要时间来传递所有数据。

相反,您可以创建自己的Application类(您还必须在Manifest中注册它)。然后在这堂课中你可以有

class MyApplication extends Application {
...
public static Object mData;
}

然后,您可以根据需要MyApplication.mData = receiptsArrayList<Receipt> receipts = (ArrayList<Receipt>)(MyApplication.mData)

由于MyApplication对象将在整个应用程序生命周期中存在,因此该方法足够安全,并且建议在Android(以及其他)书籍中使用。