2011-05-02 13 views
16

Tengo esta clase ConstantData que contiene mis índices JSON, necesito pasarlos entre actividades con extras. Pero antes de eso, primero tengo que implementar Parcelable a los objetos de esta clase.Android: ¿Cómo implementar Parcelable a mis objetos?

Mi pregunta es, ¿cómo debo declarar el objeto dentro de mi clase aquí y poner cada objeto dentro de una variable?

Soy un novato y no tengo ni idea en este momento. Gracias. Siéntete libre de modificar mi código a continuación.

ConstantData.java

public class ConstantData{ 

     public static String project_title = "project title"; 
     public static String organization_title = "organization title"; 
     public static String keyword = "keyword"; 
     public static String short_code = "short code"; 
     public static String project_description = "description"; 
     public static String smallImageUrl = "smallImageUrl"; 
     public static String bigImageUrl = "bigImageUrl"; 
     public static String price= "price"; 
     public static String country= "country"; 



     public static ArrayList<Project> projectsList = new ArrayList<Project>(); 


     public int describeContents() { 
      return 0; 
     } 

     public void writeToParcel(Parcel out, int flags) { 
      out.writeString(project_title); 
      out.writeString(organization_title); 
      out.writeString(keyword); 
      out.writeString(short_code); 
      out.writeString(project_description); 
      out.writeString(smallImageUrl); 
      out.writeString(bigImageUrl); 
      out.writeString(price); 
      out.writeString(country); 
     } 

     public static final Parcelable.Creator<ConstantData> CREATOR 
       = new Parcelable.Creator<ConstantData>() { 
      public ConstantData createFromParcel(Parcel in) { 
       return new ConstantData(in); 
      } 

      public ConstantData[] newArray(int size) { 
       return new ConstantData[size]; 
      } 
     }; 

     private ConstantData(Parcel in) { 
      project_title = in.readString(); 
      organization_title = in.readString(); 
      keyword = in.readString(); 
      short_code = in.readString(); 
      project_description = in.readString(); 
      smallImageUrl = in.readString(); 
      bigImageUrl = in.readString(); 
      price = in.readString(); 
      country = in.readString(); 
     } 
    } 

En caso de que mi pregunta no es lo suficientemente claro, se puede buscar esta pregunta: ¿How to send an object from one Android Activity to another using Intents?

Allí escribió myParcelableObject, yo no sé cómo hacer el objeto parcelable

EDITAR Project.java

public class Project { 

    public String project_title; 
    public String organization_title; 
    public String keyword; 
    public String short_code; 
    public String project_description; 
    public String smallImageUrl; 
    public String bigImageUrl; 
    public String price; 
    public String country; 
} 
+0

Solución en el interior: http://stackoverflow.com/questions/4049627/parcelable-and-inheritance-in-android –

+0

gracias! Entonces, en mi caso, solo necesito la 'clase A abstracta pública implementa Parcelable' ¿no? No necesito la 'clase pública B extiende A', ¿estoy en lo correcto? – hectichavana

+0

Una cosa que no se menciona es que si ya tiene datos como objeto JSON/XML y si ya tiene el analizador escrito, a veces es más fácil pasar el objeto JSON o XML si no lo está pasando más de 1-2 veces –

Respuesta

17

Es necesario implementar la interfaz Parcelable

public class ConstantData implements Parcelable { 

    public void writeToParcel(Parcel out, int flags) { 
     out.writeString(project_title); 
    .... 
     out.writeString(country); 
     out.writeList(projectsList); // <<-- 
    } 

    private ConstantData(Parcel in) { 
     project_title = in.readString(); 
     .... 
     country = in.readString(); 
     projectsList = in.readList(); 

Creo que para la redacción del projectsList al trabajo, la clase Project también necesita para implementar Parcelable.

Véase p. this class para un ejemplo.

+0

¡gracias! Una cosa más, obtuve la clase 'Proyecto' que contiene la variable JSON, ¿cómo puedo definir el 'Proyecto' en mi clase Parcelable ConstantData? Por ejemplo, en el código anterior coloco el Proyecto dentro de una matriz. "public static ArrayList projectsList = new ArrayList ();" – hectichavana

+0

@Irzan: ¿Te refieres a cómo escribir esa lista en el paquete? Puede usar el método http://developer.android.com/reference/android/os/Parcel.html#writeList(java.util.List) para esto. –

+0

¿me puede dar un ejemplo concreto, por favor? Muchas gracias :) – hectichavana

Cuestiones relacionadas