2015-01-04 41 views
1

我试图将此类的对象发送给其他活动。我使用parcelabler.com来生成代码。问题是当我声明意图时,Eclispse说putExtra(String,GrupoMuscular)方法对于Intent类型是未定义的。我有一个错误的parcelable实现?使用parcelable向另一个活动发送对象

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]; 
     } 
    }; 
} 

活动意图:

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); 
     }}); 
    } 
+1

第二个参数需要一个'List'。 – Emmanuel

+1

如果你只是使用'intent.putExtra(String,(Parcelable)GrupoMuscular)',它就会工作。尝试一下。 – joao2fast4u

+0

@ joao2fast4u但我想发送此数组的对象,而不是所有的对象数组。这就是为什么我把gruposMusculares.get(位置)。 –

回答

2

尝试传递对象作为Parcelable额外的意图。

http://developer.android.com/reference/android/content/Intent.html#putExtra(java.lang.String,android.os.Parcelable)

由于您只通过这个对象的单个实例。

// Create a new Intent 
Intent myNewIntent = new Intent(this, NextActivity.class); 
myNewIntent.putExtra("musculos", groupMusculares.get(position)); 
startActivity(myNewIntent); 

然后在您的NextActivity.class: 使用

http://developer.android.com/reference/android/content/Intent.html#getParcelableExtra(java.lang.String)

// 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 
     // ... 
    } 
} 
+0

但Eclipse仍然抱怨putExtra行,说: _method putParcelable(字符串,GrupoMuscular)是未定义的类型Intent_ –

+1

@MarcodeBarbosa他没有使用putParcelable(String,GrupoMuscular)。该方法不存在。他使用intent.putExtra(String,GrupoMuscular)。他的回答是对的。 – joao2fast4u

+0

@ joao2fast4u这是我的一个小错误。我不想写_putParcelable_,我很抱歉 –

相关问题