2012-03-28 9 views
12

Desidero essere in grado di inviare testo formattato (ad esempio, testo con estensione di formato) da una delle attività della mia app a un altro. Queste istanze CharSequence vivono in profondità all'interno di alcuni tipi di Parcelable che ho creato.Come posso recuperare da un pacco un oggetto CharSequence salvato con TextUtils.writeToParcel (...)?

Per esempio, quando marshalling uno dei tipi che porta formattati CharSequence s che uso TextUtils.writeToParcel come segue:

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

Il problema è che non so come recuperare il CharSequence dal Parcel nel mio costruttore privato.

Quanto segue non lavoro:

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

ottengo il seguente errore:

android.os.BadParcelableException: ClassNotFoundException when unmarshalling 

Altri due cose: 1. ho già successo implementato il mio personalizzato Parcelable oggetti, il problema è in particolare con CharSequence s. 2. So che lo TextUtils.writeToParcel farà il massimo sforzo per salvare il formato di testo, posso conviverci.

+0

Prova cs = in.readValue (getClass() getClassLoader().); – yorkw

+0

@yorkw, il tuo approccio produce lo stesso risultato ('ClassNotFoundException'). – gdecaso

risposta

33

Nel caso in cui qualcun altro sia interessato, ho trovato la risposta in this post.

Il modo corretto per recuperare CharSequence s che sono stati memorizzati in un Parcel utilizzando TextUtils.writeToParcel(...) è

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