2012-03-28 30 views
12

Tôi muốn có thể gửi văn bản được định dạng (tức là, văn bản có định dạng kéo dài) từ một trong các hoạt động ứng dụng của tôi sang một hoạt động khác. Những trường hợp CharSequence này sống sâu bên trong một số loại Parcelable mà tôi đã tạo.Làm cách nào để truy xuất từ ​​Parcel a CharSequence đã được lưu bằng TextUtils.writeToParcel (...)?

Ví dụ, khi marshalling một trong những loại mang định dạng CharSequence s tôi sử dụng TextUtils.writeToParcel như sau:

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 ... */ 
} 

Vấn đề là tôi không biết làm thế nào để lấy CharSequence từ Parcel trong tôi nhà xây dựng riêng.

Sau đây không không công việc:

private HoldsCharSequence(Parcel in) { 
    cs = (CharSequence) in.readValue(CharSequence.class.getClassLoader()); 
} 

tôi nhận được lỗi sau:

android.os.BadParcelableException: ClassNotFoundException when unmarshalling 

Hai nhiều điều: 1. Tôi đã thành công thực hiện tùy chỉnh của riêng tôi Parcelable đối tượng, vấn đề là với CharSequence s nói riêng. 2. Tôi biết rằng TextUtils.writeToParcel sẽ thực hiện công việc tốt nhất để lưu định dạng văn bản, tôi có thể sống với điều đó.

+0

Hãy thử cs = in.readValue (getClass() getClassLoader().); – yorkw

+0

@yorkw, cách tiếp cận của bạn mang lại kết quả tương tự ('ClassNotFoundException'). – gdecaso

Trả lời

33

Trong trường hợp người khác quan tâm, tôi đã tìm thấy câu trả lời trong this post.

Các cách chính xác để lấy CharSequence s đã được lưu trữ trong một Parcel sử dụng TextUtils.writeToParcel(...)

cs = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 
Các vấn đề liên quan