在尝试将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,我只是不知道如何访问各个项目。
答案 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");