Как извлечь из Parcel CharSequence, которая была сохранена с использованием TextUtils.writeToParcel (...) - PullRequest
12 голосов
/ 29 марта 2012

Я хочу иметь возможность отправлять отформатированный текст (т. Е. Текст с форматами) из одного из моих действий приложения в другое.Эти CharSequence экземпляры живут глубоко внутри некоторых Parcelable типов, которые я создал.

Например, при маршалинге одного из типов, переносящих форматированные CharSequence s, я использую 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 Ответ

34 голосов
/ 29 марта 2012

В случае, если кто-то еще заинтересован, я нашел ответ в этом посте .

Правильный способ получения CharSequence с, которые были сохранены в Parcel с использованием TextUtils.writeToParcel(...), это

cs = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
...