Pasar objetos de una activity a otra

E

Buenas tardes.

Estoy aquí pegandome con Android y tengo un problema. Necesito pasar un ArrayList de objetos (un objeto propio mio) a otra activity. Vale, es usando un Bundle, pero no se como hacer que mi ArrayList y mis objetos sean de tipo Parcelable para así poder pasarlo, pero no me aclaro mucho :psyduck:

Si me podéis echar un cable os lo agradezco xD

public class Item {

private Drawable photo;
private String name;
private int price;
private long id;

public Item(Drawable photo, String name, int price) {
    this.photo = photo;
    this.name = name;
    this.price = price;
}

public Drawable getPhoto() {
    return photo;
}

public void setPhoto(Drawable photo) {
    this.photo = photo;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getPrice() {
    return price;
}

public void setPrice(int price) {
    this.price = price;
}

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

}
Drhaegar

:psyduck: :psyduck: :psyduck:

¿Has probado a usar google? Si es así te recomiendo que hagas las búsquedas siempre en inglés, la inmensa mayoría de tutoriales en español son horriblemente malos.

http://stackoverflow.com/questions/15731029/array-list-intent-extra-in-java

Ese método funciona pero gasta bastantes recursos, yo prefiero evitar ese tipo de cosas.

1 respuesta
E

#2 sí, he probado google, y resulta que no se puede pasar un ArrayList de objetos que yo mismo he creado directamente en el Bundle, hay que implementar Parcelable. Y eso es lo que no entiendo, como implementarlo, porque el Drawable me da guerra.

Lecherito

Es que pasar un Drawable es un despropósito

1 respuesta
E

#4 como debo pasarlo entonces?

2 respuestas
ke2g

#5 has probado con bitmap?

    
public void writeToParcel(Parcel out, int flags) { ... ... // Convert Drawable to Bitmap first: Bitmap bitmap = (Bitmap)((BitmapDrawable) photo).getBitmap(); // Serialize bitmap as Parcelable: out.writeParcelable(bitmap, flags); ... ... } private Guide(Parcel in) { ... ... // Deserialize Parcelable and cast to Bitmap first: Bitmap bitmap = (Bitmap)in.readParcelable(getClass().getClassLoader()); // Convert Bitmap to Drawable: photo = new BitmapDrawable(bitmap); ... ... }
1 respuesta
Lecherito

#5 Qué quieres pasar?

1 respuesta
E

#7 es un resource lo que quiero pasar, una foto.

#6 sí, eso estoy intentando ahora, voy a probar

2 respuestas
Lecherito

#8 Si es un resource porqué no pasas la id? xDD

1 respuesta
CodingCloud

#8 No intentes nada. Usa esto y no te calientes la cabeza y si es un resource pasa la referencia como te han dicho xD
https://github.com/mcharmas/android-parcelable-intellij-plugin

1 respuesta
E

#9 #10 vale xD ya me lo he instalado el plugin, ahora os comento.

Pregunta de noob... Y como paso la id del objeto? :psyduck: R.id? String? long?

2 respuestas
Lecherito

#11 Creo que son ints si no recuerdo mal

1 respuesta
Drhaegar

A malas siempre puedes copiar el contenido en un fichero de texto y luego abrirlo en la otra activity xD

Las id son siempre int (o Integer si las sacas de una base de datos).

1 respuesta
CodingCloud

#11 Es un integer, pero enserio, pruebalo tu mismo.

String a = R.drawable.nombreDrawable

El propio editor sin compilar ya te avisa del error, pon el ratón encima y te llorará que estas intentando asignar un integer a un tipo de dato que no admite numeros.

1 respuesta
E

#12 #14 #13 son int, correcto.

Sí, mucho mejor con un int que pasando el Drawable, donde va a parar xD

Y brutal el plugin, yo buscando como hacerlo y ya han programado algo para que lo haga automáticamente :psyduck:

Muchas gracias, duda solucionada.

Usuarios habituales

  • elraro
  • CodingCloud
  • Drhaegar
  • Lecherito
  • ke2g