如何在android中将Calendar对象从一个活动发送到另一个活动?

时间:2012-12-19 14:36:13

标签: java android

我有一个Calendar对象,其中有一些日期和时间由用户手动存储。 我希望此对象可用于下一个活动。

我该怎么做?使用Parcelable的putextra方法存在差异。

2 个答案:

答案 0 :(得分:13)

Calendar未实现Parcelable。

它看起来确实实现了Serializable,因此您可以将其序列化为字符串并将其作为Extra传递给您的其他活动。

您拥有的另一个选择是使用cal.getTimeInMillis(),它会为您提供一个long,您可以将其作为额外添加到您的意图中。然后你可以在另一边拉出它并创建一个新的Calendar对象,并立即调用它上面的setTimeInMillis(),这样它就可以设置为旧活动中Calendar对象的同时。

答案 1 :(得分:4)

cal.getTimeInMillis()是对的。 getTimeInMillis()的问题是你丢失了时区信息。因此,当读取该值时,UTC中的Calendar变量将转换为本地时区,可能会更改实际日期。

我不知道我是否有完美的答案,但我节省了时间(以毫秒为单位)和时区ID,因此我可以在另一侧完全重新创建日历对象。

public void writeToParcel(Parcel out, int flags) {
    out.writeLong(mycal.getTimeInMillis());
    out.writeString(mycal.getTimeZone().getID());
}

private MyClassObject(Parcel in) {

    long milliseconds = in.readLong();
    String timezone_id = in.readString();

    mycal = new GregorianCalendar(TimeZone.getTimeZone(timezone_id));
    mycal.setTimeInMillis(milliseconds);

}

out.writeSerializable();是一个选项,但我已经读到它很慢并且表现不佳,所以我选择了避免它。