我有一個日曆對象,用戶手動存儲一些日期和時間。 我希望此對象可用於下一個活動。如何在Android中將日曆對象從一項活動發送到另一項活動?
我該怎麼做?使用Parcelable的putextra方法會產生差異。
我有一個日曆對象,用戶手動存儲一些日期和時間。 我希望此對象可用於下一個活動。如何在Android中將日曆對象從一項活動發送到另一項活動?
我該怎麼做?使用Parcelable的putextra方法會產生差異。
Calendar沒有實現Parcelable。
但它看起來好像實現了Serializable,所以你可以將它序列化爲一個字符串並將它作爲Extra傳遞給其他活動。
你的另一個選擇是使用cal.getTimeInMillis()
這將給你一個long
,你可以添加一個額外的意圖。然後你可以把它拉出另一邊,並創建一個新的日曆對象,並立即調用setTimeInMillis()
,以便它將被設置爲與舊活動中的日曆對象相同的時間。
只要使用cal.getTimeInMillis()將會失去重要的TimeZone信息。請參閱http://stackoverflow.com/a/33092555/1550233的答案 – johnw182
cal.getTimeInMillis()是一半的權利。只是getTimeInMillis()的問題是你失去了時區信息。因此,在讀取該值時,UTC中的日曆變量將轉換爲本地時區,可能會更改實際日期。
我不知道我是否有完美的答案,但我節省了毫秒時間和時區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();是一種選擇,但我已經讀過,它是低迷,表現不佳,所以我選擇避免它。
當您使用Parcelable時,您會得到什麼不一致? –
gettime()。gettime()在長字段中,並且gettimezone()。getid()在字符串中應該做。 (如果你真的需要時區,那是(這是完全不可能的)) – njzk2