如何在Parcelable对象中访问ArrayList的元素?

时间:2014-02-06 07:08:11

标签: android android-intent android-fragments arraylist parcelable

在尝试将Parcelable实现到我的一些对象时,我遇到了困难。到目前为止,我有一个包含所有String和整数变量的Project类,以及另一个名为ParcelableProject的对象,它包含一个Project类。当我尝试使用AllProjects的名称创建另一个Parcelable类时,我的难度开始了,这个类包含一个由ParcelableProject对象组成的数组列表。

我有这种方法可以通过意图移动项目:

    public void addProject(ParcelableProject p){
         Intent i = new Intent(this.getActivity(), ProjectsFragment.class);
         ArrayList<ParcelableProject> data = new ArrayList<ParcelableProject>();
         data.add(p);
         i.putParcelableArrayListExtra("projects", data);

    }

此外,在我的ProjectsFragment中,我尝试通过以下方式访问此ArrayList数据:

    Intent i = getActivity().getIntent();
    Bundle data=i.getExtras();
    ArrayList Projects=  data.getParcelable("projects");
    ParcelableProject pProj=Projects.get(0);

但是它给了我一个“无法从Object转换为ParcelableProject”的错误。访问Project项目变量的正确方法是什么?将有一个列表传递到我的ProjectsFragment中,因此Parcelable需要包含Projects的ArrayList,我只是不知道如何访问各个项目。

2 个答案:

答案 0 :(得分:0)

这样做

Intent i = getIntent();
    Bundle data=i.getExtras();
    ArrayList<ParcelableProject> Projects= (ArrayList<ParcelableProject>) data.getParcelable("projects");

更新试试这个

ArrayList<ParcelableProject> Projects= (ArrayList<ParcelableProject>) data.getParcelableArrayList("projects");

答案 1 :(得分:0)

试试这个

public class EmployeeData implements Parcelable {

String empName;
String empId;
String empAddress;

public EmployeeData(Parcel in) {
    readFromParcel(in);
}

public EmployeeData(String name, String id, String address) {

    this.empName = name;
    this.empId = id;
    this.empAddress = address;
}

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

private void readFromParcel(Parcel in) {

    empName = in.readString();
    empId = in.readString();
    empAddress = in.readString();

}

@Override
public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub
    dest.writeString(empName);
    dest.writeString(empId);
    dest.writeString(empAddress);

}

public static final Parcelable.Creator<EmployeeData> CREATOR = new Creator<EmployeeData>() {

    @Override
    public EmployeeData[] newArray(int size) {
        // TODO Auto-generated method stub
        return new EmployeeData[size];
    }

    @Override
    public EmployeeData createFromParcel(Parcel source) {
        // TODO Auto-generated method stub
        return new EmployeeData(source);
    }
};

public String getEmpName() {
    return empName;
}

public void setEmpName(String empName) {
    this.empName = empName;
}

public String getEmpId() {
    return empId;
}

public void setEmpId(String empId) {
    this.empId = empId;
}

public String getEmpAddress() {
    return empAddress;
}

public void setEmpAddress(String empAddress) {
    this.empAddress = empAddress;
}

}

把对象放在:

EmployeeData empData = new EmployeeData(name, id, address);

            Bundle bundle = new Bundle();
            bundle.putParcelable("DATA", empData);

            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            intent.putExtras(bundle);

获取对象:

EmployeeData empData = getIntent().getParcelableExtra("DATA");