2012-03-28 9 views
12

Deseo poder enviar texto formateado (es decir, texto con formato de extensión) de una de las actividades de mi aplicación a otra. Estas instancias CharSequence viven profundamente dentro de algunos tipos de Parcelable que creé.¿Cómo obtengo de Parcel a CharSequence que se guardó usando TextUtils.writeToParcel (...)?

Por ejemplo, al cálculo de referencias uno de los tipos que lleva formateados CharSequence s utilizo TextUtils.writeToParcel de la siguiente manera:

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

El problema es que no sé cómo recuperar el CharSequence del Parcel en mi constructor privado.

El siguiente no no trabajo:

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

me sale el siguiente error:

android.os.BadParcelableException: ClassNotFoundException when unmarshalling 

Otros dos cosas: 1. que ya han puesto en práctica con éxito mi propia costumbre Parcelable objetos, el problema es con CharSequence s en particular. 2. Sé que TextUtils.writeToParcel hará un trabajo de mejor esfuerzo al guardar el formato de texto, puedo vivir con eso.

+0

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

+0

@yorkw, su enfoque arroja el mismo resultado ('ClassNotFoundException'). – gdecaso

Respuesta

33

En caso de que alguien más esté interesado, encontré la respuesta en this post.

La forma correcta para recuperar CharSequence s que estaban almacenados en un Parcel usando TextUtils.writeToParcel(...) es

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