如何从Parcel中检索使用TextUtils.writeToParcel(...)保存的CharSequence?

时间:2012-03-28 21:38:04

标签: android parcelable

我希望能够将格式化文本(即带格式跨度的文本)从我的某个应用活动发送到另一个应用活动。这些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将尽最大努力保存文本格式,我可以忍受。

1 个答案:

答案 0 :(得分:34)

如果有其他人感兴趣,我在this post找到答案。

使用CharSequence检索存储在Parcel中的TextUtils.writeToParcel(...)的正确方法是

cs = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);