我希望能够将格式化文本(即带格式跨度的文本)从我的某个应用活动发送到另一个应用活动。这些CharSequence
实例深入到我创建的某些Parcelable
类型中。
例如,当编组其中一个带有格式化CharSequence
的类型时,我使用TextUtils.writeToParcel
,如下所示:
public class HoldsCharSequence {
/* some formatted string that uses basic spans (e.g., ForegroundColorSpan) */
private CharSequence cs;
public void writeToParcel(Parcel out, int flags) {
TextUtils.writeToParcel(cs, out, 0);
}
/* ... rest of the code ... */
}
问题是我不知道如何从私有构造函数中的CharSequence
检索Parcel
。
以下不工作:
private HoldsCharSequence(Parcel in) {
cs = (CharSequence) in.readValue(CharSequence.class.getClassLoader());
}
我收到以下错误:
android.os.BadParcelableException: ClassNotFoundException when unmarshalling
还有两件事:
1.我已经成功实现了自己的自定义Parcelable
对象,特别是问题CharSequence
。
2.我知道TextUtils.writeToParcel
将尽最大努力保存文本格式,我可以忍受。
答案 0 :(得分:34)
如果有其他人感兴趣,我在this post找到答案。
使用CharSequence
检索存储在Parcel
中的TextUtils.writeToParcel(...)
的正确方法是
cs = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);