2011-11-18 14 views
14

Quiero pasar objeto entre dos actividades en Android que me ha llevado a clases parcelable. No estoy intentando convertir mi clase actual, pero no entiendo el método Parcelable.Creator.Android: Hacer una clase parcelable

Esto es lo que tengo hasta ahora

public class Account implements Parcelable{ 

/** 
* Declare private variables 
*/ 

private String fName; 
private String lName; 
private String screenName; 
private String email; 
private String level; 
private int userId; 
//private Context myContext; 

/** 
* Account constructor 
*/ 

public Account(String fName, String lName, String sName, String email, String level, String x) throws Exception{  


    /**Parse userId into int */ 
    this.userId = Integer.parseInt(x); 

    /**Select from DB user details */ 


    /**Initialize variables with results */ 
    this.setfName(fName); 
    this.setlName(lName); 
    this.setScreenName(sName); 
    this.setEmail(email); 
    this.setLevel(level); 



} 

@Override 
public int describeContents() { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel out, int flags) { 
    // TODO Auto-generated method stub 
    out.writeString(fName); 
    out.writeString(lName); 
    out.writeString(screenName); 
    out.writeString(email); 
    out.writeString(level); 
    out.writeInt(userId); 

} 

// this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods 
public static final Parcelable.Creator<Account> CREATOR = new Parcelable.Creator<Account>() { 
    public Account createFromParcel(Parcel in) { 
     return new Account(in); 
    } 

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



/** 
* Getters and setters for all variables from Account class 
*/ 

public int getUserId(){ 
    return userId; 
} 

public String getScreenName() { 
    return screenName; 
} 

public void setScreenName(String screenName) { 
    this.screenName = screenName; 
} 

public String getfName() { 
    return fName; 
} 

public void setfName(String fName) { 
    this.fName = fName; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public String getLevel() { 
    return level; 
} 

public void setLevel(String level) { 
    this.level = level; 
} 

public String getlName() { 
    return lName; 
} 

public void setlName(String lName) { 
    this.lName = lName; 
} 



} 

Gracias de antemano.

Respuesta

11
public static final Parcelable.Creator CREATOR = 
    new Parcelable.Creator() { 
     public ObjectB createFromParcel(Parcel in) { 
      return new ObjectB(in); 
     } 

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

Este campo es necesario para que Android pueda crear nuevos objetos, individualmente o como matrices. Esto también significa que puede usar usar el constructor predeterminado para crear el objeto y usar otro método para hirrarlo según sea necesario.

Mira esta Android – Parcelable

Online tool for creating Parcelable class

y http://www.appance.com/tag/parcelable/

+2

"Este campo es necesario para que Android pueda crear nuevos objetos", pero * ¿cuándo *? –

18

Aquí es una gran herramienta para Android implementaciones parcelable.

Parcelabler by Dallas Gutauckis

+1

Esta herramienta es realmente útil. Estaba encontrando este tipo de herramienta.Gracias por compartir esto con nosotros. –

+0

@AndreyPetrov Ahora es. – Sufian

+1

la página no es válida de nuevo –

0

On GitHub se puede encontrar algo de código que escribí hace algún tiempo para simplificar el manejo de Parcelables (por ejemplo, escribiendo a y lectura de paquetes, simplificando el código de inicialización para CREATORs).

escritura a una parcela:

parcelValues(dest, name, maxSpeed, weight, wheels, color, isDriving); 

donde el color es una enumeración y isDriving es un valor booleano, por ejemplo.

lectura de una parcela:

// [...] 
color = (CarColor)unparcelValue(CarColor.class.getClassLoader()); 
isDriving = (Boolean)unparcelValue(); 

Creación de un creador para las clases:

public static final Parcelable.Creator<Car> CREATOR = 
    Parceldroid.getCreatorForClass(Car.class); 

... o para enumeraciones:

public static final Parcelable.Creator<CarColor> CREATOR = 
    Parceldroid.getCreatorForEnum(CarColor.class); 

Basta con echar un vistazo a la " ParceldroidExample "Agregué al proyecto.

0

La transferencia de datos entre actividades se puede realizar mediante serializable y parcelable. Pero parcelable se considera mejor. (why)

Hay un complemento en Android que le permite insertar código parcelable para los campos de la clase. Puede encontrarlo en el menú Archivo> Configuraciones> Complementos> Generador de código parcelable de Android.

Y use el atajo alt + insert como getter y setter para usar el plugin.

Cuestiones relacionadas