Reputation: 625
I'm trying to send an object of this class to another activity. I used parcelabler.com to generate the code. The problem is when i declare the intent, Eclispse says that the method putExtra(String, GrupoMuscular) is undefined for the type Intent. Do i have a wrong parcelable implementation?
public class GrupoMuscular implements Parcelable {
private int id;
private static int id_aux = 0;
private String nome;
private int imagem;
private ArrayList<Exercicio> exercicios;
public GrupoMuscular(String nome, int img) {
//super();
id = id_aux;
id_aux++;
this.nome = nome;
this.imagem = img;
this.exercicios = new ArrayList<Exercicio>();
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getImagem() {
return imagem;
}
public void setImagem(int imagem) {
this.imagem = imagem;
}
public ArrayList<Exercicio> getGruposMuscular() {
return exercicios;
}
public void addExercicio(int id, String nome, String descricao, int imagem){
Exercicio ex = new Exercicio(id, nome, descricao, imagem);
exercicios.add(ex);
}
public void setGruposMuscular(ArrayList<Exercicio> gruposMuscular) {
this.exercicios = gruposMuscular;
}
public ArrayList<Exercicio> getExercicios() {
return exercicios;
}
public void setExercicios(ArrayList<Exercicio> exercicios) {
this.exercicios = exercicios;
}
public int getId() {
return id;
protected GrupoMuscular(Parcel in) {
id = in.readInt();
nome = in.readString();
imagem = in.readInt();
if (in.readByte() == 0x01) {
exercicios = new ArrayList<Exercicio>();
in.readList(exercicios, Exercicio.class.getClassLoader());
} else {
exercicios = null;
}
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(id);
dest.writeString(nome);
dest.writeInt(imagem);
if (exercicios == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeList(exercicios);
}
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<GrupoMuscular> CREATOR = new Parcelable.Creator<GrupoMuscular>() {
@Override
public GrupoMuscular createFromParcel(Parcel in) {
return new GrupoMuscular(in);
}
@Override
public GrupoMuscular[] newArray(int size) {
return new GrupoMuscular[size];
}
};
}
Activity Intent:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent;
intent = new Intent(ExerciciosActivity.this, ListaExerciciosActivity.class);
intent.putExtra("musculos", gruposMusculares.get(position));
startActivity(intent);
}});
}
Upvotes: 1
Views: 872
Reputation: 13932
Try Passing the Object as a Parcelable Extra on the Intent.
Since you are only passing a single instance of this Object.
// Create a new Intent
Intent myNewIntent = new Intent(this, NextActivity.class);
myNewIntent.putExtra("musculos", groupMusculares.get(position));
startActivity(myNewIntent);
Then in your NextActivity.class: use
// Class Member variable
GrupoMuscular mMuscleGroup;
// inside onCreate
Bundle extras = getIntent().getExtras();
// If the extras are not null
if(extras != null){
mMuscleGroup = extras.getParcelableExtra("musculos");
// if its not null do something with it
if(mMuscleGroup != null){
// Perform some logic
// ...
}
}
Upvotes: 2