我正在尝试将一个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)
答案 0 :(得分:3)
您可以使用data.putExtra()
/ bundle.putSerializable()
将自定义对象放入Bundle / Intent中,但是,您必须使您的类Receipt工具Serializable
(只需添加implements Serializable
在班级名称之后,只需要这么简单的班级即可。
然后要回读它,请使用getSerializable()
。
注意:我不认为Date
- 类是可序列化的,您可能希望用毫秒代替具有长代表时间的那些(您可以使用{{1对于那个)。
示例:强>
Date.getTime()
答案 1 :(得分:0)
答案 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 = receipts
和ArrayList<Receipt> receipts = (ArrayList<Receipt>)(MyApplication.mData)
。
由于MyApplication对象将在整个应用程序生命周期中存在,因此该方法足够安全,并且建议在Android(以及其他)书籍中使用。